寻求编写循环脚本实现ffmpeg成功连接IP Camera并自动重试的方案
自动维持IP摄像头FFmpeg录制的解决方案
1. 编写监控脚本
创建camera_recorder.sh脚本,实现摄像头在线检测、自动启动录制,以及录制中断后的自动重试:
#!/bin/bash # 配置项,根据实际情况修改 RTSP_URL="rtsp://your-camera-ip:port/stream-path" # 替换为你的摄像头RTSP地址 RECORD_DIR="/home/pi/camera_recordings" # 录像保存目录 CHECK_WAIT=10 # 摄像头离线时的重试间隔(秒) # 确保录像目录存在 mkdir -p "$RECORD_DIR" while :; do # 先尝试连接摄像头,验证是否在线(读取5秒流后退出) ffmpeg -i "$RTSP_URL" -t 5 -f null - > /dev/null 2>&1 if [ $? -eq 0 ]; then echo "$(date '+%Y-%m-%d %H:%M:%S'): 摄像头在线,启动录制..." # 启动FFmpeg录制,按小时分割文件,文件名带时间戳 sudo ffmpeg -i "$RTSP_URL" -c:v copy -c:a copy -f segment \ -segment_time 3600 -strftime 1 "$RECORD_DIR/%Y%m%d_%H%M%S.mp4" echo "$(date '+%Y-%m-%d %H:%M:%S'): 录制进程终止,将重新检测摄像头..." else echo "$(date '+%Y-%m-%d %H:%M:%S'): 摄像头未在线,${CHECK_WAIT}秒后重试..." fi sleep "$CHECK_WAIT" done
2. 配置脚本权限
执行以下命令给脚本添加可执行权限:
chmod +x camera_recorder.sh
3. 设置开机自启
编辑crontab:
crontab -e
删除原有的@reboot命令,替换为:
SHELL=/bin/bash @reboot /home/pi/camera_recorder.sh >> /var/log/camera_recorder.log 2>&1
注意:将
/home/pi/camera_recorder.sh替换为你的脚本实际路径;日志文件会记录脚本运行状态,便于排查问题。
关键特性
- 动态检测摄像头:无需固定
sleep时长,脚本启动后会循环检测摄像头状态,在线才启动录制 - 自动重试机制:无论FFmpeg因摄像头重启、网络波动还是其他原因终止,都会自动重新检测并尝试启动录制
- 日志记录:所有运行状态会写入日志文件,方便后续排查问题
内容的提问来源于stack exchange,提问作者Bellacoda
相关产品推荐
相关产品推荐

