使用camera2 API createCaptureSession后,Android无法仅播放视频音频

如何解决使用camera2 API createCaptureSession后,Android无法仅播放视频音频

Android版本:5.1

嗨,我注意到之后,我的应用使用 camera2 API创建CaptureSession (快照/记录),我的android设备不再正确播放视频,只有黑屏的音频 ...而不仅仅是我的应用,其他所有流式应用都出现相同的问题。我需要重新启动才能解决此问题。顺便说一句,我的设备是自定义的,所以我不能使用ADB,并且模拟器中甚至都不会发生此问题。有人可以帮我吗?我会很感激.. !!以下是我createCaptureSession和发布的方式。也许我的代码有问题吗?

快照:

...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()!!,cameraHandler)

打开电击时:

        cameraPreview?.surfaceTextureListener = null

        cameraCaptureSession?.stopRepeating()

        cameraCaptureSession?.close()

        cameraDevice?.close()

        cameraDevice = null

解决方法

没有设备的日志很难说,但是很可能设备的媒体编解码器堆栈出了问题。在使用MediaRecorder完成您的应用程序后,这会使编解码器处于不良状态,需要重新启动才能再次进行编码或解码。

您用于MediaRecord的特定设置可能会触发此操作,但是在正确构建的设备上,无论您的设置是什么,都不会发生这种情况。

不幸的是,如果这是问题所在,则很有可能需要将其固定在设备的编解码器HAL中,或者很可能是在stagefright媒体代码中进行修复(如果已从AOSP版本进行了修改)。确切地说,没有日志是不可能知道什么问题的,但是编解码器关闭中的死锁是一种可能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?