RTSP 摄像头接入与远程拍照实践
背景
需要一个”窗外摄像头”的实时画面,目标是通过命令行快速抓拍,无需登录摄像头 Web 管理页。
摄像头地址:rtsp://admin:密码@IP:554/Streaming/Channels/102
方案:ffmpeg 单帧抓拍
最简单的方案是使用 ffmpeg 直接从 RTSP 流中提取一帧:
ffmpeg -rtsp_transport tcp \
-i "rtsp://admin:密码@192.168.1.64:554/Streaming/Channels/102" \
-frames:v 1 -q:v 2 /tmp/snapshot.jpg -y
参数说明
| 参数 | 作用 |
|---|---|
-rtsp_transport tcp | 使用 TCP 传输,比 UDP 更稳定 |
-frames:v 1 | 只抓一帧视频 |
-q:v 2 | JPEG 质量(2=高质量,范围1-31) |
-y | 覆盖输出文件 |
输出信息
Stream #0:0: Video: h264 (Main), yuvj420p, 1280x720, 25 fps
抓拍成功:1280×720 分辨率,约 93KB。
遇到的小坑
- 密码中的特殊字符:密码包含
@符号时需要 URL 编码为%40,否则会被解析为地址分隔符 - RTSP 通道选择:通道 102 是子码流(较低分辨率/帧率),通道 101 是主码流
- TCP vs UDP:UDP 在弱网环境下容易丢包花屏,TCP 更可靠
扩展思路
定时抓拍
结合 crontab 可以实现定时快照:
# 每小时拍一张
0 * * * * ffmpeg -rtsp_transport tcp -i "rtsp://..." -frames:v 1 /tmp/cam_$(date +\%Y\%m\%d_\%H\%M).jpg -y
推送到 AI 识别
抓拍后可以通过多模态模型进行图像识别,例如:
- 室外是否有异常物体
- 天气状况判断
- 车辆/人员检测
总结
ffmpeg 是一个强大的工具,单条命令就能完成 RTSP 摄像头抓拍。结合自动化脚本和多模态模型,可以搭建一个智能监控系统。