← 首页 · 边缘工程 边缘工程

多路 RTSP 视频管线与负载调度可执行手册

调研日期:约 2026-10-25(Asia/Shanghai)
定位:站端边缘盒「拉流 → 硬解 → 预处理 → 推理 → 跟踪/规则 → MQTT」分线程管线、路数/分辨率调度、背压与断流重连;对齐网关 BOM A/B/C 三档。
上游衔接:edge-ai-substation-gateway-bom.md、edge-ai-gstreamer-ota-cheatsheet.md、edge-ai-cn-npu-iva-gstreamer.md、edge-ai-mqtt-hardening-offline-buffer.md、edge-ai-board-fps-power-matrix.md、edge-ai-cn-npu-fps-matrix.md、edge-ai-event-schema-acceptance.md、edge-ai-model-signstore-mender-cookbook.md。
多路能力为公开示例/社区量级,非合同保证;精确端到端 FPS 禁止编造,未核到处标 unknown。


0. 一句话结论

解码、推理、NMS/跟踪、MQTT 分线程 + 有界队列;过载时 丢帧保推理,断 MQTT 不堵热路径。路数按 BOM:A=1–2 / B=4–8 / C=16–32,优先 降帧 → ROI → 隔帧推理,再砍路。Zoo / model-only FPS 不进合同;验收只认目标站 端到端 稳定 FPS 与热降频否决项。


1. 管线拓扑(统一逻辑视图)

[国标枪机 RTSP]
      │  TCP 优先;jitterbuffer / latency
      ▼
┌─ 拉流线程池(每路或每组) ─┐
│  rtspsrc / FFmpeg / 厂商 demux │
└──────────────┬──────────────┘
               ▼
┌─ 硬解线程(VPU) ──────────┐
│  H.264/H.265 → NV12/NVMM/CMM │
└──────────────┬──────────────┘
               ▼  有界 decode_q(满则丢最旧)
┌─ 预处理(RGA / BMCV / VPP / PYM)┐
│  letterbox / ROI crop / CSC      │
└──────────────┬──────────────────┘
               ▼  有界 infer_q(满则丢帧保推理)
┌─ 推理线程池(NPU/GPU) ────┐
│  YOLO INT8/FP16;batch 对齐路数或 1 │
└──────────────┬─────────────┘
               ▼
┌─ 后处理 / 跟踪 / 规则 ─────┐
│  NMS → ByteTrack/IoU → 多边形闯入 / PPE 规则 │
└──────────────┬─────────────┘
               ▼  有界 event_q(满则优先丢 telemetry)
┌─ MQTT 异步发布(旁路) ────┐
│  events QoS1;telemetry QoS0;断线本地环缓 │
└────────────────────────────┘

线程边界原则

阶段 建议线程归属 禁止事项
拉流 + 硬解 每路独立或「解码池」;阻塞 I/O 不出推理线程 在推理线程里同步 connect/read
预处理 紧挨解码回调或独立 RGA/VPP 池;尽量 DMA-BUF / 设备内存 每帧 memcpy 回 host 再 resize(DDR 先炸)
推理 NPU/GPU worker 数 ≈ 核数或 batch 槽;单上下文勿跨线程乱抢 推理线程同步 mosquitto_publish
NMS / 跟踪 / 规则 CPU 侧独立或同推理后半段;规则引擎可再拆 重规则(OCR 全图)塞进每帧热路径
MQTT / 抓拍 纯旁路;有界队列 + 丢弃策略 队列无界、同步等待 ACK 堵死管线

1.1 与三大粘合层对照

层次 NVIDIA DeepStream(BOM B Orin) 算能 sophon-stream(BOM C) 瑞芯微 MPP+RGA+RKNN(BOM A/B)
拉流 uri/rtspsrc;live-source=1;latency/drop-frame-interval JSON channels[].url;sample_interval 跳帧 FFmpeg/rtspsrc + TCP;社区 ZLM 等
复用/批 nvstreammux → 批进 nvinfer;多模型用 tee + 并行分支;IPC 共享解码见官方 sample element 图:decode→yolo*→bytetrack→blank;thread_number 分前/推/后 无官方 mux;自管队列;三核 NPU 各一 worker 常见
硬解 NVDEC;输出 NVMM h264_bm/h265_bm;设备 bm_image MPP;NV12,高对齐(如 1088)
预处理 nvvideoconvert / mux 缩放 BMCV VPP RGA letterbox(勿默认 OpenCV)
推理 nvinfer / nvinferserver;.engine BMRuntime + .bmodel;可选 tpu_kernel 后处理 RKNN Runtime + .rknn;零拷贝 DMA-BUF
跟踪 nvtracker bytetrack element CPU ByteTrack/IoU(社区)
事件出口 nvmsgbroker + MQTT proto(旁路) blank/doWork 异步 MQTT appsink / SHM → 后台发布
官方骨架 GStreamer IVA 最完整 JSON Pipeline,非 gst 主路径 编解码 gst 成熟;推理多为自研/社区

