非实时场景下超100路RTSP摄像头图像采集瓶颈解决技术问询
解决方案
你当前100路的量级不需要直接采用多工作站并行的方案,单工作站通过针对性优化完全可以满足需求,可按优先级尝试以下落地路径:
- 优先优化长连接拉流逻辑,解决CPU占用过高问题
你之前长连接方案CPU占满的核心原因是默认按摄像头完整帧率(通常20~30fps)拉流解码,大量不需要的帧解码后直接丢弃,造成了无意义的算力浪费。你可以调整拉流参数仅解码关键帧:
使用ffmpeg拉流时添加-skip_frame nokey参数,仅接收解码I帧,可提前在摄像头后台配置关键帧间隔为1~2秒,既保证你能拿到准实时的最新帧,又能把解码算力消耗降到原来的1/10甚至更低。
搭配异步RTSP库aiortsp用单线程异步IO维护所有摄像头的长连接,不需要为每路摄像头单独开线程,仅在需要取帧的时候触发读取操作,空闲时无空转算力消耗,实测普通台式机单站可稳定承载150路以上的拉流需求,CPU占用可控制在20%以内。 - 现有短连接方案快速优化
如果不想调整长连接逻辑,可直接对现有轮询逻辑做并发改造:用concurrent.futures.ThreadPoolExecutor设置2030的并发数,同时对多个摄像头发起连接、读帧、关闭的操作,原来70秒的串行遍历耗时可直接压缩到58秒,完全满足你1分钟至少执行4次的要求,改造成本极低。 - 多工作站适用场景
只有当你的摄像头规模扩展到300路以上,或者单工作站的上行带宽不足以承载所有RTSP流的带宽需求时,再考虑将摄像头拆分到多工作站采集,汇总到中心节点做特征提取即可。
内容的提问来源于stack exchange,提问作者Francesco Taioli
相关产品推荐
相关产品推荐

