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),并且失败,如Acer 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”方法的文档:

停止录音。 在start()之后调用它。 录制停止后,您必须再次对其进行配置,就像刚刚构建完一样。 请注意,如果在调用stop()时未收到有效的音频/video数据,则会故意将RuntimeException抛出到应用程序。 如果在start()之后立即调用stop(),则会发生这种情况。 失败让应用程序相应地采取操作来清理输出文件(例如删除输出文件),因为在发生这种情况时输出文件没有正确构造。

MediaPlayer报告这个“媒体服务器已经死亡”的事实也是出于同样的原因。 您是否可以发布其余代码以查看是否存在可能导致此问题的误解?

所以我发现在Android模拟器上为API报告了这个错误(在更高版本的录制后工作正常)。

我发现如果我在初始化并开始启动我的MediaRecorder实例之前调用了Camera.startPreview() ,我会在调用MediaRecorder.stopMediaRecorder.stop stop failed: -1007 MediaRecorder.stop日志,但如果我之前调用了Camera.stopPreview()初始化我的MediaRecordervideo会记录正常。

我希望这有帮助