公开多路量级(仅量感,须自测)

平台 公开叙述量级 备注
Orin + DeepStream 4~8+ 路 1080p 分析常见工程目标;吞吐上限 ≈ trtexec QPS / 路数 batch-size 须对齐源数;live 调 batched-push-timeout
BM1684X + sophon-stream 官方 YOLO 例程 SOC:约 8 路合计 百~二百+ FPS 量级(INT8,条件见仓库 README);硬解宣传可达 32 路量级 硬解路数 ≠ 分析路数;管线总 FPS 见 demo,勿写「单路×32」
RK3588 MPP+RKNN 社区/厂商蓝图:8~16 路 1080p 解码+检测有案例;DDR/温升常先于 TOPS 触顶 16 路需降帧/隔帧;85 ℃ 级热降频须进散热设计

不确定或条件不可复现处标 unknown,写入合同前一律改为目标站实测表。


2. 路数与分辨率调度表(对齐 BOM A/B/C)

口径:输入默认 1080p@25 H.265;模型默认 YOLO-n/s 640 INT8;下列为建议工程档位,非厂商 SLA。

档 SoC(BOM) 建议分析路数 默认采集 推理策略 过载降级阶梯(先→后)
A 入门 RK3588J 1–2 实时;POC 可试 4 1080p@25;推理 10~15 FPS/路 每路独立或单 worker;batch=1 ①推理 15→10→5 FPS ②ROI 半幅 ③隔 2/3 帧 ④第 3+ 路只解码预览
B 标准 Orin Nano Super 或 RK3588/CV186AH 4–8 1080p;关键点 15 FPS,次要点 5~8 FPS Orin:mux batch≈路数;RK:3 NPU worker 轮询 ①次要路降帧 ②非警戒区 ROI ③烟火/PPE 分时隙 ④砍至 4 路保关键
C 汇聚 BM1684X(SE7 类) 16–32 硬解容量内;同时深分析常 ≤8~16 分组:A 组 15 FPS 分析,B 组 5 FPS/隔帧,C 组仅动检触发 sophon-stream 多 channel + sample_interval;batch 1 或 4 按模型 ①B/C 组先降 ②动检门控推理 ③夜间降一半路 ④超温砍路保温

2.1 降帧 / ROI / 隔帧推理

策略 做法 适用 副作用
源侧降帧 DeepStream drop-frame-interval;sophon sample_interval;自研「每 N 帧入 infer_q」 全档默认应有 快速目标漏检↑;跟踪需更大 max_age
ROI 多边形/矩形裁切后再 letterbox;电子围栏只推警戒带 闯入、表计、油位 标定漂移需运维工具;禁写死像素不跟分辨率
隔帧推理 奇数帧推理、偶数帧只跟踪预测;或 2 路一模型时隙 B/C 多路 PPE 漏检窗口;应用时间积分/漏桶防抖
分辨率降档 摄像机副码流 720p/D1 进分析;主码流只录像 A 档 POC、C 档次要点 小目标(火花、远距帽)召回↓
任务分时 同一路:T0 PPE,T1 烟火,T2 异物;共享解码 B/C 单卡多模型 单任务瞬时 FPS 下降,须写清 SLA

调度优先级(电力站端建议)

  1. 人身/安监:PPE、闯入(PPE_VIOLATION / PERSON_INTRUSION)— 保 FPS。
  2. 烟火:可略低于人员,但禁止长时间饿死。
  3. 设备外观:绝缘子/鸟巢/异物 — 可隔帧或巡检式。
  4. 预览/OSD 编码:最先降或关掉非必要编码。

3. 背压:有界队列 · 丢帧保推理 · 断流重连

3.1 队列水位(建议默认)

