【FFmpeg 智慧园区场景应用】10.智慧园区 FFmpeg 自动化运维系统 - 甲方运维团队培训课件
·
智慧园区 FFmpeg 自动化运维系统 - 甲方运维团队培训课件
培训时长:90 分钟
培训对象:园区运维工程师、技术支持人员
培训目标:掌握系统日常操作、故障排查、参数优化,能独立完成运维工作
目录
1. 系统整体介绍
1.1 系统定位
这是一套基于 FFmpeg 搭建的智慧园区音视频自动化运维系统,核心解决 4 大问题:
- 摄像头流 24h 稳定录制,故障自动重启
- 录像批量预处理,适配 AI 分析模型
- 历史录像压缩,节省 50% 存储成本
- 磁盘监控 + 多渠道告警,提前规避存储风险
1.2 系统架构
┌───────────────┐ ┌───────────────────────────────────┐
│ 园区摄像头集群 │ │ 运维服务器 │
│ (RTSP 协议) │───>│ 录制模块 → 预处理模块 → 压缩模块 │
└───────────────┘ │ ↓ │
│ 监控告警模块 → 企微/钉钉群 │
┌───────────────┐ └───────────────────────────────────┘
│ 运维终端 │<──────────────────────────────────────┘
│ (批量启停/监控)│
└───────────────┘
1.3 核心脚本与作用
| 脚本名称 | 存放路径 | 核心作用 |
|---|---|---|
camera_list.conf |
/data/park/scripts |
集中管理所有摄像头的 ID、RTSP 地址、存储目录 |
camera_batch_manage.sh |
/data/park/scripts |
多摄像头一键启动/停止/状态监控(核心运维入口) |
disk_monitor_alert.sh |
/data/park/scripts |
磁盘监控 + 企微/钉钉告警,支持静默周期和恢复通知 |
batch_ai_preprocess.sh |
/data/park/scripts |
批量处理录像,统一分辨率/帧率,适配 AI 分析 |
history_record_compress.sh |
/data/park/scripts |
压缩历史录像,降低存储占用 |
1.4 培训环境准备
- 登录运维服务器,切换到脚本目录:
cd /data/park/scripts - 确认脚本权限:
ls -l→ 所有.sh脚本需有x执行权限 - 确认配置文件:
cat camera_list.conf→ 摄像头信息正确无误
2. 核心功能实操演示
2.1 多摄像头批量运维(最常用操作)
(1) 查看所有摄像头状态
./camera_batch_manage.sh status
效果展示:
=====================================
2026-01-12 16:00:00 - 园区摄像头录制进程状态监控
=====================================
摄像头ID | 进程状态 | 录像目录
-------------------------------------
cam001 | 运行中 | /data/park/record/cam001
cam002 | 运行中 | /data/park/record/cam002
cam003 | 已停止 | /data/park/record/cam003
=====================================
状态说明:运行中=正常录制,已停止=需排查摄像头/网络/进程
重点说明:
- 「已停止」的摄像头需优先排查(后续讲故障处理)
- 状态命令每天必执行,快速掌握整体运行情况
(2) 一键启动所有摄像头
./camera_batch_manage.sh start
执行效果:
- 自动创建各摄像头的录像/日志目录
- 后台启动录制进程,终端关闭不影响
- 启动后执行
status验证状态
(3) 一键停止所有摄像头
./camera_batch_manage.sh stop
适用场景:
- 服务器重启前、园区设备维护时
- 停止后所有摄像头不再生成新录像
- 停止后执行
status确认所有进程已终止
2.2 磁盘监控与告警操作
(1) 手动触发告警测试
目的:验证告警功能是否正常,避免真故障时收不到通知
# 临时修改告警阈值为 1%(强制触发告警)
sed -i 's/ALERT_THRESHOLD=85/ALERT_THRESHOLD=1/' disk_monitor_alert.sh
# 执行告警脚本
./disk_monitor_alert.sh
# 恢复原有阈值
sed -i 's/ALERT_THRESHOLD=1/ALERT_THRESHOLD=85/' disk_monitor_alert.sh
验证结果:
- 企微/钉钉群收到 Markdown 格式告警消息
- 查看日志确认:
tail -f /data/park/logs/disk_monitor.log
(2) 切换告警渠道(企微 ↔ 钉钉)
# 编辑告警脚本
vi disk_monitor_alert.sh
# 修改配置项
ALERT_CHANNEL="wechat" # 改为 wechat 或 dingtalk
# 保存退出后,重新执行脚本测试
2.3 历史录像压缩与 AI 预处理
(1) 手动执行历史录像压缩
./history_record_compress.sh
执行效果:
- 自动压缩 7 天前的录像(可修改
KEEP_DAYS调整) - 生成带
_compressed.mp4后缀的文件,体积减少 40%-60% - 查看压缩日志:
tail -f /data/park/logs/history_record_compress.log
(2) 批量 AI 预处理
./batch_ai_preprocess.sh
执行效果:
- 处理
/data/park/record下的所有录像 - 输出到
/data/park/ai_input,文件带_ai_pre.mp4后缀 - 预处理后分辨率 720P、帧率 15fps,无音频流
2.4 日志查看与管理
(1) 查看单个摄像头录制日志
# 查看 cam001 日志(替换为实际摄像头 ID)
tail -f /data/park/logs/cam001_record.log
重点关注关键字:
异常退出:摄像头离线或 RTSP 地址错误自动重启:故障重启机制生效,无需手动干预
(2) 日志自动轮转(无需手动清理)
系统已配置 logrotate,每天自动压缩日志,保留 30 天
# 查看压缩后的日志文件
ls -lh /data/park/logs | grep .log.gz
# 测试日志轮转
sudo logrotate -f /etc/logrotate.d/park_ffmpeg
3. 常见问题排查与解决
3.1 高频问题 1:摄像头状态显示「已停止」
排查步骤:
-
查看对应摄像头日志
tail -f /data/park/logs/cam003_record.log # 替换为已停止的摄像头 ID- 若日志显示
Connection refused→ RTSP 地址错误/摄像头离线 - 若日志显示
No space left on device→ 磁盘满了
- 若日志显示
-
针对性解决
- RTSP 错误:核对
camera_list.conf中的账号、密码、IP 地址;现场检查摄像头是否通电联网 - 磁盘满了:执行压缩脚本 + 清理过期录像,再启动进程
- RTSP 错误:核对
3.2 高频问题 2:收不到告警消息
排查步骤:
-
检查 Webhook 地址是否正确
# 企微 Webhook 测试 curl -I https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key # 钉钉 Webhook 测试 curl -I https://oapi.dingtalk.com/robot/send?access_token=你的token- 返回
200 OK→ 地址正确;否则重新复制机器人 Webhook
- 返回
-
检查服务器网络
# 测试能否访问企微服务器 ping qyapi.weixin.qq.com- 无法 ping 通 → 联系网络管理员,开放服务器外网权限
-
检查钉钉关键词
- 钉钉机器人需消息包含安全关键词,脚本已内置,无需修改
3.3 高频问题 3:录像文件体积过大
解决方法:
- 调整压缩参数:编辑
history_record_compress.sh,调大CRF值(如 28→30),压缩率更高 - 缩短分段时长:编辑
camera_record.sh,将SEGMENT_TIME=3600改为 1800(30 分钟一段) - 缩短录像保留天数:修改
history_record_compress.sh中的KEEP_DAYS(如 7→3)
3.4 高频问题 4:批量启动后进程崩溃
解决方法:
- 延长启动延迟:编辑
camera_batch_manage.sh,将sleep 1改为sleep 2,避免服务器压力过大 - 检查服务器资源:执行
top命令,若 CPU/内存占用 > 80% → 升级服务器配置 - 排查单个摄像头:逐个启动摄像头,定位故障摄像头(日志中查看具体错误)
4. 参数优化与运维建议
4.1 核心参数优化表
| 参数名称 | 配置文件 | 默认值 | 优化建议 |
|---|---|---|---|
ALERT_THRESHOLD |
disk_monitor_alert.sh |
85% | 磁盘容量小 → 调至 80%;容量大 → 保持 85% |
SILENT_PERIOD |
disk_monitor_alert.sh |
3600s | 避免重复告警,建议 1-2 小时,不建议小于 30 分钟 |
KEEP_DAYS |
history_record_compress.sh |
7 天 | 按园区需求调整,如安保要求保留 15 天 → 改为 15 |
SEGMENT_TIME |
camera_record.sh |
3600s | 需快速检索 → 改为 1800s(30 分钟一段) |
CRF |
history_record_compress.sh |
28 | 追求画质 → 23-26;追求存储 → 28-32 |
4.2 日常运维最佳实践
- 每日必做:执行
./camera_batch_manage.sh status+df -h /data/park,5 分钟搞定 - 每周必做:查看压缩日志和预处理日志,确认定时任务正常执行
- 每月必做:备份脚本配置文件 + 更新 FFmpeg + 清理过期录像
- 故障处理原则:先看日志 → 定位问题 → 针对性解决 → 验证效果
4.3 安全运维建议
- 避免使用 root 用户:所有操作使用
park_ops用户,降低权限风险 - 定期备份配置:每月将
/data/park/scripts打包备份至远程服务器 - 禁止随意修改脚本:修改前先备份原文件,避免语法错误导致系统崩溃
5. 答疑与实操练习
5.1 互动答疑
- 针对实操过程中的问题进行解答
- 结合园区实际需求,调整参数配置
5.2 实操练习任务
- 执行
status查看摄像头状态,手动启动「已停止」的摄像头 - 手动触发一次告警测试,确认群聊收到通知
- 执行压缩脚本,查看压缩前后文件体积变化
- 修改告警渠道为钉钉,测试通知是否正常
培训总结:本系统核心是「自动化」,日常运维以监控状态、查看日志为主,故障处理以日志排查为核心,确保园区音视频录制稳定运行。
更多推荐
所有评论(0)