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

树莓派3摄像头录像调用报错:MediaRecorder启动失败-19求助

树莓派3 MediaRecorder start failed: -19 错误排查方案

Hey,我之前在树莓派上折腾Android摄像头录制时也碰到过这个start failed: -19的坑,这个错误一般是权限、参数配置或者硬件状态不匹配导致的,给你列几个靠谱的排查方向,你挨个试试:

1. 先把权限这件事搞清楚

Android录视频至少需要CAMERA和RECORD_AUDIO权限(如果要存到外部存储还得加WRITE_EXTERNAL_STORAGE),而且Android 6.0以上光在Manifest里写没用,必须动态申请。

先检查你的Manifest里有没有加这些:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

然后代码里要主动弹权限申请框,比如:

private static final int PERMISSION_REQ = 100;

// 在初始化摄像头前调用
private void checkPermissions() {
    if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED
        || ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
        ActivityCompat.requestPermissions(this, 
            new String[]{Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO}, 
            PERMISSION_REQ);
    }
}

2. 别给摄像头喂它不支持的参数

树莓派的摄像头模块对分辨率、编码格式有严格要求,参数不对直接炸-19:

  • 分辨率先从基础的640x480或者1280x720试起,别上来就搞4K,大概率不支持;
  • 视频编码用H264(也就是MediaRecorder.VideoEncoder.H264),这是硬件原生支持的;
  • 输出格式选MPEG_4,别搞太偏的格式。

给你个极简版的配置示例,先跑通这个再改其他参数:

mediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mediaRecorder.setVideoSize(640, 480);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setOutputFile(getExternalFilesDir(null) + "/test.mp4");
mediaRecorder.prepare();
mediaRecorder.start();

3. 看看摄像头是不是被别人抢了

树莓派的摄像头是独占设备,如果你之前用raspistill/raspivid命令拍过照录过视频,或者有其他APP在占用摄像头,你的MediaRecorder就启动不了。

SSH进树莓派,用这个命令查占用:

lsof /dev/video0

如果有输出,就用kill -9 进程ID把占用的进程干掉再试。

4. 检查硬件和系统配置

  • 先拔插一下摄像头的CSI排线,确保插紧了,有时候松动会导致硬件识别异常;
  • 确认树莓派已经启用摄像头模块:打开终端输入raspi-config,选Interface Options -> Camera,启用后重启系统。

5. 别搞混MediaRecorder的调用顺序

MediaRecorder的方法调用顺序不能乱,错一步就可能失败,正确的流程是:

  1. 设置音频/视频源(setAudioSource/setVideoSource)
  2. 设置输出格式(setOutputFormat)
  3. 设置音频/视频编码(setAudioEncoder/setVideoEncoder)
  4. 其他参数(分辨率、帧率、输出文件路径)
  5. 调用prepare()
  6. 最后调用start()

如果你的代码里先设置编码再设置输出格式,肯定会报错,仔细核对下顺序。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:35:32