【问题标题】:FATAL EXCEPTION: CameraX-audio encoding thread致命异常:CameraX 音频编码线程
【发布时间】:2020-01-06 14:32:03
【问题描述】:

我正在使用相机 X 库录制视频。当我在此之前拍摄视频 5 秒(即)两秒时,如果我关闭视频,它会因上述错误而崩溃。如何在 android cameraX 库中处理此运行时异常

E/AndroidRuntime: FATAL EXCEPTION: CameraX-audio encoding thread
Process: .debug, PID: 4625
java.lang.IllegalStateException
    at android.media.MediaCodec.native_dequeueOutputBuffer(Native Method)
    at android.media.MediaCodec.dequeueOutputBuffer(MediaCodec.java:2698)
    at androidx.camera.core.VideoCapture.audioEncode(VideoCapture.java:705)
    at androidx.camera.core.VideoCapture$1.run(VideoCapture.java:340)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:201)
    at android.os.HandlerThread.run(HandlerThread.java:65)

有时会出现以下问题

FATAL EXCEPTION: CameraX-video encoding thread
Process: <packagename>, PID: 10794
java.lang.NullPointerException: Attempt to invoke virtual method 'int android.media.MediaCodec.dequeueOutputBuffer(android.media.MediaCodec$BufferInfo, long)' on a null object reference
    at androidx.camera.core.VideoCapture.videoEncode(VideoCapture.java:604)
    at androidx.camera.core.VideoCapture$2.run(VideoCapture.java:348)
    at android.os.Handler.handleCallback(Handler.java:873)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:193)
    at android.os.HandlerThread.run(HandlerThread.java:65)

在这个示例中还没有修复 https://github.com/android/camera-samples/issues/2#issuecomment-546812852

【问题讨论】:

    标签: java android camera android-camera2 android-camerax


    【解决方案1】:

    通过向videoCapture.startRecording(videoFile, executor, onVideoSavedCallback); 添加回调,您应该能够处理onError 方法中的异常。

    /**
     * Define callback that will be triggered after a video has been taken and saved to disk
     */
    private VideoCapture.OnVideoSavedCallback onVideoSavedCallback= new VideoCapture.OnVideoSavedCallback() {
        @SuppressLint("RestrictedApi")
        @Override
        public void onVideoSaved(@NonNull File file) {
            Log.d("VIDEO_CAPTURE", "Video capture succeeded");
        }
    
        @Override
        public void onError(int videoCaptureError, @NonNull String message, @Nullable Throwable cause) {
            Log.e("VIDEO_CAPTURE", "Video capture failed");
            if (cause != null) {
                cause.printStackTrace();
                Toast.makeText(context,"Video capture failed",Toast.LENGTH_LONG).show();
            }
        }
    };
    

    【讨论】:

    • 您使用的是哪个版本的cameraX?​​span>
    • 实现“androidx.camera:camera-core:1.0.0-alpha06”实现“androidx.camera:camera-camera2:1.0.0-alpha06”
    • 我可以用 onVideoSavedCallback 处理 alpha07 上的这个错误,我不知道 alpha06。这些版本之间发生了很多变化,也许您可​​以尝试更新库。
    • 我也签入了这个 GitHub 链接,但内置异常没有解决
    • 当您使用 stopRecording() 停止视频或在 2 秒时关闭活动时,是否会引发异常?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-30
    • 2013-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    相关资源
    最近更新 更多