Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MediaRecorder.stop() stop failed: -1007

I am recording video with MediaRecorder. My code works fine on 2.3.3 but fails on 4.0.3.

The issue is following: the code mediaRecorder.stop() throws the RuntimeExeption

java.lang.RuntimeException: stop failed.     at android.media.MediaRecorder.stop(Native Method) 

with LogCat message

04-05 15:10:51.815: E/MediaRecorder(15709): stop failed: -1007 

UPDATE

I've found, that MediaPlayer reports an error (via MediaPlayer.OnErrorListener) almost immediately after the start. Error code is 100 (media server died), extra -1007.

UPDATE 2 Code to prepare the MediaRecorder

            c = Camera.open();      ...      // Step 1: Unlock and set camera to MediaRecorder     camera.unlock();     mediaRecorder.setCamera(camera);      // Step 2: Set sources     mediaRecorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER);     mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);      // Step 3: Set a CamcorderProfile (requires API Level 8 or higher)     CamcorderProfile profile = CamcorderProfile             .get(CamcorderProfile.QUALITY_HIGH);      // manual set up!      mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);      mediaRecorder.setVideoEncodingBitRate(profile.videoBitRate);     mediaRecorder.setVideoFrameRate(profile.videoFrameRate);     mediaRecorder.setVideoSize(profile.videoFrameWidth,             profile.videoFrameHeight);      mediaRecorder.setAudioChannels(profile.audioChannels);     mediaRecorder.setAudioEncodingBitRate(profile.audioBitRate);     mediaRecorder.setAudioSamplingRate(profile.audioSampleRate);      mediaRecorder.setAudioEncoder(profile.audioCodec);     //mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);     mediaRecorder.setVideoEncoder(profile.videoCodec);      // mediaRecorder.setProfile(profile);      // Step 4: Set output file     mediaRecorder.setOutputFile("somefile.mp4");      // Step 5: Set the preview output     mediaRecorder.setPreviewDisplay(preview.getHolder().getSurface());      // Step 6: Prepare configured MediaRecorder     try {         mediaRecorder.prepare();     } catch ...     { release mediaRecorder} 

then I simplyCall mediaRecorder.start() please note, that I need video to be encoded into mp4 format. This code works on Samsng Galaxy GIO (android 2.3.3) and fails as described on Acer E305 (android 4.0.2)

Any ideas? Thanks.

like image 539
Alex Avatar asked Apr 05 '13 12:04

Alex


People also ask

What is MediaRecorder?

The MediaRecorder API enables you to record audio and video from a web app. It's available now in Firefox and in Chrome for Android and desktop.


2 Answers

Solved it at last. The issue was setting the preview size before setting the actual preview for the camera. The preview size MUST be equal to the selected video size.

CamcorderProfile profile = [get required profile];  Camera.Parameters parameters = mCamera.getParameters(); parameters.setPreviewSize(profile.videoFrameWidth,profile.videoFrameHeight); mCamera.setParameters(parameters);  mCamera.setPreviewDisplay([surface holder]); mCamera.startPreview();  ...  //configure MediaRecorder and call MediaRecorder.start() 
like image 131
Alex Avatar answered Sep 18 '22 23:09

Alex


Quoting the documentation of "stop" method in MediaRecorder.java in 4.0.3:

Stops recording. Call this after start(). Once recording is stopped, you will have to configure it again as if it has just been constructed. Note that a RuntimeException is intentionally thrown to the application, if no valid audio/video data has been received when stop() is called. This happens if stop() is called immediately after start(). The failure lets the application take action accordingly to clean up the output file (delete the output file, for instance), since the output file is not properly constructed when this happens.

And the fact that MediaPlayer is reporting this "media server died" is due to the same reason. Can you post the rest of your code to see if there's any misconception that may cause this issue?

like image 33
Jose L Ugia Avatar answered Sep 18 '22 23:09

Jose L Ugia