Android tidak dapat memutar audio hanya video setelah menggunakan API camera2 createCaptureSession

Versi Android: 5.1

Hai, saya perhatikan bahwa setelah aplikasi saya menggunakan camera2 API untuk membuatCaptureSession (snapshot/ record), perangkat Android saya tidak lagi memutar video dengan benar, hanya audio dengan layar hitam... dan bukan hanya aplikasi saya, semua aplikasi streaming lainnya mengalami masalah yang sama. Saya perlu reboot untuk memperbaiki masalah ini. BTW, perangkat saya dikustomisasi jadi saya tidak bisa menggunakan ADB dan masalah ini bahkan tidak terjadi di simulator saya.. Saya hanya tidak tahu apa-apa sekarang, itu membunuh saya. Bisakah seseorang membantu saya? Saya akan menghargainya..!! Di bawah ini adalah cara saya membuatCaptureSession dan merilis. Mungkin ada yang salah dengan kode saya?

Foto:

...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)

catatan:


        // 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)

Saat aktivitas di Hancurkan:

        cameraPreview?.surfaceTextureListener = null

        cameraCaptureSession?.stopRepeating()

        cameraCaptureSession?.close()

        cameraDevice?.close()

        cameraDevice = null

person Yu Hung Hsu    schedule 30.10.2020    source sumber


Jawaban (1)


Sulit untuk membedakannya tanpa log dari perangkat, namun kemungkinan besar, ada sesuatu yang salah dalam tumpukan kodek media perangkat. Ini membuat codec dalam keadaan buruk setelah aplikasi Anda selesai dengan MediaRecorder, sehingga memerlukan reboot sebelum dapat berfungsi kembali, baik untuk enkode atau dekode.

Mungkin saja pengaturan tertentu yang Anda gunakan untuk MediaRecord memicu hal ini, tetapi pada perangkat yang dibuat dengan benar, hal ini tidak akan terjadi, apa pun pengaturan Anda.

Sayangnya, jika itu masalahnya, kemungkinan besar perlu diperbaiki dalam codec HAL untuk perangkat, atau dalam kode media stagefright, jika sudah dimodifikasi dari versi AOSP. Apa sebenarnya yang salah tidak mungkin diketahui tanpa log, tetapi kebuntuan dalam penghentian codec adalah salah satu kemungkinannya.

person Eddy Talvala    schedule 30.10.2020