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

寻求编写循环脚本实现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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 11:52:42