CameraAccessException开始摄像头会话时管道破损

问题描述 投票:0回答:1

在从onOpened()进行CameraDevice.StateCallback回调之后,尝试创建捕获会话时遇到此CameraAccessException >>

首先是崩溃日志

Fatal Exception: android.hardware.camera2.CameraAccessException: CAMERA_ERROR (3): endConfigure:537: Camera 1: Error configuring streams: Broken pipe (-32)
       at android.hardware.camera2.CameraManager.throwAsPublicException(CameraManager.java:1127)
       at android.hardware.camera2.impl.ICameraDeviceUserWrapper.endConfigure(ICameraDeviceUserWrapper.java:117)
       at android.hardware.camera2.impl.CameraDeviceImpl.configureStreamsChecked(CameraDeviceImpl.java:481)
       at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:669)
       at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:517)
       at a.b.c.d.MainActivity.startCapturingSession(MainActivity.java:364)
       at a.b.c.d.MainActivity.access$startCapturingSession(MainActivity.java:36)
       at a.b.c.d.MainActivity$stateCallback$1.onOpened(MainActivity.java:90)
       at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:150)
       at android.os.Handler.handleCallback(Handler.java:883)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loop(Looper.java:237)
       at android.os.HandlerThread.run(HandlerThread.java:67)

Caused by android.os.ServiceSpecificException: endConfigure:537: Camera 1: Error configuring streams: Broken pipe (-32)
       at android.os.Parcel.createException(Parcel.java:2102)
       at android.os.Parcel.readException(Parcel.java:2056)
       at android.os.Parcel.readException(Parcel.java:2004)
       at android.hardware.camera2.ICameraDeviceUser$Stub$Proxy.endConfigure(ICameraDeviceUser.java:742)
       at android.hardware.camera2.impl.ICameraDeviceUserWrapper.endConfigure(ICameraDeviceUserWrapper.java:114)
       at android.hardware.camera2.impl.CameraDeviceImpl.configureStreamsChecked(CameraDeviceImpl.java:481)
       at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSessionInternal(CameraDeviceImpl.java:669)
       at android.hardware.camera2.impl.CameraDeviceImpl.createCaptureSession(CameraDeviceImpl.java:517)
       at a.b.c.d.MainActivity.startCapturingSession(MainActivity.java:364)
       at a.b.c.d.MainActivity.access$startCapturingSession(MainActivity.java:36)
       at a.b.c.d.MainActivity$stateCallback$1.onOpened(MainActivity.java:90)
       at android.hardware.camera2.impl.CameraDeviceImpl$1.run(CameraDeviceImpl.java:150)
       at android.os.Handler.handleCallback(Handler.java:883)
       at android.os.Handler.dispatchMessage(Handler.java:100)
       at android.os.Looper.loop(Looper.java:237)
       at android.os.HandlerThread.run(HandlerThread.java:67)

Camera error doc表示相机处于错误状态。这可能是由于应用代码中的任何错误实现吗?

我的应用代码

private val stateCallback = object : CameraDevice.StateCallback() {
        override fun onOpened(camera: CameraDevice) {
            cameraDevice = camera
            startCapturingSession()
        }

        override fun onDisconnected(camera: CameraDevice) {
            cameraDevice = null
            camera.close()
        }

        override fun onError(camera: CameraDevice, error: Int) {
            onDisconnected(camera)
        }
    }

@WorkerThread
    private fun startCapturingSession() {

        val prevSurface = previewSurface ?: kotlin.run {
            throw IllegalStateException("Preview Surface is null while starting capture session")
        }

        reader1 = ImageReader.newInstance(
            PREVIEW_WIDTH, PREVIEW_HEIGHT,
            ImageFormat.YUV_420_888, IMAGE_READER_MAX_IMAGES
        )
        reader1!!.setOnImageAvailableListener(analyser, null)
        val surface1 = reader1!!.surface

        reader2 = ImageReader.newInstance(
            PREVIEW_WIDTH, PREVIEW_HEIGHT,
            ImageFormat.YUV_420_888, IMAGE_READER_MAX_IMAGES
        )
        reader2!!.setOnImageAvailableListener(imageAvailableListener, null)
        val surface2 = reader2!!.surface
        val device = cameraDevice
            ?: throw IllegalStateException("Camera Device null while capturing session")

        device.createCaptureSession( // this is line 364 from the crash log
            listOf(surface1, surface2, prevSurface),
            object : CameraCaptureSession.StateCallback() {
                override fun onConfigureFailed(session: CameraCaptureSession) {
                }

                override fun onConfigured(session: CameraCaptureSession) {
                    // more code here
                }
            }, null
        )
    }

在最坏的情况下,我能抓到这个并关闭并重新拿回相机吗?

这种情况并非总是会发生,但是连续尝试打开应用程序失败。

我在从CameraDevice.StateCallback的onOpened()回调之后尝试创建捕获会话时遇到此CameraAccessException,首先是崩溃日志致命异常:android ....

android android-camera android-camera2
1个回答
0
投票
© www.soinside.com 2019 - 2024. All rights reserved.