智慧园区 FFmpeg 自动化运维系统 - 甲方运维团队培训课件

培训时长:90 分钟
培训对象:园区运维工程师、技术支持人员
培训目标:掌握系统日常操作、故障排查、参数优化,能独立完成运维工作


目录

  1. 系统整体介绍(10 分钟)
  2. 核心功能实操演示(40 分钟)
  3. 常见问题排查与解决(20 分钟)
  4. 参数优化与运维建议(15 分钟)
  5. 答疑与实操练习(5 分钟)

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 培训环境准备

  1. 登录运维服务器,切换到脚本目录:cd /data/park/scripts
  2. 确认脚本权限:ls -l → 所有 .sh 脚本需有 x 执行权限
  3. 确认配置文件: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:摄像头状态显示「已停止」

排查步骤:
  1. 查看对应摄像头日志

    tail -f /data/park/logs/cam003_record.log  # 替换为已停止的摄像头 ID
    
    • 若日志显示 Connection refusedRTSP 地址错误/摄像头离线
    • 若日志显示 No space left on device磁盘满了
  2. 针对性解决

    • RTSP 错误:核对 camera_list.conf 中的账号、密码、IP 地址;现场检查摄像头是否通电联网
    • 磁盘满了:执行压缩脚本 + 清理过期录像,再启动进程

3.2 高频问题 2:收不到告警消息

排查步骤:
  1. 检查 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
  2. 检查服务器网络

    # 测试能否访问企微服务器
    ping qyapi.weixin.qq.com
    
    • 无法 ping 通 → 联系网络管理员,开放服务器外网权限
  3. 检查钉钉关键词

    • 钉钉机器人需消息包含安全关键词,脚本已内置,无需修改

3.3 高频问题 3:录像文件体积过大

解决方法:
  1. 调整压缩参数:编辑 history_record_compress.sh,调大 CRF 值(如 28→30),压缩率更高
  2. 缩短分段时长:编辑 camera_record.sh,将 SEGMENT_TIME=3600 改为 1800(30 分钟一段)
  3. 缩短录像保留天数:修改 history_record_compress.sh 中的 KEEP_DAYS(如 7→3)

3.4 高频问题 4:批量启动后进程崩溃

解决方法:
  1. 延长启动延迟:编辑 camera_batch_manage.sh,将 sleep 1 改为 sleep 2,避免服务器压力过大
  2. 检查服务器资源:执行 top 命令,若 CPU/内存占用 > 80% → 升级服务器配置
  3. 排查单个摄像头:逐个启动摄像头,定位故障摄像头(日志中查看具体错误)

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 日常运维最佳实践

  1. 每日必做:执行 ./camera_batch_manage.sh status + df -h /data/park,5 分钟搞定
  2. 每周必做:查看压缩日志和预处理日志,确认定时任务正常执行
  3. 每月必做:备份脚本配置文件 + 更新 FFmpeg + 清理过期录像
  4. 故障处理原则:先看日志 → 定位问题 → 针对性解决 → 验证效果

4.3 安全运维建议

  1. 避免使用 root 用户:所有操作使用 park_ops 用户,降低权限风险
  2. 定期备份配置:每月将 /data/park/scripts 打包备份至远程服务器
  3. 禁止随意修改脚本:修改前先备份原文件,避免语法错误导致系统崩溃

5. 答疑与实操练习

5.1 互动答疑

  • 针对实操过程中的问题进行解答
  • 结合园区实际需求,调整参数配置

5.2 实操练习任务

  1. 执行 status 查看摄像头状态,手动启动「已停止」的摄像头
  2. 手动触发一次告警测试,确认群聊收到通知
  3. 执行压缩脚本,查看压缩前后文件体积变化
  4. 修改告警渠道为钉钉,测试通知是否正常

培训总结:本系统核心是「自动化」,日常运维以监控状态、查看日志为主,故障处理以日志排查为核心,确保园区音视频录制稳定运行。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