You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MediaRecorder崩溃求助:视频录制功能无法正常运行

排查MediaRecorder视频录制崩溃及失败的常见原因

从你贴的代码片段来看,我发现几个潜在问题,再结合Android视频录制的常见坑,给你梳理一下排查方向:

  • 错误的录制状态标记逻辑
    你的startRecord()方法里,不管preVideo()是否初始化成功,都直接把isRecording设为true。这会导致后续状态判断混乱——比如停止录制时,可能去调用一个未初始化完成的mRecorder.stop(),直接引发崩溃。
    修复建议:把状态标记移到成功分支里:

    public void startRecord() { 
        if (preVideo()) { 
            mRecorder.start(); 
            isRecording = true; // 仅初始化成功后标记
        } 
    } 
    
  • 缺失MediaRecorder与Camera的关键绑定步骤
    你用了MediaRecorder.VideoSource.SURFACE作为视频源,但代码里没有把Camera的预览Surface和MediaRecorder关联起来。如果是使用旧版Camera API(Android 5.0之前),还需要先调用mCamera.unlock(),再通过mRecorder.setCamera(mCamera)绑定相机;如果是Surface源,必须确保MediaRecorder的Surface和相机预览的Surface是同一个,否则会因为没有视频输入导致录制失败。

  • 未完成的输出文件配置与权限问题
    你的mRecorder.setOutputFile(createFile()...代码不完整,这里要注意两点:

    1. createFile()必须返回可写入的合法路径——要提前检查存储权限(Android 10+建议用Scoped Storage,避免申请全存储权限),且文件后缀要和CamcorderProfile的格式匹配(比如QUALITY_HIGH通常对应.mp4)。
    2. 必须确保已经申请并获取了RECORD_AUDIO、CAMERA这两个核心权限,缺少任何一个都会导致MediaRecorder初始化失败。
  • 遗漏了MediaRecorder的prepare()调用
    MediaRecorder的调用有严格的顺序要求:

    setAudioSource/setVideoSource → setProfile/setOutputFormat → setOutputFile → setSurface/setPreviewDisplay → prepare() → start()
    你的代码里完全没有mRecorder.prepare()这一步!不调用prepare()就直接start(),会立刻抛出IllegalStateException,这是导致崩溃的高频原因。

  • CamcorderProfile的兼容性问题
    CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)不是所有设备都支持,部分低端设备可能没有这个高画质配置。建议先做兼容性检查:

    if (CamcorderProfile.hasProfile(CamcorderProfile.QUALITY_HIGH)) {
        CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
        mRecorder.setProfile(cpHigh);
    } else {
        // 降级到兼容的配置,比如QUALITY_MEDIUM
        CamcorderProfile cpMedium = CamcorderProfile.get(CamcorderProfile.QUALITY_MEDIUM);
        mRecorder.setProfile(cpMedium);
    }
    

内容的提问来源于stack exchange,提问作者Pinky

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:27:50