Ошибка подготовки MediaRecorder IOException - PullRequest
0 голосов
/ 29 мая 2020

Это исключение IOException начало происходить в моем приложении Android после обновления до AndroidX и увеличения целевого SDK до версии 28.

До этого тот же код работал нормально.

Это представляет собой приложение Capacitor и использует плагин Capacitor-Video-Recorder . Под капотом этот плагин использует библиотеку fancycamera java, которая взаимодействует с android.media.MediaRecorder.

Вот трассировка стека, которая выдается при вызове VideoRecorder.startRecording, что в конечном итоге приводит к вызов MediaRecorder.prepare:

I/IMediaRecorder: prepare (BpMediaRecorder client) in file frameworks/av/media/libmedia/IMediaRecorder.cpp, function prepare, line 253
E/MediaRecorder: prepare failed: -2147483648
W/System.err: java.io.IOException: prepare failed.
W/System.err:     at android.media.MediaRecorder._prepare(Native Method)
W/System.err:     at android.media.MediaRecorder.prepare(MediaRecorder.java:1038)
W/System.err:     at co.fitcom.fancycamera.Camera2.setUpMediaRecorder(Camera2.java:607)
W/System.err:     at co.fitcom.fancycamera.Camera2.startRecording(Camera2.java:837)
W/System.err:     at co.fitcom.fancycamera.FancyCamera.startRecording(FancyCamera.java:323)
W/System.err:     at com.github.sbannigan.capacitor.VideoRecorder.startRecording(VideoRecorder.java:267)
W/System.err:     at java.lang.reflect.Method.invoke(Native Method)
W/System.err:     at com.getcapacitor.PluginHandle.invoke(PluginHandle.java:99)
W/System.err:     at com.getcapacitor.Bridge$1.run(Bridge.java:515)
W/System.err:     at android.os.Handler.handleCallback(Handler.java:907)
W/System.err:     at android.os.Handler.dispatchMessage(Handler.java:105)
W/System.err:     at android.os.Looper.loop(Looper.java:216)
W/System.err:     at android.os.HandlerThread.run(HandlerThread.java:65)

Приложение Android запрашивает разрешения CAMERA и RECORD_AUDIO, и я могу подтвердить, что пользователю сначала предлагается ввести их.

AndroidManifest. xml

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>

Я также вижу, что выходной файл создается в каталоге данных приложения. Однако файл остается пустым. Я также попытался вручную записать в тот же файл, и это возможно, поэтому файловый ввод-вывод не является проблемой.

Cra sh исходит из собственного метода, поэтому отладчик не работает т очень полезно. Однако я могу, по крайней мере, подтвердить, что переменная MediaRecorder mPath, похоже, правильно установлена ​​непосредственно перед вызовом _prepare.

Я создал пример приложения с идентичным стеком, где можно воссоздать ошибку : https://github.com/disbelief/video-recorder-test

Мне также было бы интересно узнать, какие еще возможные причины могут быть для MediaRecorder.prepare, чтобы вызвать это исключение.

...