Android mediarecoder сохраняет пустой файл

Это код, который я использовал для записи видео с устройства Android в формате MP4. Файл создается, но имеет размер 0 байт. Кажется, я не понимаю, что пошло не так. Любая помощь будет оценена по достоинству.

if(mCamera == null) { mCamera = Camera.open(); mCamera.unlock(); } if(mediaRecorder == null) mediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(mCamera); mediaRecorder.setCamera(mCamera); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); mediaRecorder.setMaxDuration(maxDurationInMs); mediaRecorder.setOutputFile("/sdcard/1.mp4"); mediaRecorder.setVideoFrameRate(videoFramesPerSecond); mediaRecorder.setVideoSize(176,144); mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP); mediaRecorder.setPreviewDisplay(surface); mediaRecorder.setMaxFileSize(maxFileSizeInBytes); mediaRecorder.prepare(); try { mediaRecorder.prepare(); } catch (IllegalStateException e) { // This is thrown if the previous calls are not called with the // proper order e.printStackTrace(); } mediaRecorder.start(); 

Причиной такого поведения является то, что вы, вероятно, (на 95% уверены) вызываете recorder.setOutputFile() снова после того, как закончите запись (возможно, после recorder.stop() ). Таким образом, старый файл переписывается новым пустым файлом.

Хорошо, поэтому я, наконец, понял это сам. Я использовал описанный здесь метод, и он работал правильно.

http://developer.android.com/guide/topics/media/camera.html#saving-media

 public static final String rootDir = getStorageDir().concat(yours_dir); ... mediaRecorder.setOutputFile(rootDir); 

Установили ли вы разрешение пользователя?

 <uses-permission android:name="android.permission.CAMERA" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.RECORD_AUDIO" />