多路相机采集系统出事,多数不是相机不好,而是数据流没算清。多台相机同时出图,图像数据要在接口、主机总线、内存、存储之间一路走通,任何一级的持续带宽不够,结果都是丢帧;丢帧发生在硬件层,事后靠算法补不回来。下面按链路顺序,把单路码率怎么估、系统总带宽怎么加、接口能挂几路、主机与存储要看什么、余量与预案怎么留讲一遍。全文不涉及具体型号与厂商参数,涉及数值边界一律以整机实测为准。
一、先把数据流算清楚:单路码率与系统总带宽

估算的起点是一个乘法:单路码率 ≈ 分辨率 × 位深 × 帧率。分辨率是每帧像素数,位深决定每个像素占多少比特,帧率决定每秒出多少帧,三者相乘就是这条链路每秒必须搬动的原始数据量。深度相机还要注意位深口径:深度图与灰度图、彩色图的位深往往不同,同一台设备在不同输出模式下码率可以差很多,规划时要按实际使用的输出模式算,而不是按参数表上最漂亮的那一栏算。
还要区分"出图"与"出流":有的相机只在你取的时候给一帧,有的则按固定帧率连续推流;有的设备在深度图之外还附送强度图、置信度图或点云。每多一路输出,就多一份带宽。选型阶段就要把"最终要落盘的是哪几种数据"写清楚,否则算出来的总带宽会偏小。
单路算完,乘路数得到系统总带宽。这里要先区分"原始数据量"和"链路占用":协议封装、包头、重传、行间消隐都会让实际占用高于裸数据量,工程上不会拿理论值当预算,而是留出开销余量。真正要保障的是"有效持续带宽",也就是能长时间稳定搬动的数据量,而不是接口标称的峰值。
二、接口分档:不同接口能挂的路数差很多
常见接口可以按持续带宽粗略分档,档位直接决定单口能挂几路:
| 接口 | 典型定位 | 线缆与距离 | 多路扩展方式 |
|---|---|---|---|
| GigE | 千兆级,通用、成本低、可 PoE 供电 | 网线较长 | 多网卡/多口,注意上行共享 |
| USB3 | 数 Gbps 级,即插即用、可总线供电 | 线缆较短 | 多口共享控制器上行 |
| CoaXPress | 高速,同轴线、可长距离 | 需采集卡 | 采集卡多通道,卡上行共享 |
| MIPI | 板级直连,带宽高、体积小 | 极短,板内 | 直连 SoC,受通道数与 CSI 上限约束 |
分档只是第一层。同一种接口标称带宽相同,实际可持续吞吐可能差很多:USB3 的多口往往挂在同一个控制器上,共享上行;多口网卡如果走同一条 PCIe 上行,也会互相挤占;CoaXPress 的通道数、采集卡的 DMA 能力、驱动缓冲策略都会影响可挂路数。结论是"接口标准定上限,主机与驱动定实际值",不能只看接口名字报路数。
三、主机侧不是黑洞:总线、内存带宽与拷贝次数
数据进了主机,还要过三道关:总线、内存、CPU。
总线首先是 PCIe 通道分配。多口网卡、采集卡、NVMe 盘都插在同一个平台上,它们共享 PCIe 上行带宽。如果采集卡和存储盘挂在同一条链路上,采集写入与落盘会互抢,峰值时刻最容易掉链子。规划时要看拓扑:哪些设备共享上行、哪些走独立通道。
内存带宽常被忽略。图像数据的搬运本身就是大流量操作:从网卡或采集卡 DMA 到内存,从内核缓冲到用户态缓冲,再写进存储。每多一次拷贝,就多占一份内存带宽。工程上倾向于减少拷贝次数------DMA 直写、零拷贝、环形缓冲,目的都是把同一份数据少搬几遍。缓冲区数量也要留够:太少容易在调度抖动时丢帧,太多则拉高内存占用与延迟。
CPU 侧看的是中断与轮询开销。高帧率多路场景下,每包一次中断会让 CPU 忙于响应;多队列网卡配合中断合并、轮询模式能显著降低开销,但轮询本身要占核心。这部分必须按路数与帧率实测,不能靠感觉。
还有一个容易漏掉的消耗方:同一平台上跑着的其它任务。视觉算法、显示、日志、远程推流都会分走 CPU 与内存带宽。采集主机如果同时承担实时推理,规划时要把推理侧的占用一并扣掉,或者干脆把采集与计算分到两台机器上,中间只走一条已经核算过的链路。
四、存储要同时过两关:持续写带宽与容量
存储是最容易"看起来够、实际不够"的一环,因为它要同时满足两个条件。
第一关是持续写带宽。注意"持续"两个字:很多介质的峰值写入很好看,但持续写会掉速,闪存类介质在缓存写满后、叠瓦式磁盘在改写时尤其明显。多路顺序写场景要按"长时间持续写"评估,而不是按短时跑分。RAID 也不是万能的:校验型 RAID 存在写惩罚,重建期间性能进一步下降,而采集任务通常不会为重建让路。
第二关是容量。容量需求 ≈ 系统总带宽 × 采集时长。采集时长要从业务反推:一次作业跑多久、每天多少班次、原始数据保留多久、是否需要同时留原始与处理后两份。算完容量再反推盘位,并同时考虑冗余与热备。容量和带宽要一起满足,只满足一头都不行。
文件系统与分片策略也会影响实际写入:单文件过大、目录过深、元数据操作频繁都会恶化写入表现。多路采集常见的做法是按路或按时间段分片写,配合顺序追加,减少随机写。
另外要区分两种写入场景。一是"落盘即完成"的纯记录,只要能持续写进去就行;二是"边写边用"的在环场景,数据要同时被回读、被算法消费,这时候读取也会占用同一块存储的带宽,读写混合会让实际可用的写入带宽进一步缩水。规划阶段要问清楚:这批数据落盘之后,还有谁会同时读它。
五、峰值与均值:为什么必须按峰值留余量
按平均码率规划,是丢帧的头号原因。多路系统的瞬时峰值可能远高于均值:多路同时满帧出图、触发信号让多路在同一时刻开始曝光、事件触发导致短时突发、重传与协议开销叠加,都会让某一瞬间的总需求顶到硬件上限。
因此规划要按峰值,并留出余量。余量的用途是吸收抖动:调度抖动、内存回收、存储重建、温度导致的降频。余量不是浪费,它是系统的容错空间。工程上通常先用峰值算一遍,再看余量能否覆盖已知的最坏工况。
六、同步采集带来的额外叠加
多目同步是 EGO 数采类应用的常态,它让带宽问题变得更尖锐。硬件触发同步会让多路相机在同一时刻开始曝光、同一时刻出图,数据不再错峰到达,而是同时到达,主机侧瞬时压力成倍增加。如果多路共享同一接口或同一条上行,同步做得越好,峰值越集中。
对应做法有几种:一是把同步组的路数按接口持续带宽而非峰值带宽分配,必要时拆到不同接口或不同网卡;二是分组错峰触发,牺牲一点同步精度换带宽平稳;三是加大接收缓冲,把瞬时峰值摊平到更长的时间窗内。选哪种取决于业务对同步精度的要求,规划阶段就要定下来。
七、带宽不够时先动谁:降级预案
预案要在部署前写好,而不是等到现场丢帧再想办法。常见手段按代价从低到高:
- 降帧率:对运动速度不敏感的场景,收益直接、代价最小。
- 降分辨率或开 ROI:只保留关心的区域,数据量按面积下降。
- 提高压缩比:有损压缩换带宽,但要评估对测量精度的影响;无损压缩收益取决于图像内容,不能预设。
- 分组轮采:多组交替采集,牺牲时间连续性换瞬时带宽。
- 先落内存缓冲再落盘:把峰值摊平,但要求缓冲容量足够,且不能改变总数据量。
预案要写清触发条件:丢帧计数、队列水位、写延迟超过阈值时自动降级,而不是靠人盯着。
八、部署前的链路测算与压测
链路测算的顺序是:确定路数与输出规格 → 算单路码率 → 算系统总带宽 → 选接口并核实际可挂路数 → 核主机总线与内存 → 核存储持续写与容量 → 留余量 → 写降级预案。
测算之后必须压测。压测要贴着真实工况:按最大路数、最高帧率、最长时长跑,观察丢帧计数、缓冲水位、写入延迟和温度。短时跑通不代表长时间能跑通,存储掉速与温度降频都只在长跑里暴露。把丢帧计数做进监控并留日志,是排查问题的前提。
压测还要制造"最坏时刻":让所有相机同时满帧、同时触发,并在此状态下启动一次大文件拷贝或后台任务,看系统会先牺牲谁。很多现场问题不是平均负载压垮的,而是在某个瞬时叠加点上崩掉的。测出这个点在哪一级,余量该加多少就有了依据。
九、常见踩坑清单
- 只按平均码率算,没按峰值留余量。
- 拿接口标称带宽当有效带宽,忽略协议开销与共享上行。
- 多口设备共享同一条 PCIe 上行,采集与落盘互抢。
- 存储只看短时跑分,没测持续写;缓存写满后掉速。
- 容量只算原始数据,忘了冗余、热备与保留周期。
- 多目同步让峰值集中,仍按错峰工况估算。
- 没有降级预案与触发条件,现场只能停机。
- 没有丢帧计数与日志,出了问题无法定位在哪一级。
十、小结
多路相机系统的数据流规划,本质是三件事:算清楚(单路码率乘路数)、核对齐(接口、总线、内存、存储逐级核对)、留余量(按峰值规划并备降级预案)。带宽与写入能力不足导致的丢帧,事后无法补救,所以这些工作必须在部署前完成。涉及具体数值边界,一律以整机实测与压测结果为准。
【备选标题】
- 多路相机带宽与存储怎么算?从单路码率到盘位规划的完整链路
- 多路采集为什么总丢帧?先把这条数据流算清楚
- 多相机系统的带宽与存储规划:接口、主机与盘位逐级核对