【问题标题】:Android can't play video only audio after using camera2 API createCaptureSession使用camera2 API createCaptureSession后Android无法播放视频仅音频
【发布时间】:2020-10-30 04:22:46
【问题描述】:

安卓版本:5.1

您好,我注意到我的应用使用 camera2 API 创建CaptureSession(快照/记录)后,我的 android 设备不再正确播放视频,只有黑屏的音频...而且不仅仅是我的应用程序,所有其他流媒体应用程序都会出现同样的问题。我需要重新启动才能解决此问题。顺便说一句,我的设备是定制的,所以我不能使用 ADB,而且这个问题甚至不会在我的模拟器中发生。我现在不知道,这让我很生气。有人可以帮我吗?我会很感激的..!!下面是我如何创建CaptureSession 和发布。也许我的代码有问题?

快照:

...after camera opened
                cameraDevice = p0;

                previewTextureListener = PreviewSurfaceTextureListener()

                cameraPreview.surfaceTextureListener = previewTextureListener
                
                cameraPreview.setTransform(transform)

...after previewTextureListenerAvailable 

                val captureWidth = 1920
                val captureHeight = 1080

                previewSurfaceTexture = surfaceTexture

                previewSurfaceTexture?.setDefaultBufferSize(captureWidth, captureHeight)

                previewSurface = Surface(previewSurfaceTexture)

                val sessionStateCallback = SessionStateCallback()

                imageReader = ImageReader.newInstance(captureWidth, captureHeight, ImageFormat.JPEG, 1)

                imageReader?.setOnImageAvailableListener(ImageAvailableCallback(), cameraHandler)

                imageSurface = imageReader?.surface

                val outputs = mutableListOf(previewSurface, imageSurface)

                cameraDevice?.createCaptureSession(outputs, sessionStateCallback, mainHandler)

...after sessionStateConfigured

            val requestBuilder = cameraDevice?.createCaptureRequest(CameraDevice.TEMPLATE_PREVIEW)

            requestBuilder?.addTarget(previewSurface!!)

            val request = requestBuilder?.build()

            cameraCaptureSession?.setRepeatingRequest(request!!, PreviewImageCallback(), mainHandler)

记录:


        // Start a capture session
        cameraDevice?.createCaptureSession(listOf(previewSurface, mediaRecorder?.surface), RecordSessionStateCallback(), cameraHandler)

... after RecordSessionConfigured

            val recordRequest = cameraDevice?.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);

            recordRequest?.addTarget(previewSurface!!);

            recordRequest?.addTarget(mediaRecorder?.surface!!)

            cameraRecordSession?.setRepeatingRequest(recordRequest?.build()!!, PreviewImageCallback(), cameraHandler)

活动onDestroy时:

        cameraPreview?.surfaceTextureListener = null

        cameraCaptureSession?.stopRepeating()

        cameraCaptureSession?.close()

        cameraDevice?.close()

        cameraDevice = null

【问题讨论】:

    标签: android kotlin android-videoview android-camera2


    【解决方案1】:

    如果没有来自设备的日志,很难判断,但很可能是设备的媒体编解码器堆栈有问题。在您的应用使用 MediaRecorder 完成后,它会使编解码器处于错误状态,需要重新启动才能再次工作,无论是编码还是解码。

    您用于 MediaRecord 的特定设置可能会触发此问题,但在正确构建的设备上,无论您的设置是什么,这都不应该发生。

    很遗憾,如果这是问题所在,则很可能需要在设备的编解码器 HAL 中进行修复,或者在怯场媒体代码中进行修复(如果已从 AOSP 版本进行修改)。没有日志就不可能知道到底出了什么问题,但是编解码器关闭中的死锁是一种可能性。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-31
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 2016-04-27
      相关资源
      最近更新 更多