0

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

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

请找到下面写的代码:(这里的VideoPanel(扩展GLSurfaceView)是oovooSDK提供的用于显示视频的Frame)

                            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
4

1 回答 1

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;
        }
}
于 2016-11-15T10:14:21.400 回答