Запись видео для 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);

Обновить

Файл действительно создан, хотя, конечно, его невозможно воспроизвести, поэтому я знаю, что он работает до этого момента. Призыв к подготовке не выдает исключение и происходит до запуска. Такое же исключение выдается при запуске ()

Ответы на вопрос(1)

Ваш ответ на вопрос