MediaRecorderで録画ができない問題を解決
Androidで、MediaRecoderを使って録画するアプリを作ってたんだけど、録画を開始しようとするとエラーが発生して録画ができなかった。
LogCatを見ると、start failed: -19 ってメッセージが出てるんだけど、原因がわからん。
10-07 13:16:34.053: D/Hogehoge(27073): startRecord() isRecording=false 10-07 13:16:34.083: E/MediaRecorder(27073): start failed: -19 10-07 13:16:34.083: E/MediaRecorder(27073): start failed. 10-07 13:16:34.083: E/MediaRecorder(27073): try to delete broken file: /mnt/sdcard/ext_sd/Android/data/com.satoshis/1410071316.mp4 10-07 13:16:34.083: E/Hogehoge(27073): start failed.
そもそも、MediaRecorder | Android Developers に書かれてるコードで実行しようとしても同じエラーが出るし。
MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); recorder.setOutputFile(PATH_NAME); recorder.prepare(); recorder.start(); // Recording is now started ... recorder.stop(); recorder.reset(); // You can reuse the object by going back to setAudioSource() step recorder.release(); // Now the object cannot be reused
しかも、start()に失敗した時に、失敗したという情報を取得する方法がないというのもどうかと思うんだが。。。
いろんなところをぐぐって、最終的に解決に至ったのはやはり Stackoverflow
android - Mediarecorder start failed -19 - Stack Overflow
あれこれ試行錯誤した結果、setCamera()を呼び出せば動作するようになった。
recorder.setCamera(camera); // この1行! recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); recorder.setVideoFrameRate(30); recorder.setOutputFile(path); recorder.setPreviewDisplay(cameraView.getHolder().getSurface()); try { recorder.prepare(); recorder.start(); } catch (Exception e) { Log.e(TAG, e.getLocalizedMessage()); }
試しに、その1行をコメントアウトすると動作しなくなるから、たぶん間違ってない。