android проблема api камеры2 с MediaRecorder - PullRequest
0 голосов
/ 28 мая 2020

У меня странная ошибка: мой CameraDevice.createCaptureSession не определяет размер моей MediaRecorder Surface и не отказывается от него. Если я отключу устройство записи мультимедиа, приложение работает нормально.

Исходный код

        public void onOpened(CameraDevice camera) {

            SurfaceTexture texture = previewView.getSurfaceTexture();
            texture.setDefaultBufferSize(size.getWidth(), size.getHeight());
            Surface textureSurface = new Surface(texture);


            mCameraDevice = camera;
            mMediaRecorder = new MediaRecorder();
            mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
            mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
            mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
            mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
            mMediaRecorder.setVideoSize(size.getWidth(), size.getHeight());
            mMediaRecorder.setOrientationHint(SENSOR_ORIENTATION_DEFAULT_DEGREES);
            mMediaRecorder.setPreviewDisplay(textureSurface);

            int rotation = ((Activity)context).getWindowManager().getDefaultDisplay().getRotation();
            switch (mSensorOrientation) {
                case SENSOR_ORIENTATION_DEFAULT_DEGREES:
                    mMediaRecorder.setOrientationHint(DEFAULT_ORIENTATIONS.get(rotation));
                    break;
                case SENSOR_ORIENTATION_INVERSE_DEGREES:
                    mMediaRecorder.setOrientationHint(INVERSE_ORIENTATIONS.get(rotation));
                    break;
            }

            try {
                mMediaRecorder.setOutputFile(getVideoFilePath());
                mMediaRecorder.prepare();
                Surface recorderSurface = mMediaRecorder.getSurface();
                List<Surface> list = new ArrayList<>();
                list.add(recorderSurface);
                final CaptureRequest.Builder captureRequest = mCameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_RECORD);
                captureRequest.addTarget(recorderSurface);
                mCaptureRequest = captureRequest.build();
                mCameraDevice.createCaptureSession(list, captureStateCallback, backgroundHandler);

            } catch (CameraAccessException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }

StackTrace

E / Legacy-CameraDevice-JNI: LegacyCameraDevice_nativeDetectSurfaceDimens: Ошибка при запросе ширины поверхности Нет такого устройства (-19). E / AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: фон камеры Процесс: me.wesferr.personalorganizer, PID: 1987 java .lang.IllegalArgumentException: Поверхность была оставлена ​​на android .hardware.camera2.utils.SurfaceUtils.getSurfaceSize (SurfaceUtils. java: 89) в android .hardware.camera2.params.OutputConfiguration. (OutputConfiguration. java: 260) в android .hardware.camera2.params.OutputConfiguration. (OutputConfiguration. java: 145) в android .hardware.camera2.impl.CameraDeviceImpl.createCaptureSession (CameraDeviceImpl. java: 520) в me.wesferr.personalorganizer.CaptureVideoClass $ 1.onOpened (CaptureVideoClass. java: 133) в android .hardware.camera. impl.CameraDeviceImpl $ 1.run (CameraDeviceImpl. java: 149) в android .os.Handler.handleCallback (Handler. java: 873) в android .os.Handler.dispatchMessage (Handler. java : 99) в android .os.Looper.l oop (Looper. java: 201) в android .os.HandlerThread.run (HandlerThread. java: 65) Вызвано: android .hardware.camera2.legacy.LegacyExceptionUtils $ BufferQueueAbandonedExcepti на android .hardware.camera2.legacy.LegacyExceptionUtils.throwOnError (LegacyExceptionUtils. java: 73) в android .hardware.camera2.legacy.LegacyCameraDevice.getSurfaceSize (1035 android: LegacyCameraDevice. java: * .hardware.camera2.utils.SurfaceUtils.getSurfaceSize (SurfaceUtils. java: 87) в android .hardware.camera2.params.OutputConfiguration. (OutputConfiguration. java: 260) в android .hardware.camera2 .params.OutputConfiguration. (OutputConfiguration. java: 145) в android .hardware.camera2.impl.CameraDeviceImpl.createCaptureSession (CameraDeviceImpl. java: 520) в me.wesferr.personalorganizer.CaptureVideoClass ($ 1.onOpened . java: 133) в android .hardware.camera2.impl.CameraDeviceImpl $ 1.run (CameraDeviceImpl. java: 149) в android .os.Handler.handleCallback (Handler. java: 873) в android .os.Handler.dispatchMessage (Handler. java: 99) в android .os.Looper.l oop (Looper. java: 201) в android .os.HandlerThread. запустить (HandlerThread. java: 65)

...