0

私はアンドロイドで非常に新しく、アンドロイドcamera2 APIを使用してシンプルなビデオレコーダーアプリを作成しようとしています. YouTube のチュートリアルに従って、TextureView でカメラをプレビューし、MediaRecorder でキャプチャを開始することができましたが、レコーダーを停止してビデオをデバイス ストレージに保存するのに問題があります。

このエラーは MediaRecorder.stop() で表示されます

W/Adreno-EGLSUB: : デキュー ネイティブ バッファの失敗: そのようなデバイスはありません、バッファ = 0x0、ハンドル = 0x0 W/Adreno-EGL: : EGL_BAD_SURFACE E/CameraDeviceGLThread-0: GL レンダリング スレッドで例外を受け取りました: java.lang.IllegalStateException: swapBuffers: EGL エラー: Android.hardware.camera2.legacy.SurfaceTextureRenderer.checkEglError(SurfaceTextureRenderer.java:544) で 0x300d、android.hardware.camera2.legacy.SurfaceTextureRenderer.swapBuffers(SurfaceTextureRenderer.java:537) でandroid.hardware.camera2.legacy.GLThreadManager$1.handleMessage(GLThreadManager.java:105) android.os.Handler.dispatchMessage(Handler.java:98) で android.os.Looper.loop(Looper.java:148) で android.os.HandlerThread.run(HandlerThread.java:61) I/CameraDeviceState : レガシー カメラ サービスが状態 ERROR に移行中

Android 6.0 api23 デバイスを使用してアプリを実行しています。

ありがとう

EDIT : これが stopRecording 関数です。

                try{
                    previewSession.stopRepeating();
                    previewSession.abortCaptures();
                }catch(CameraAccessException e){
                    e.printStackTrace();
                }
                recorder.stop();
                recorder.reset();
                isRecording = false;
                Toast.makeText(getApplicationContext(),"Recording Stopped",Toast.LENGTH_SHORT).show();

... @NewOneの答えに基づいて、recorder.stop()の前にtry catchを含めた後、新しいエラーが発生しました

--------- クラッシュの始まり E/AndroidRuntime: FATAL EXCEPTION: main Process: com.tingker.daryl.camera2, PID: 9014 Theme: themes:{default=overlay:com.cyngn.hexo, iconPack: com.cyngn.hexo、fontPkg:com.cyngn.hexo、com.android.systemui=overlay:com.cyngn.hexo、com.android.systemui.navbar=overlay:com.cyngn.hexo} java.lang.IllegalStateException:セッションが閉じられました。それ以上の変更は違法です。com.tingker.daryl.camera2.MainActivity$2. onClick(MainActivity.java:121) アンドロイドで。

4

1 に答える 1

1

現在、記録停止方法に何があるかわかりません。共有していただければ、より良いお手伝いができるかもしれません。とにかく、停止メソッドを呼び出す前に、以下のコード行があることを確認してください。

private void stopRecording()) {

        .....

        try {
            preview.stopRepeating();
            preview.abortCaptures();
        } catch (CameraAccessException e) {
            e.printStackTrace();
        }

        try{
           mediaRecorder.stop();
        }catch(RuntimeException e){
           //handle the exception
        }
        mediaRecorder.reset();

        ......
    }

このリンクを確認してください。レコーダーを開始した直後に停止すると、例外がキャッチされる場合があります。

于 2016-10-05T06:59:29.267 に答える