Grabación de video de Android - IllegalStateException en mediaRecorder.start

Estoy siguiendo el tutorial sobrehttps://developer.android.com/guide/topics/media/camera.html#capture-video

Como tal, sigo el siguiente orden cuando intento iniciar la cámara:

Camara Abiertacamera.unlockmediaRecorder.setCameramediaRecorder.setAudioSourcemediaRecorder.setVideoSourcemediaRecorder.setProfilemediaRecorder.setOutputFilemediaRecorder.preparemediaRecorder.start <- aquí es donde obtengo la IllegalStateException

Puedo averiguar qué podría estar yendo mal ya que estoy siguiendo la guía, que ejecuta 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
    }
}

Mi manifiesto incluye todos los permisos necesarios.

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

También he intentado configurar manualmente el formato en lugar de usar .setProfile, los mismos resultados

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

Actualizar

El archivo está creado, aunque, por supuesto, no se puede reproducir, así que sé que está funcionando hasta ese punto. La llamada a prepararse no produce una excepción y ocurre antes del inicio. Misma excepción lanzada al inicio ()

Respuestas a la pregunta(1)

Su respuesta a la pregunta