Запись видео для Android - IllegalStateException на mediaRecorder.start
Я следую за учебником поhttps://developer.android.com/guide/topics/media/camera.html#capture-video
Поэтому при запуске камеры я следую приведенному ниже порядку:
Camera.opencamera.unlockmediaRecorder.setCameramediaRecorder.setAudioSourcemediaRecorder.setVideoSourcemediaRecorder.setProfilemediaRecorder.setOutputFilemediaRecorder.preparemediaRecorder.start <- это где я получаю исключение IllegalStateExceptionЯ могу понять, что может пойти не так, так как я следую руководству, работающему 5.0.2
private Camera mCamera;
private MediaRecorder mMediaRecorder;
public CameraActivity() {
mCamera = getCameraInstance();
mMediaRecorder = new MediaRecorder();
}
public static Camera getCameraInstance(){
Camera c = null;
try {
c = Camera.open();
}
catch (Exception e) { ... }
return c;
}
public void startRecording() {
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
mMediaRecorder.setOutputFile(getOutputMediaFile(MEDIA_TYPE_VIDEO).toString());
try {
mMediaRecorder.prepare();
}
catch (IOException e) { ... }
catch (IllegalStateException e) { ... }
try {
mMediaRecorder.start();
}
catch (Exception e) {
Log.d(TAG, "exception on mediaRecorder.start" + e.toString()); // This is the exception that gets thrown on .start
}
}
Мой манифест включает в себя все необходимые разрешения
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.RECORD_VIDEO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.microphone" />
Я также попытался вручную установить формат вместо использования .setProfile, те же результаты
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
Обновить
Файл действительно создан, хотя, конечно, его невозможно воспроизвести, поэтому я знаю, что он работает до этого момента. Призыв к подготовке не выдает исключение и происходит до запуска. Такое же исключение выдается при запуске ()