#android #android-camera2 #mediarecorder #webm
#Android #android-camera2 #mediarecorder #webm
Вопрос:
Я хочу записать видео в формате WebM с Camera2
помощью и MediaRecorder
.
Для этого я использую пример кода Camera2Video на Github. В примере показан способ записи в формате mp4 с использованием задней или фронтальной камеры.
Настройка MediaRecorder выполняется одним способом:
/** Creates a [MediaRecorder] instance using the provided [Surface] as input */
private fun createRecorder(surface: Surface) = MediaRecorder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setVideoSource(MediaRecorder.VideoSource.SURFACE)
setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
setOutputFile(outputFile.absolutePath)
setVideoEncodingBitRate(RECORDER_VIDEO_BITRATE)
if (args.fps > 0) setVideoFrameRate(args.fps)
setVideoSize(args.width, args.height)
setVideoEncoder(MediaRecorder.VideoEncoder.H264)
setAudioEncoder(MediaRecorder.AudioEncoder.AAC)
setInputSurface(surface)
}
И то, что я пытаюсь сделать, это найти дурацкую конфигурацию для записи webm
private fun createRecorder(surface: Surface) = MediaRecorder().apply {
setAudioSource(MediaRecorder.AudioSource.MIC)
setVideoSource(MediaRecorder.VideoSource.SURFACE)
setOutputFormat(MediaRecorder.OutputFormat.WEBM)
setOutputFile(outputFile.absolutePath)
setVideoEncodingBitRate(RECORDER_VIDEO_BITRATE)
if (args.fps > 0) setVideoFrameRate(args.fps)
setVideoSize(args.width, args.height)
setVideoEncoder(MediaRecorder.VideoEncoder.VP8)
setAudioEncoder(MediaRecorder.AudioEncoder.VORBIS)
setInputSurface(surface)
}
Но, делая это, я сталкиваюсь с катастрофой:
2020-12-09 14:59:26.560 28899-28899/com.android.example.camera2.video С CameraDevice-JV-0: сбой настройки потока из-за: endConfigure: 543: Камера 0: предоставлен неподдерживаемый набор входов / выходов 2020-12-09 14:59:26.564 28899-28899/com.android.example.camera2.video E/ CameraCaptureSession: сеанс 0: не удалось создать сеанс захвата; сбой конфигурации 2020-12-09 14:59:26.566 28899-28945/com.android.example.camera2.video E/CameraFragment: сбой настройки сеанса камеры 0 java.lang.RuntimeException: сбой настройки сеанса камеры 0 на com.example.android.камера 2.видео.фрагменты.CameraFragment$createCaptureSession$$inlined$suspendCoroutine$lambda$1.onConfigureFailed(CameraFragment.kt:375 ) в android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.lambda$onConfigureFailed$1(CallbackProxies.java:64 ) на android.hardware.camera2.impl.-$$Lambda$Обратные вызовы $SessionStateCallbackProxy $ gvbTsp9UPpKJAbdycdci_ZW5BeI.run(Неизвестный источник: 4) на android.os.Handler.handleCallback(Handler.java:907) на android.os.Handler.DispatchMessage(Handler.java: 105) на android.os.Looper.loop(Looper.java: 216) на android.os.HandlerThread.run(HandlerThread.java:65) 2020-12-09 14:59:26.607 28899-28899/com.android.example.camera2.video E/AndroidRuntime: ФАТАЛЬНОЕ ИСКЛЮЧЕНИЕ: основной процесс: com.android.example.camera2.video, PID: 28899 java.lang.RuntimeException: сбой настройки сеанса камеры 0 в com.example.android.camera2.video.фрагменты.CameraFragment$createCaptureSession$$inlined$suspendCoroutine$lambda$1.onConfigureFailed(CameraFragment.kt:375 ) в android.hardware.camera2.impl.CallbackProxies$SessionStateCallbackProxy.lambda$onConfigureFailed$1(CallbackProxies.java:64 ) на android.hardware.camera2.impl.-$$Lambda$Обратные вызовы $SessionStateCallbackProxy $ gvbTsp9UPpKJAbdycdci_ZW5BeI.run(Неизвестный источник: 4) на android.os.Handler.handleCallback(Handler.java:907) на android.os.Handler.DispatchMessage(Handler.java: 105) на android.os.Looper.loop(Looper.java: 216) на android.os.HandlerThread.run(HandlerThread.java:65)
В первой строке говорится, что произошла неправильная настройка
Сбой настройки потока из-за: endConfigure: 543: Камера 0: предоставлен неподдерживаемый набор входов / выходов
Я также пытался прокомментировать строки об источнике звука, потому что вижу, что кодировщик Vorbis не поддерживается с теми же результатами.
Как я могу записать видео в формате WebM?
Комментарии:
1. Вероятно, кодировщик для MediaRecorder на самом деле не был создан, поэтому, когда вы пытаетесь использовать Surface из MediaRecorder с камерой, он фактически не настроен. Есть ли какие-либо выходные строки logcat, которые предполагают, что MediaRecorder столкнулся с ошибкой?
2. Больше нет выходных данных logcat. И да, на мой взгляд, это ошибка конфигурации MediaRecorder, но я не знаю, почему и что? Потому что все в порядке с параметрами MP4
3. Вы хотите, чтобы весь системный logcat, а не только logcat, ограничивался вашим собственным процессом приложения.