基于 RK3568 的边缘智能视频监控系统
该项目是一个支持浏览器远程实时监控、人员检测自动录像、查看回放和管理录像的智能视频监控系统。主要分为RK3568 板端和服务端两部分,板端负责 V4L2/NV12 视频采集—> RKNN/YOLOv8n 推理与叠框—> MPP/H.264 编码—>FFmpeg/MPEG-TS 封转与 SRT 推流与 MQTT 发布推理检测数据,服务端负责接收板端推流视频数据和 MQTT 检测数据,并通过 MediaMTX 实现自动 MP4 录像、回放管理、WebRTC 视频流分发。在当前 1080 x 1920 分辨率下,板端从摄像头V4L2 采集到推流结束的单帧延时为 85ms,流水线吞吐到 25FPS,公网实时观看延时约 500ms,完成超过一周连续运行测试。
技术方案:
RK3568、 V4L2、 MPP、 H.264、 FFmpeg、 MPEG-TS、 SRT、 YOLOv8n、 RKNN、 MQTT/TLS、 WebRTC、 MediaMTX
主要工作:
1. 线程安全 Ring FIFO:支持队列大小、队满丢新/旧策略配置和异常线程唤醒。
2. 摄像头采集到推流链路:V4L2/NV12 视频采集—> RKNN/YOLOv8n 推理与叠框—> MPP/H.264 编码—> FFmpeg/MPEG-TS 封转与 SRT 推流,每个模块封装成单一模块,大多数模块与模块之间都使用零拷贝技术进行数据传递,设计统一的引用计数 buffer 释放原则。
3. MQTT 检测数据发布:将 YOLOv8n 检测结果转换为 JSON 格式,使用 MQTT 发送给服务端
4. 日志系统:基于 CMake 组织工程与日志等级配置,统一日志打印格式,通过 python 脚本统计采集、检测、编码以及推流耗时,用于定位系统瓶颈与验证优化效果。
5. 性能优化:将串行的视频处理改为多线程流水线并行处理,线程之间通过线程安全 FIFO 进行数据传递,使用队满丢弃最旧帧,限制 FIFO 大小的措施控制旧帧堆积,使吞吐由原来的 17fps 提高至 21fps;进一步调整模型输入尺寸与优化CPU 后处理,将检测阶段耗时降低约 10ms,NPU 推理降低为 23ms,最终将视频流处理达到当前摄像头硬件限制的
25fps。
6. 服务端处理:通过 MQTT 上报的检测数据,后端服务由 MediaMTX 接收 SRT 视频流并通过WebRTC 分发,并基于MediaMTX 实现自动启停 MP4 录像,实现了浏览器实时预览与历史录像回放。