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

2019-08-19 19:42发布

我录制的视频与MediaRecorder。 我的代码工作正常,在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}

然后我simplyCall mediaRecorder.start()请注意,我需要的视频被编码成MP4格式。 此代码的工作就Samsng银河GIO(安卓2.3.3),但无法作为宏碁E305(安卓4.0.2)中描述

有任何想法吗? 谢谢。

Answer 1:

终于解决了这个问题。 这个问题被设定实际预览相机之前设置预览大小。 预览大小必须等于选定的视频大小。

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


Answer 2:

引述4.0.3在MediaRecorder.java“止损”方法的文档:

停止录制。 开始后调用此()。 一旦停止记录,你会仿佛它刚刚被构造重新配置。 需要注意的是一个RuntimeException有意抛出给应用程序,如果在停止()被调用时已经没有接收到有效的音频/视频数据。 这种情况如果停止()被调用后,立即启动()。 失败因此让应用程序采取行动,清理输出文件(删除输出文件,例如),因为当这种情况发生在输出文件没有正确构造。

而事实上,MediaPlayer的报告这种“媒体服务器死”是因为同样的原因。 你可以发布你的代码的其余部分,看是否有可能导致此问题的任何误解?



Answer 3:

所以,我发现被报告为我在Android模拟器API 18这个错误(记录正在研究更高版本罚款后)。

我发现是,如果我曾呼吁Camera.startPreview()初始化并启动开始我之前MediaRecorder情况下,我能得到stop failed: -1007打电话时日志MediaRecorder.stop ,但如果我叫Camera.stopPreview()之前初始化我MediaRecorder视频将记录的罚款。

我希望这有帮助



文章来源: MediaRecorder.stop() stop failed: -1007