队列 容量(帧) 满时策略 指标名
decode_q 2~4 / 路 丢最旧(live);记 drop_decode 防 jitter 堆积
infer_q 2~4 全局或 /worker 丢最旧保推理;绝不阻塞解码回调过久 drop_infer
track_q 4~8 丢最旧;跟踪用上一状态外推 drop_track
event_q 64~256 事件 见 MQTT 手册:先丢 telemetry/frames,保 events drop_event、mqtt_q_depth
snapshot_q 8~16 丢最旧 JPEG;对象存储异步 drop_snap

硬规则:任一队列 禁止无界;push 失败只打点,不得 sleep 在解码/NPU 线程等待 MQTT。

3.2 背压联动伪策略

if npu_util > 90% or infer_q > high_watermark for 3s:
    reduce infer_fps on lowest-priority cameras by 1 step
if soc_temp > T_warn:
    disable OSD encode; then cut C-group streams
if mqtt_q_depth > 80%:
    drop telemetry/frames; keep events; never block infer

3.3 断流重连

项 建议
传输 RTSP TCP(protocols=tcp);UDP 仅实验室
超时 latency 200~800 ms 量级起调;读超时后标记 cam_state=DOWN
退避 重连间隔 1s → 2s → 5s → 10s,封顶 30s;成功后复位
健康 每路 last_frame_ts;>3 s 无帧 → 重建 demux/decoder(勿只重连 socket)
会话 摄像机踢流/改密后需运维 cmd 热更新 URL;密钥走 vault,不进明文配置仓
事件 可选上送 CAMERA_STREAM_LOSS(运维类);禁止当保护遥信

DeepStream 侧关注 rtsp-reconnect-* 类配置与版本差异;RK/FFmpeg 自管 watchdog 线程。验收:拔网线 5 min 再插,该路恢复且 其他路 FPS 跌落 ≤5%。


4. 资源监控与 telemetry 字段

对齐 MQTT .../telemetry(QoS0,可丢)与 Schema 手册;周期建议 2~5 s。

字段 类型 含义 采集提示
ts int/string 设备时区或 UTC+偏移 NTP 对齐
cpu_pct float 整机 CPU % /proc/stat
mem_pct / mem_used_mb float 内存 含 DMA/CMA 紧张时另记
npu_pct float 或数组 NPU/TPU/GPU 利用率 RK:三核分列;算能:bm-smi;Orin:tegrastats
soc_temp_c float SoC 温度 ℃ thermal_zone;满载 30 min 降频否决
fps_in / fps_infer / fps_out object per cam 入流/推理/(可选)编码 FPS 滑动 5~10 s 窗
drop_decode / drop_infer / drop_event uint 增量 背压丢帧/丢事件计数 单调计数,看板做差分
mqtt_q_depth uint 发布队列深度 与加固手册一致
cam_state map UP/DOWN/RECONNECTING 每路
model_ver string 内容哈希 / 签名仓版本 与 model.ver 一致
power_w float 可选整机功率 unknown 则省略,勿瞎填

看板告警建议:soc_temp_c 超阈、drop_infer 持续增长、fps_infer 低于档位基线 30%、任一路 DOWN>60 s。


5. 两周联调清单

第 1 周:单路 → 额定路数

Day 动作 产出
D1 定档 A/B/C;冻结 SDK(JetPack/RKNN/libsophon)与模型签名包 《基线》
D2 单路 RTSP TCP 硬解冒烟;确认 NV12/NVMM/CMM caps 日志+截帧
D3 接入 YOLO;测 单路端到端 FPS/温度(写清是否含 NMS) 基线条
D4 拆线程:decode / infer / mqtt;队列有界;杀 Broker 5 min FPS 跌落 ≤5% 记录
D5 加到档位额定路数;调降帧/ROI;记录 drop_* 多路曲线
D6–7 跟踪+一条业务规则(PPE 或闯入);事件符合 Schema 样例 JSON

第 2 周:过载 · 故障 · 验收

Day 动作 产出
D8 故意超配 +2 路,验证降级阶梯自动/半自动 降级日志
D9 单路反复断流;多路中杀一路 demux 他路稳定证明
D10 满载 30 min:温度、降频、DDR;Orin/RK 看风扇与壳温 热报告
D11 模型热更新(签名仓);错签 → MODEL_VERIFY_FAIL,推理不崩 OTA 记录
D12 telemetry 进看板;与 104 只读镜像联调(若有) 点表对照
D13–14 整理《端到端 FPS 表》进验收包;删除一切 Zoo FPS 合同表述 签字页

