Проблема переключения GLSurfaceView

У меня проблема с переключением GLSurfaceView. У меня есть GLSurfaceView (связанный с камерой), и я хочу переместить его в другой вид, но когда я его перемещаю, он теряет свои кадры и показывает черный экран после переключения. и когда я снова подключаю его к камере, он начинает показывать мою камеру, но с задержкой.

Может ли кто-нибудь сказать мне решение, чтобы переместить его к другому родителю, не теряя его кадров (потому что, когда я повторно подключаю его, он показывает кадры с задержкой 2-3 секунды).

Пожалуйста, найдите код, написанный ниже: (Здесь VideoPanel (расширяет GLSurfaceView) - это Frame, предоставленный 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 ответ

Камера не правильно отпустит, когда твоя деятельность закончится.

Если вы используете вид поверхности, тогда отпустите камеру в 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;
        }
}
Другие вопросы по тегам