当前位置: 首页 > news >正文

PaspberryPi推流

1. 创建启动脚本

sudo nano /usr/local/bin/rtsp-stream.sh

添加内容:

#!/bin/bash # RTSP 音视频推流服务脚本 # 适配 Raspberry Pi 3B + Camera Module + USB 麦克风 # 配置项 WIDTH=1280 HEIGHT=720 FRAMERATE=15 VIDEO_BITRATE=2000000 AUDIO_DEVICE="hw:1,0" # USB 麦克风,根据实际情况修改 RTSP_PATH="live" RTSP_PORT=8554 # 日志函数 log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a /var/log/rtsp-stream.log } log "启动 RTSP 音视频推流服务..." # 检查摄像头 if [ ! -e /dev/video0 ]; then log "错误:未检测到摄像头设备 /dev/video0" exit 1 fi # 检查音频设备 if ! arecord -l | grep -q "card"; then log "警告:未检测到音频设备,将以纯视频模式启动" AUDIO_ENABLED=0 else AUDIO_ENABLED=1 log "检测到音频设备: $AUDIO_DEVICE" fi # 启动 MediaMTX(如果未运行) if ! pgrep -x "mediamtx" > /dev/null; then log "启动 MediaMTX 服务器..." /usr/local/bin/mediamtx & sleep 2 fi # 根据音频是否可用选择推流模式 if [ $AUDIO_ENABLED -eq 1 ]; then log "启动音视频同步推流 (视频+音频)..." # 使用进程替换实现双向管道 # 视频流 -> FFmpeg # 音频流 -> FFmpeg (通过文件描述符) rpicam-vid \ --width $WIDTH \ --height $HEIGHT \ --framerate $FRAMERATE \ --codec h264 \ --profile main \ --level 4.0 \ --inline \ --bitrate $VIDEO_BITRATE \ -t 0 \ -o - \ --nopreview | \ ffmpeg \ -hide_banner \ -loglevel warning \ -fflags nobuffer \ -flags low_delay \ -thread_queue_size 512 \ -i - \ -f alsa \ -thread_queue_size 1024 \ -ac 1 \ -ar 44100 \ -i $AUDIO_DEVICE \ -c:v copy \ -c:a aac \ -b:a 128k \ -preset ultrafast \ -tune zerolatency \ -f rtsp \ -rtsp_transport tcp \ "rtsp://localhost:$RTSP_PORT/$RTSP_PATH" \ 2>> /var/log/rtsp-stream.log else log "启动纯视频推流 (无音频)..." rpicam-vid \ --width $WIDTH \ --height $HEIGHT \ --framerate $FRAMERATE \ --codec h264 \ --profile main \ --level 4.0 \ --inline \ --bitrate $VIDEO_BITRATE \ -t 0 \ -o - \ --nopreview | \ ffmpeg \ -hide_banner \ -loglevel warning \ -fflags nobuffer \ -flags low_delay \ -i - \ -c:v copy \ -preset ultrafast \ -tune zerolatency \ -f rtsp \ -rtsp_transport tcp \ "rtsp://localhost:$RTSP_PORT/$RTSP_PATH" \ 2>> /var/log/rtsp-stream.log fi log "RTSP 推流已停止"

赋予执行权限:

sudo chmod +x /usr/local/bin/rtsp-stream.sh

2. 创建 Systemd 服务文件

sudo nano /etc/systemd/system/rtsp-stream.service

添加内容:

[Unit] Description=RTSP Audio/Video Streaming Service Documentation=https://github.com/bluenviron/mediamtx After=network.target sound.target Wants=network.target sound.target [Service] Type=simple # 运行用户(树莓派默认用户) User=pi Group=pi # 工作目录 WorkingDirectory=/home/pi # 环境变量 Environment="PATH=/usr/local/bin:/usr/bin:/bin" Environment="LD_LIBRARY_PATH=/usr/lib" Environment="DISPLAY=:0" # 启动命令 ExecStartPre=/bin/sleep 5 ExecStartPre=/bin/bash -c 'until arecord -l > /dev/null 2>&1; do sleep 1; done' ExecStart=/usr/local/bin/rtsp-stream.sh # 重启策略 Restart=always RestartSec=5 StartLimitInterval=60s StartLimitBurst=3 # 进程管理 KillMode=mixed KillSignal=SIGTERM TimeoutStopSec=10 # 日志输出 StandardOutput=append:/var/log/rtsp-stream.log StandardError=append:/var/log/rtsp-stream.log SyslogIdentifier=rtsp-stream # 资源限制(Pi 3B 优化) CPUQuota=80% MemoryMax=256M [Install] WantedBy=multi-user.target

3. 创建 MediaMTX 服务(可选,分离部署)

如果需要单独管理 MediaMTX:

