腾讯云 × 树莓派摄像头四周实战学习路线 第 2 周 · 第 14 天 · RTSP 实验 — 学习小结

腾讯云 × 树莓派摄像头四周实战学习路线 第 2 周 · 第 14 天 · RTSP 实验 --- 学习小结

日期:2026-09-08 | 主题:树莓派摄像头 → RTSP 流 → 远程播放

定位:Linux 运维 4 周计划 · 第 2 周「摄像头 & 视频流」收官日


🎯 一、今日目标

让树莓派摄像头产生一条 RTSP 视频流,Mac 能远程播放,并量化延迟与码率这两个决定视频可用性的核心指标。

子目标 状态
摄像头能出图(走对采集路径)
MediaMTX 开播,RTSP 8554 就位
Mac 用 ffplay 远程拉流成功
实测码率 ✅ 1.68 Mbps
端到端延迟 ⏳ 待补测

📚 二、核心内容

模块 关键知识点
摄像头类型识别 CSI 排线摄像头 vs USB 摄像头的采集路径完全不同
libcamera 栈 CSI 摄像头必须走 libcamera(ISP 冲印),不能 v4l2 直采
MediaMTX Go 单文件流媒体服务器,专攻 RTSP;rpiCamera 源原生支持树莓派摄像头
RTSP 协议 先握手协商(DESCRIBE/SETUP/PLAY)再推流,适合实时监看
硬件编码 树莓派 H.264 硬件编码器,using hardware H264 encoder,不吃 CPU
码率与延迟 动态码率特性;延迟构成与低延迟调优的取舍

🍕 三、生活比喻

比喻 1:RTSP = 电视台播放系统

角色 现实类比 软件对应
摄像头 演播室摄像机 /dev/video0(imx219)
推流服务 电视台播出机房 MediaMTX
RTSP 协议 电视频道 rtsp://192.168.0.108:8554/cam
播放器 你家电视机 ffplay / VLC
码率 信号清晰度(带宽) Mbps 越大越清晰越卡
延迟 演播室→电视的时差 ms

RTSP vs HTTP:HTTP 是"点一下就给"(外卖);RTSP 是"先打电话协商 → 开通频道 → 才推流"(打电话给电视台)。所以 RTSP 适合实时监看,但延迟天然比 HTTP 高。

比喻 2:CSI vs USB 摄像头 ------ 便利店 vs 农场

  • USB 摄像头 = 便利店:东西(图像)在店里已经加工包装好,你直接买(v4l2 读)就能用。
  • CSI 摄像头 = 农场 :送来的是带泥的 raw 原料 (Bayer RAW 电信号),必须你在家洗切炒 (ISP 处理)才能吃。直接生吃(v4l2 直读)会拉肚子------这就是 Invalid argument 的由来。

🔧 四、实战记录(完整可复用命令)

环境档案

树莓派账号 / 主机名 hxxxx / hxxxx
系统 Debian 13 (trixie),aarch64
摄像头 imx219(树莓派官方 Camera Module V2,800 万像素)
libcamera v0.7.2,rpicam-apps 已装
MediaMTX v1.21.0
树莓派局域网 IP 192.168.0.108
RTSP 拉流地址 rtsp://192.168.0.108:8554/cam

步骤 1:确认摄像头身份

bash 复制代码
v4l2-ctl --list-devices

判读要点 :找 unicam (platform:fe801000.csi) → 说明是 CSI 摄像头bcm2835-codec / bcm2835-isp / rpi-hevc-dec 那些 video10~31 都是编解码器子设备,不是摄像头

步骤 2:用 libcamera 抓图验证

bash 复制代码
rm -f ~/test.jpg
rpicam-still -o ~/test.jpg -t 2000
ls -lh ~/test.jpg

✅ 成功标志:1.4M时间戳是刚才

ℹ️ Failed to create egl preview / drm preview 是 SSH 无桌面导致的预览窗缺失,不是错误

步骤 3:装 MediaMTX

bash 复制代码
cd ~
wget https://github.com/bluenviron/mediamtx/releases/download/v1.21.0/mediamtx_v1.21.0_linux_arm64.tar.gz
# 国内慢可换镜像:https://ghfast.top/https://github.com/...(同上路径)
tar -xzf mediamtx_v1.21.0_linux_arm64.tar.gz

步骤 4:配置 rpiCamera 源

bash 复制代码
cp mediamtx.yml mediamtx.yml.bak
cat > mediamtx.yml <<'EOF'
paths:
  cam:
    source: rpiCamera
    rpiCameraWidth: 1280
    rpiCameraHeight: 720
    rpiCameraFPS: 30
    rpiCameraBitrate: 2000000
EOF

步骤 5:开播

bash 复制代码
./mediamtx

成功标志(背下来)

复制代码
INF [path cam] [RPI Camera source] started
INF [RTSP] started with listeners on :8554 (TCP/RTSP)
configuring streams: (0) 1280x720-YUV420/Rec709
using hardware H264 encoder                      ← 硬件编码生效
INF [path cam] stream is available and online, 1 track (H264)   ← 流已上线

