3.3 KiB
H.264 推理过程录制与回灌验证(2026-09-24)
范围:按本次要求,仅修改 inference-only。测试直接在当前 orin-desktop 的 Jetson Orin 上执行;真实 /dev/video5,1920×1536 UYVY,L4T R35.4.1,CUDA 11.4,TensorRT,OpenCV 4.5.4 / FFmpeg H.264。未使用 SSH。
本机模拟与编解码回归
tests/run_session.sh:实际 H.264 编码/解码,使用人工图像及模拟结果,不加载 TensorRT。覆盖有步长的 BGR 输入、视频帧顺序、帧号间隔、配置恢复、原始时间戳保留、编码器刷新、正常 EOF、空会话、拒绝覆盖、缺失 JSON、非法/截断索引、不完整会话和奇数尺寸。启用 UBSan。tests/run_camera_timeout.sh:模拟 V4L2 采集;通过超时重试、有效帧后重新计数、第六次超时失败与主动停止回归。此项不是本次真实硬件故障恢复的证明。
真实摄像头与 TensorRT
脚本:tests/orin_session_test.py。完整数据见 orin_session_results.json。
| 项目 | 结果 |
|---|---|
| 摄像头录制 | 13 个完成推理的帧,H.264 / MP4,1920×1536 |
| 视频体积 | 303,989 字节;同帧数未压缩 BGR 为 115,015,680 字节,约缩小 378 倍,仅代表本次静态场景 |
| 完整回灌 | 13/13 帧,顺序与原帧号一致,原始采集元数据保留,EOF 正常退出 |
| 结果检查 | 13/13 跟踪 ID 与风险决策一致;本次无检测到的人员 |
| 录制期间 SIGTERM | 1.417 秒完整退出,视频封装成功 |
| 回灌期间 SIGINT | 0.865 秒完整退出,保存 2 帧后停止,视频封装成功 |
| 实际运行程序核对 | /proc/<pid>/exe 与源码构建二进制 SHA256 相同 |
实机首次测试发现:若在 CameraPipeline 构造期间打开视频解码器,FFmpeg 工作线程可能在 StopSignals 安装前创建,SIGINT 可直接终止进程。已将解码器打开操作移至继承信号掩码的采集线程,修复后重跑上述实机测试全部通过。
测试前没有 camera_risk 进程,未更改既有启动参数;测试脚本仅管理自己启动的进程,测试后不留下常驻进程。原始视频、逐帧记录与日志在 /tmp/vap-video-session-hardware-20260924-fixed/,不提交摄像头图像。
板端故障注入与范围限制
本次未做板端 V4L2 故障注入或物理拔线操作;共享相机恢复实现保持原样,其既有硬件报告见 ORIN_TEST_REPORT.md,不能视作本次新增功能的实测覆盖。当前实机画面没有检测到人员,RTMW 完成初始化/预热,但未覆盖有人员的逐帧姿态推理、遮挡隔离推理或风险变化;报告中的关键点差异为 0 不代表有人员场景的精度结论。
未覆盖 GUI 预览、GPU 故障、磁盘写满、断电/强杀后的媒体恢复、长时间录制与 NVENC/NVDEC 硬件编解码。当前为软件 H.264 编解码;强杀留下的未完成会话按设计拒绝回灌。
经测试的程序 SHA256
0f178057529eb8be44bb9a639504dfe57a1e353a84d2351fd907304f6d951c11
独立包 orin/build/camera_risk 已更新,orin/SHA256SUMS 全部校验通过。使用独立包实际运行并完整回灌 13 帧,再次核对 /proc/<pid>/exe 与上述哈希一致;部署检查日志位于 /tmp/vap-video-session-deployment-20260924/。测试结束恢复原来的无常驻进程状态。