Gravação de vídeo do Android - IllegalStateException on mediaRecorder.start

Estou seguindo o tutorial emhttps://developer.android.com/guide/topics/media/camera.html#capture-video

Como tal, sigo a ordem abaixo ao tentar iniciar a câmera:

Câmera Abertacamera.unlockmediaRecorder.setCameramediaRecorder.setAudioSourcemediaRecorder.setVideoSourcemediaRecorder.setProfilemediaRecorder.setOutputFilemediaRecorder.preparemediaRecorder.start <- é aqui que recebo a IllegalStateException

Posso descobrir o que pode estar errado, pois estou seguindo o guia, executando a versão 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
    }
}

Meu manifesto inclui todas as permissões necessárias

<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" />

Eu também tentei definir manualmente o formato em vez de usar .setProfile, mesmos resultados

    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);

Atualizar

O arquivo é realmente criado, embora seja impossível de jogar, é claro, então eu sei que está funcionando até esse ponto. A chamada para preparar não gera uma exceção e ocorre antes do início. Mesma exceção lançada em start ()

questionAnswers(1)

yourAnswerToTheQuestion