1. 课程导入与工程全景

在边缘侧同时接入多路摄像头,并对每一路视频做解码、推理、跟踪、事件判断和结果输出,是智能安防、智慧交通、工业质检、零售分析等场景的共同需求。Jetson 系列嵌入式 AI 计算平台具备低功耗、体积小、GPU 与硬件编解码器集成的特点,而 NVIDIA DeepStream SDK 则把 GStreamer 管线、TensorRT 推理、NVDEC/NVENC 硬件编解码、多路流管理与消息传递整合为可工程化的框架。本课程的目标,是让学习者能够独立完成一个可运行、可扩展、可观测的 Jetson DeepStream 多路视频分析工程,而不是停留在单路 demo 或零散 API 调用层面。

一、工程目标与典型场景

本课程最终交付的工程,应满足以下可验证目标:在 Jetson 设备上稳定接入 4~16 路 RTSP 或本地视频源;使用硬件解码降低 CPU 占用;通过 TensorRT 执行目标检测推理;对检测结果做跟踪与越界、计数等业务判断;将结构化结果通过消息代理或文件输出;并提供运行状态与性能指标。典型场景包括:园区周界多路入侵检测、路口多路车辆与行人统计、产线多工位缺陷检测、门店多区域客流分析。这些场景的共同点是“多路并发 + 实时性 + 边缘部署”,也正是 DeepStream 相对通用推理框架的优势所在。

二、技术栈边界

理解技术栈边界,能避免把不属于本课程的问题误当成 DeepStream 问题。整体分层如下:底层是 Jetson 硬件与 JetPack(含 L4T、CUDA、TensorRT、驱动);中间是 DeepStream SDK,负责管线编排、硬件编解码、推理插件、跟踪与消息转换;上层是业务应用,负责事件规则、结果存储、告警与可视化。需要明确的边界包括:DeepStream 不负责模型训练,模型需先用 TAO、PyTorch 等训练并导出为 ONNX 或 TensorRT 引擎;DeepStream 不替代业务规则引擎,越界、计数等逻辑通常由上层或自定义插件实现;RTSP 网络质量、摄像头编码格式属于外部输入条件,需在接入前确认。

Jetson DeepStream 多路视频分析工程全景 视频输入 RTSP 摄像头 H.264 / H.265 本地视频文件 MP4 / MKV USB / CSI 相机 MIPI / V4L2 多路并发 4~16 路 DeepStream 管线(GStreamer) 流接入 nvurisrcbin 硬件解码 NVDEC 批处理 nvstreammux 推理 nvinfer / TensorRT 跟踪 nvtracker 消息转换 nvmsgconv OSD 叠加 nvdsosd 编码输出 NVENC 消息代理 nvmsgbroker 业务输出 结构化事件 JSON / Kafka 告警与联动 越界 / 计数 视频存储 RTSP / 文件 性能指标 FPS / 延迟 / GPU JetPack(L4T + CUDA + TensorRT + 驱动)为底层运行环境;模型训练在外部完成,DeepStream 负责推理与管线编排

三、学习路径

建议按“环境—单路—多路—业务—优化”的顺序推进。第一步,在 Jetson 上刷写 JetPack,确认 CUDA、TensorRT、DeepStream 版本匹配,运行 deepstream-app 自带样例,验证硬件解码与推理可用。第二步,用单路 RTSP 跑通完整管线,理解 nvurisrcbin、nvstreammux、nvinfer、nvtracker、nvmsgconv 的职责与连接关系。第三步,扩展到多路,重点观察 nvstreammux 的 batch-size、width、height、batched-push-timeout 对吞吐与延迟的影响。第四步,加入业务规则与消息输出,形成事件闭环。第五步,做性能剖析与调优,包括分辨率、批大小、模型精度、跟踪器选择等。

四、最终交付物

课程结束时,应交付一个可复现的工程目录,包含:DeepStream 配置文件(如 deepstream_app_config.txt 或 YAML)、模型与标签文件、自定义插件或业务逻辑代码、启动脚本、日志与性能采集脚本、以及一份运行说明。工程应能在目标 Jetson 设备上通过一条命令启动,并在多路输入下稳定运行,输出结构化事件与可视化画面。

本课程强调“可运行、可观测、可复现”。每个阶段都应有明确的验证方式:单路看画面与日志,多路看 FPS 与 GPU 占用,业务看事件是否正确触发,优化看延迟与吞吐是否改善。

五、关键参数与判断依据(示例)

以下参数为教学示例,实际值需根据设备型号、模型和路数调整。假设在 Jetson Orin NX 16GB 上接入 8 路 1080p@25fps H.264 视频,使用 YOLOv8s 检测模型,可先设置:nvstreammux 的 batch-size=8,width=1920,height=1080,batched-push-timeout=40000(微秒);nvinfer 的 interval=0(每帧推理),若 GPU 吃紧可改为 1 或 2;nvtracker 选用 NvDCF 或 IOU。判断依据:用 nvidia-smi 或 tegrastats 观察 GPU 利用率,若持续接近 100% 且 FPS 低于输入帧率,说明推理或解码成为瓶颈,应降低输入分辨率、增大 interval 或减少路数。若延迟明显增大,检查 batched-push-timeout 是否过大,以及是否出现丢帧日志。

# 示例:查看 Jetson 运行状态
tegrastats --interval 1000

# 示例:运行 DeepStream 应用
deepstream-app -c deepstream_app_config.txt

# 示例:查看 GPU 利用率
nvidia-smi dmon -s u

六、常见边界与排障方向

多路工程中最常见的问题并非“模型不准”,而是输入与资源问题。RTSP 断流、编码格式不支持、网络抖动会导致管线卡住;nvstreammux 的宽高设置与输入不一致会导致缩放或报错;batch-size 大于实际路数会浪费显存,小于路数则可能丢流;TensorRT 引擎与当前 JetPack 版本不匹配会导致反序列化失败。排障时应先看日志中的 element 状态与错误码,再用 gst-launch-1.0 单独验证某一路输入,最后回到完整管线逐段排查。