094、视频流实时检测管线:FFmpeg 拉流 + YOLO 推理 + Kafka 结果分发架构
094、视频流实时检测管线:FFmpeg 拉流 + YOLO 推理 + Kafka 结果分发架构
一、从一次线上事故说起
去年冬天凌晨两点,我被电话吵醒——客户现场的视频检测系统全线崩溃。排查后发现,RTSP流在夜间网络抖动时,FFmpeg拉流线程直接卡死,导致整个推理管线阻塞,Kafka生产者队列积压到OOM。更讽刺的是,监控大屏上最后一条检测结果停留在三小时前,而报警日志里全是“Frame dropped”的假象。
这个教训让我意识到:视频流实时检测不是把三个组件拼起来就完事,每个环节的异常处理、缓冲策略、线程模型,任何一个细节没兜住,都会让整个管线变成定时炸弹。今天这篇笔记,就围绕“FFmpeg拉流→YOLO推理→Kafka分发”这条主线,把那些踩过的坑和填坑方案掰开揉碎讲清楚。
二、FFmpeg拉流:别让解码成为瓶颈
2.1 拉流线程必须独立
很多新手喜欢在主线程里直接调用av_read_frame,一旦网络超时,整个程序就卡死。正确的做法是:单独开一个拉流线程,用队列做缓冲。
// 拉流线程:只管往队列里塞帧voidcaptu