MediaRecorder.stop()停止失败:-1007

我正在用MediaRecorder录制video。 我的代码在2.3.3上正常工作,但在4.0.3上失败。

问题如下:代码mediaRecorder.stop()引发RuntimeExeption

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

与LogCat消息

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

UPDATE

我发现,MediaPlayer在启动后几乎立即报告错误(通过MediaPlayer.OnErrorListener)。 错误代码是100(媒体服务器死亡),额外-1007。

更新2代码准备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} 

那么我只需要调用mediaRecorder.start()请注意,我需要把video编码成mp4格式。 此代码适用于Samsng Galaxy GIO(android 2.3.3),并按照macros基E305(android 4.0.2)

有任何想法吗? 谢谢。

Solutions Collecting From Web of "MediaRecorder.stop()停止失败:-1007"

终于解决了。 问题是在设置相机的实际预览之前设置预览大小。 预览尺寸必须等于所选的video尺寸。

 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() 

在4.0.3中引用MediaRecorder.java中的“stop”方法的文档:

停止录制。 在开始()之后调用这个。 一旦录制停止,您将不得不再次configuration它,就像它刚刚构build。 请注意,如果在调用stop()时没有收到有效的audio/video数据,则会故意将RuntimeException抛出到应用程序。 如果在start()之后立即调用stop(),则会发生这种情况。 失败让应用程序相应地采取行动来清理输出文件(例如删除输出文件),因为输出文件在这种情况下没有正确构造。

MediaPlayer正在报告这个“媒体服务器死亡”的事实是由于相同的原因。 你可以发布你的代码的其余部分,看看是否有任何可能导致这个问题的误解?

所以我发现这个错误被报告给API 18的Android模拟器上(logging后,在更高版本上工作正常)。

我发现如果我在初始化和开始启动MediaRecorder实例之前调用Camera.startPreview() ,我会得到stop failed: -1007 MediaRecorder.stop日志时调用MediaRecorder.stop ,但如果我之前调用Camera.stopPreview()初始化我的MediaRecordervideo将logging罚款。

我希望这有帮助