5.1 联调期最小配置骨架(示意)

以下为逻辑示意,字段名随 SDK 版本变化;上线前以各档官方文档钉死。

DeepStream(B 档 Orin)要点

  • 每路 [sourceN]:type=4(RTSP)或 uri;live-source 场景开 live;按需 drop-frame-interval。
  • [streammux]:batch-size 等于有效源数;batched-push-timeout 按 33~40 ms 量级起调(unknown 以实测为准)。
  • [primary-gie]:batch-size 与 mux 对齐;精度 FP16/INT8 写入《基线》,换 JetPack 必重建 .engine。
  • 消息:nvmsgconv → nvmsgbroker(MQTT);长跑关注断线重连行为,业务侧仍保留本地 event_q。

sophon-stream(C 档)要点

  • channels 列表填 RTSP URL;用 sample_interval 做源侧隔帧。
  • 前处理 / 推理 / 后处理 element 分别设 thread_number(官方 YOLO 例程常见 4-4-4 量级)。
  • 在 blank(或等价)读检测元数据 → 异步入 event_q;禁止在推理 element 内同步网络 IO。
  • 监控:bm-smi 看 TPU/设备内存;与 fps_infer 对照,避免「TPU 100% 但队列在涨」的假满载。

RK MPP + RKNN(A/B 档)要点

  • 解码回调输出 NV12(注意 stride/高度对齐)→ RGA letterbox → 三 NPU worker 轮询。
  • infer_q 全局深度 2~4;满则丢最旧。
  • 预览编码与分析争用 RGA/DDR 时,优先关 OSD 或降预览分辨率。
  • 温度:thermal_zone*;持续 >80~85 ℃ 量级应触发降级阶梯(具体阈写入机柜热设计,勿抄博客)。

5.2 常见故障速查

现象 优先排查 处置
多路后单路 FPS 雪崩 mux batch 与源数不一致;DDR 拷贝;OpenCV resize 对齐 batch;打通 DMA-BUF/BMCV;改 RGA/VPP
解码 OK、推理饿死 infer_q 过小且误用阻塞 push;worker=0 改丢帧策略;核数≥1 worker
推理 OK、告警延迟大 MQTT 同步;event_q 无界导致 GC/OOM 旁路异步;有界+丢 telemetry
一路断流拖死全进程 解码异常未隔离;共享 demux 崩溃 每路独立管线或监督重启单路
夜间误报暴涨 降帧过猛 + 跟踪 max_age 过大 调置信度/冷却;红外补光或降敏感
热降频 壳温/积灰/风扇;Orin 未换工业载板 降路数;改善导轨散热;查功率模式

6. 硬红线(否决项)

# 红线 说明
R1 Zoo / model-only FPS 不进合同 投标与验收只认目标站、含硬解+预处理+NMS 的端到端表
R2 断 MQTT 不堵推理 人为断 Broker ≥5 min,解码+推理 FPS 跌落 ≤5%;恢复无 OOM
R3 队列必须有界 禁止无限 std::queue 堆积解码帧
R4 丢帧保推理 过载时牺牲次要路/预览,不牺牲 NPU 队列死锁
R5 禁止跨保 管线事件默认 quality=suspect;不得驱动跳闸/强制联锁
R6 硬解路数 ≠ 分析路数 C 档「32 路解码」不得写成「32 路实时 YOLO」

7. 与系列文档的挂钩

主题 本文职责 详见
硬件档位 调度表 A/B/C 行 网关 BOM
粘合层元素名 DeepStream / sophon / MPP 对照 国产 IVA、GStreamer/OTA
事件与 Topic 管线只产 JSON,旁路上送 Schema、MQTT 加固
算力量级 不引用 Zoo 作承诺 板 FPS 矩阵、国产 NPU FPS
模型日更 热路径读 model_ver,不阻塞解码 签名仓 + Mender

8. 许可与引用边界

DeepStream、RKNN、Sophon SDK、GStreamer 插件等许可以各厂商 EULA/SPDX 为准,嵌入发行前过许可台账。第三方多路 Demo(GitHub/博客)FPS 仅作联调启发,不进标书数字。本文不构成性能保证。

← 变电站边缘 AI:设备台账与舰队 CMDB 手册(可执行) 首页 跨芯片统一边缘 AI 事件 Schema 与端到端验收协议模板 →