GLSurfaceView切换问题

时间:2016-11-15 08:23:15

标签: android glsurfaceview videochat oovoo

我在切换GLSurfaceView时遇到问题。我有一个GLSurfaceView(与Camera连接),我想将它移动到另一个视图,但是当我移动它时,它会丢失它的帧并在切换后显示blackScreen。当我重新连接到相机时,它开始显示我的相机,但有延迟。

任何人都可以告诉我解决方案将其移动到另一个父级而不会丢失其帧(因为当我重新连接它的显示帧时延迟2-3秒)。

请查找下面的代码: (这里VideoPanel(扩展GLSurfaceView)是由oovooSDK提供的框架来显示视频)

                            final VideoPanel movingVideoView = parent1.getChildAt(0);

                            movingView.onPause();

                            parent1.removeView(movingView);
                            parent2.addView(movingView);

                            movingView.onResume();
                            movingView.requestRender();

重新连接:

                            application.unbindVideoPanel(videoView.userId, videoView.videoRender);
                            application.unbindVideoPanel(videoView.userId, videoView.videoRender);
                            // this methods shows delay of 2-3 seconds for binding view again

我也试过以下方法

        ((VideoPanel) videoView.videoRender).setPreserveEGLContextOnPause(true);
        // to save context when paused
((VideoPanel)videoView.videoRender).setRenderMode(GLSurfaceView.RENDERMODE_WHEN_DIRTY); // to render frame again when requestRender is called

1 个答案:

答案 0 :(得分:0)

当您的活动结束时,相机无法正常发布。

如果您使用的是Surface视图而不是在onSurfaceDestroy中释放相机

public void surfaceDestroyed(SurfaceHolder holder) {
        if(camera!=null){
            camera.stopPreview();
            camera.setPreviewCallback(null);
            camera.release();
            camera = null;
        }

    }

如果相机不能使用,也建议您将相机发布。

protected void onDestroy(){
        if(camera!=null){
            camera.stopPreview();
            camera.setPreviewCallback(null);
            camera.release();
            camera = null;
        }
}