sudo nano /etc/systemd/system/mediamtx.service
[Unit] Description=MediaMTX RTSP Server After=network.target [Service] Type=simple User=pi ExecStart=/usr/local/bin/mediamtx /usr/local/etc/mediamtx.yml Restart=always RestartSec=5 [Install] WantedBy=multi-user.target

4. 创建日志轮转配置

防止日志文件无限增长:

sudo nano /etc/logrotate.d/rtsp-stream
/var/log/rtsp-stream.log { daily rotate 7 compress delaycompress missingok notifempty create 644 pi pi sharedscripts postrotate /bin/kill -HUP $(cat /var/run/syslogd.pid 2> /dev/null) 2> /dev/null || true endscript }

5. 启用并启动服务

# 重新加载 systemd sudo systemctl daemon-reload # 创建日志文件 sudo touch /var/log/rtsp-stream.log sudo chown zhaohongbo:zhaohongbo /var/log/rtsp-stream.log # 启用开机自启(可选:先只启用 rtsp-stream,它会自动启动 MediaMTX) sudo systemctl enable rtsp-stream.service # 启动服务 sudo systemctl start rtsp-stream.service # 查看状态 sudo systemctl status rtsp-stream.service # 查看实时日志 sudo tail -f /var/log/rtsp-stream.log

客户端播放地址

rtsp://<树莓派IP地址>:8554/live

例如:

rtsp://192.168.1.100:8554/live

常用管理命令

命令

作用

sudo systemctl start rtsp-stream

启动服务

sudo systemctl stop rtsp-stream

停止服务

sudo systemctl restart rtsp-stream

重启服务

sudo systemctl status rtsp-stream

查看状态

sudo journalctl -u rtsp-stream -f

实时查看日志

sudo systemctl disable rtsp-stream

禁用开机自启

故障排查

音频设备未找到

# 查看可用音频设备 arecord -l # 测试录音 arecord -D hw:1,0 -f S16_LE -c 1 -r 44100 -d 5 test.wav aplay test.wav

修改脚本中的AUDIO_DEVICE="hw:X,Y"为实际设备号。

服务启动失败

# 检查详细错误 sudo journalctl -u rtsp-stream -n 50 --no-pager # 手动测试脚本 sudo -u pi /usr/local/bin/rtsp-stream.sh

延迟过高

编辑脚本,在 FFmpeg 中添加:

-fflags nobuffer -flags low_delay \ -max_delay 500000 -bufsize 0 \

需要我添加自动检测音频设备的逻辑,或者优化WiFi 网络波动重连的功能吗?

http://www.jsqmd.com/news/807457/

相关文章:

  • GTA5线上小助手:免费开源工具让你的洛圣都冒险更轻松
  • 3步快速解密QQ音乐加密文件:qmcdump终极音频转换指南
  • 智能穿戴设备技术演进:从概念到硬件、软件与生态的全面解析
  • Codex-Workspace:多仓库聚合开发与AI编程助手集成实战
  • 从音频分析到VR渲染:构建实时音乐可视化系统的核心技术解析
  • Next-Enterprise:基于Next.js的企业级应用启动模板全解析
  • 6G测试床、原型验证与试验网:探索未来通信的基石
  • 相位噪声原理、测量与工程应用全解析
  • Gemini JavaScript支持性能瓶颈诊断:Lighthouse评分暴跌38%的元凶竟是fetch()封装层?附可复用的性能监控Hook
  • AI 短剧系统快速部署,轻量化搭建,小白也能轻松运营落地
  • 开发者技能树实践:用工程化思维构建可验证的能力成长体系
  • 前端AI工程化落地最后一公里:Gemini + Web Workers + WASM协同架构(附GitHub Star超1.2k的轻量Runtime SDK)
  • Mac本地零代码微调大模型:M-Courtyard实战指南
  • 如何快速掌握开源可视化工具:Keyviz键鼠可视化实战指南
  • 智能网联汽车边缘媒体处理系统架构设计
  • 如何实现高效鼠标自动化:AutoClicker 终极指南
  • Jasminum插件:如何让中文文献管理效率提升300%?
  • csp信奥赛C++高频考点专项训练之字符串 --【回文字符串】:判断字符串是否为回文
  • VMware Guest虚拟机失去响应的排查方法
  • 太原大件货运
  • 机器人伦理工程化:从道德困境到可解释决策系统的技术实现
  • 云平台赋能门禁终端,打造智慧社区一体化管理
  • 工程师着装文化变迁:从安全规范到效率优化
  • MemOS:为AI智能体构建长期记忆操作系统的实战指南
  • 与 C++ auto 关键字作用类似的关键字 / 语法
  • 替代RCF陶瓷纤维的生产工厂盘点 - 品牌排行榜
  • DownKyi:5个步骤掌握B站视频下载的终极技巧
  • 开源协作平台架构设计:从代码托管到CI/CD的DevOps实践
  • ARM架构TLB失效指令VALE2OS/VALE3OS详解
  • 图片怎么去水印?2026免费图片去水印工具推荐与主流方法全解析