步骤 6:Mac 远程拉流

bash 复制代码
ffplay -rtsp_transport tcp rtsp://192.168.0.108:8554/cam

✅ 输出:Video: h264 (Main), yuv420p(progressive), 1280x720, 30 fps

步骤 7:测码率

bash 复制代码
ffmpeg -rtsp_transport tcp -i rtsp://192.168.0.108:8554/cam -c copy -t 10 ~/cam10s.h264 -y 2>/dev/null
ls -lh ~/cam10s.h264

结果2.0M / 10 秒2.0 MiB × 8 ÷ 10 = 约 1.68 Mbps


🕳️ 五、今日踩坑(3 个,都是高价值坑)

坑 1:test.jpg 有 290K,其实是个"昨天的幽灵"

  • 现象ffmpeg -f v4l2 明明报错了,但 ls -lh 显示 test.jpg 有 290K,看着像成功
  • 真因 :那是 DAY13 残留的旧文件 (时间戳 Sep 7 23:34),当天命令压根没生成新文件
  • 教训看文件时间戳,别只看大小,旧文件会骗人
  • 动作 :排查前先 rm -f 再重跑

坑 2:CSI 摄像头不能用 ffmpeg -f v4l2 直采

  • 现象ioctl(VIDIOC_G_PARM): Inappropriate ioctl for device + ioctl(VIDIOC_STREAMON): Invalid argument
  • 真因:CSI 摄像头是裸传感器,输出 Bayer RAW 电信号,必须经 ISP 冲印才能成像
  • 解决 :改走 libcamera(rpicam-still / MediaMTX rpiCamera 源)
  • 判断口诀v4l2-ctl --list-devices 里出现 unicam ... .csi → 就是 CSI,别用 v4l2

坑 3:MediaMTX 下载 404

  • 现象mediamtx_v1.21.0_linux_arm64v8.tar.gz → 404

  • 真因新版文件名改成了 linux_arm64,去掉了 v8 后缀,老教程全失效

  • 解决mediamtx_v1.21.0_linux_arm64.tar.gz

  • 防坑技巧(通用):装任何 GitHub 软件前先查真实文件名

    bash 复制代码
    curl -sL https://api.github.com/repos/作者/项目/releases/latest | grep '"name"'
  • 架构对照aarch64arm64armv7larmv7x86_64amd64


📊 六、关键数据

指标 数值 说明
分辨率 1280x720 配置生效
帧率 30 fps 配置生效
编码 H.264 Main,硬件编码 不吃 CPU
目标码率 2 Mbps(2000000) 配置值
实测码率 约 1.68 Mbps 目标值的 84%,动态码率正常表现
播放 58 秒丢帧 7 帧 可忽略
端到端延迟 待补测 见下节

🔜 七、延伸方向

  • 让流穿透到公网(frp / 内网穿透),从腾讯云服务器远程看
  • 把 RTSP 流转成 HLS/WebRTC,直接在网页里看(MediaMTX 已内置 8888/8889 端口)
  • 接入之前部署的 SRS(RTMP 1935),对比 RTSP vs RTMP 的延迟差异
  • 用 systemd 把 MediaMTX 做成开机自启服务(复习 DAY4 的 systemctl)

今日金句

排查问题先看时间戳,装软件先查官方 release。

教程会过时,但报错信息和官方文档不会骗你。

相关推荐
天行健,君子而铎1 小时前
数据分类分级的范式转换:从规则匹配到模型持续优化规模化前瞻算法
大数据·网络·数据库·安全·分类
云运维笔记1 小时前
免费模拟器ENSP:零成本学网络配置
服务器·网络·智能路由器
Mortalbreeze2 小时前
深入理解 Linux IO 模型(四):多路复用 —— epoll
linux·运维·服务器·网络·tcp/ip
CedarQR2 小时前
LubanCat-2 (RK3568) Debian 下让 H3C Magic USB 无线网卡(AIC8800)联网全记录
linux·网络·单片机·嵌入式硬件·debian·3568·h3c
STQY燊桐启元(深圳)电子科技2 小时前
5G 小基站整机热-EMC 协同设计,ST-XDP 应用实例,DP 用于电 源功率模块
网络·机器人
Cx330❀13 小时前
【Linux网络】网络层协议 IP :从网络层原理到 Linux 内核源码
linux·运维·服务器·网络·tcp/ip·ai·ai编程
FPC工厂——皇榜科技14 小时前
机器人灵巧手线路板:从“握得住”到“摸得准”:一只机械手的柔性神经密码
网络·人工智能·科技·机器人·pcb工艺
Orange_sparkle15 小时前
Pi Agent vs LangGraph:从人机交互、企业 RAG 到持久化工作流的完整选型指南
java·网络·人机交互
xiaoye-duck16 小时前
《Linux 网络编程》深入传输层 UDP 协议原理:端口、报文、缓冲区与内核源码解析
linux·网络·udp