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

树莓派3B+(Debian Bullseye系统):如何实现摄像头推流YouTube Live同时本地定时分段存储视频

树莓派3B+(Debian Bullseye系统):如何实现摄像头推流YouTube Live同时本地定时分段存储视频

我来帮你搞定这个需求!你之前尝试的tee或者liquidsoap其实没必要,用ffmpeg的原生多路输出功能就能同时实现YouTube推流和本地定时分段存储,而且配置起来更直接,适配树莓派3B+的资源情况。

先明确你的核心需求点,我们逐个对应解决:

  • 视频源:libcamera-vid输出800x600/15fps的H.264流
  • 音频源:系统默认音频输入(替换你原来的静音源anullsrc)
  • 双输出:实时推流YouTube + 本地/mnt/smb目录24小时分段存储,文件名带秒级时间戳

完整实现命令

首先设置YouTube推流的环境变量(把your-youtube-stream-key-here换成你自己的直播密钥):

export YOUTUBE_SERVER_URL="rtmp://a.rtmp.youtube.com/live2/"
export YOUTUBE_KEY="your-youtube-stream-key-here"

然后执行以下组合命令:

libcamera-vid --inline --nopreview -t 0 --width 800 --height 600 --framerate 15 --codec h264 -o - | ffmpeg \
  -f alsa -i default \
  -thread_queue_size 1024 -use_wallclock_as_timestamps 1 -i pipe:0 \
  # 第一个输出:推流到YouTube
  -c:v copy -c:a aac -preset fast -strict experimental -f flv "$YOUTUBE_SERVER_URL$YOUTUBE_KEY" \
  # 第二个输出:本地24小时分段存储
  -c:v copy -c:a aac -f segment -segment_time 86400 -strftime 1 -segment_format mp4 "/mnt/smb/recording_%Y%m%d_%H%M%S.mp4"

关键参数解释

  1. 音频源修正:
    把原来的anullsrc静音源换成-f alsa -i default,这样就能获取系统默认的音频输入设备。如果你的音频设备不是default,可以用arecord -l查看设备列表,然后指定比如hw:0,0。

  2. 本地分段存储:

    • -f segment:启用ffmpeg的分段输出模式
    • -segment_time 86400:设置每个分段的时长为86400秒(也就是24小时)
    • -strftime 1:允许用时间戳格式生成文件名
    • /mnt/smb/recording_%Y%m%d_%H%M%S.mp4:文件名模板,%Y%m%d_%H%M%S会生成精确到秒的时间戳(比如recording_20240520_143025.mp4)
    • -segment_format mp4:用MP4格式存储,方便后续直接播放
  3. 性能优化:

    • -c:v copy和-c:a aac:视频直接复制(避免重新编码浪费CPU),音频转成AAC(YouTube支持的格式)
    • -preset fast:推流时用快速编码预设,减少树莓派的CPU负载

额外建议

  1. 确保SMB挂载稳定:
    如果/mnt/smb是网络共享目录,建议在/etc/fstab里配置自动挂载,避免存储中断。比如:

    //server/share /mnt/smb cifs username=xxx,password=xxx,uid=pi,gid=pi 0 0
    
  2. 后台运行与开机自启:
    如果你希望命令持续后台运行,甚至开机自动启动,可以创建一个systemd服务:
    创建/etc/systemd/system/youtube-stream.service文件:

    [Unit]
    Description=树莓派YouTube直播+本地录制服务
    After=network.target
    
    [Service]
    User=pi
    Environment="YOUTUBE_SERVER_URL=rtmp://a.rtmp.youtube.com/live2/"
    Environment="YOUTUBE_KEY=your-youtube-stream-key-here"
    ExecStart=/bin/bash -c 'libcamera-vid --inline --nopreview -t 0 --width 800 --height 600 --framerate 15 --codec h264 -o - | ffmpeg -f alsa -i default -thread_queue_size 1024 -use_wallclock_as_timestamps 1 -i pipe:0 -c:v copy -c:a aac -preset fast -strict experimental -f flv "$YOUTUBE_SERVER_URL$YOUTUBE_KEY" -c:v copy -c:a aac -f segment -segment_time 86400 -strftime 1 -segment_format mp4 "/mnt/smb/recording_%Y%m%d_%H%M%S.mp4"'
    Restart=always
    RestartSec=10
    
    [Install]
    WantedBy=multi-user.target
    

    然后启用并启动服务:

    sudo systemctl daemon-reload
    sudo systemctl enable youtube-stream.service
    sudo systemctl start youtube-stream.service
    
  3. 测试验证:

    • 先单独测试音频录制:arecord -d 5 test.wav,播放确认音频正常
    • 先测试本地分段存储(暂时去掉推流部分),确认文件生成和分段正常后再加上推流

关于你提到的其他工具

  • tee:需要手动处理流的复制,容易出现同步问题,不如ffmpeg原生多输出可靠
  • liquidsoap:更适合复杂的流媒体编排场景,你的需求用ffmpeg足够,没必要增加复杂度
  • GStreamer:虽然也能实现,但需要把libcamera-vid的流转成GStreamer格式,配置更繁琐,不如直接用ffmpeg对接高效

备注:内容来源于stack exchange,提问作者tputkonen

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.17 12:13:14