AGX Xavier 搭建360环视教程【一、先确认方案】

设备默认自带 NVIDIA 硬件编解码 能力(NVDEC /NVENC ),但是需要你在 OpenCVFFmpeg 里正确启用 + 调通 GStreamernvmpi,才真正能用起来!

这里的硬解码是核心:

Jetson 平台的硬解码,要么走 GStreamer(nvv4l2)要么走 RidgeRun 的 nvmpi(FFmpeg 插件),否则就只能 CPU 软解。

推荐的技术路线(实战稳定)

【1】 RTSP → GPU 硬解(输入)

选项 1:GStreamer nvv4l2(官方推荐)

复制代码
gst-launch-1.0 rtspsrc location=rtsp://... ! rtph264depay ! h264parse ! nvv4l2decoder ! nvvidconv ! appsink

然后在 OpenCV 中用

复制代码
 cv::VideoCapture("your_pipeline", cv::CAP_GSTREAMER)

直接拿到。

选项 2:FFmpeg + nvmpi

如果GStreamer 用不了(极少数),就自己编 nvmpi + FFmpeg。


【2】 remap + 拼接(处理)

  • 保留 OpenCV remap

  • 若想用 GPU 做 remap ,需要用OpenCV CUDA 模块cv::cuda::remap),

    但要编译时 WITH_CUDA=ONWITH_CUBLAS=ON


【3】 拼接后 → RTSP 推流(输出)

✅ 用 FFmpeg 的 libx264(CPU 编码) → ffmpeg -f rawvideo -pix_fmt bgr24 -i pipe:0 ...

✅ 用 GStreamer**nvvidconv + nvv4l2h264enc**(GPU 编码)→ RTSP server


⚡ 必须重装的组件

1️⃣ OpenCV 必须重新编译

复制代码
cmake \
-D CMAKE_BUILD_TYPE=Release \
-D CMAKE_INSTALL_PREFIX=/usr/local \
-D WITH_CUDA=ON \
-D WITH_CUDNN=ON \
-D WITH_GSTREAMER=ON \
-D WITH_TBB=ON \
-D WITH_OPENGL=ON \
-D BUILD_opencv_python2=OFF \
-D BUILD_opencv_python3=ON \
-D BUILD_TESTS=OFF \
-D BUILD_EXAMPLES=OFF \
..

🚩 一定要确认 WITH_GSTREAMER=ONWITH_CUDA=ON

2️⃣ FFmpeg(可选)

如果你走 nvmpi 路线,要重新编译 FFmpeg:

复制代码
./configure --enable-nonfree --enable-nvmpi --enable-shared ...

🎯 推荐实战路线(总结)

✅ 1)输入 → GStreamer(nvv4l2)GPU 硬解 → OpenCV VideoCapture

✅ 2)处理 → OpenCV CUDA(可选)做 remap → 拼接

✅ 3)输出 → 用 FFmpeg/GStreamer nvv4l2h264enc 硬编码 → rtsp-simple-servermediamtx


🚦 一句话:

Jetson NX 在 JetPack 4.5 下,最稳的组合就是:GStreamer 负责硬解码 + 硬编码,OpenCV 只做逻辑,不做解码/编码。



ffmpeg编译安装时容易碰到问题。

✅ 1️⃣ 「解码 → 畸变矫正 → 拼接」阶段

这个阶段:

  • GStreamer + nvv4l2decoder:GPU 硬解码

  • OpenCV CUDA remap:GPU 做 map1/map2 畸变矫正

  • OpenCV 拼接、叠车图、组合画面

这一步,确实是纯 GStreamer + OpenCV CUDA,不需要 FFmpeg 来 解码


✅ 2️⃣ 「结果视频流 → 通过 RTSP 发布」阶段

这里就有 2 种常见选择:

  • 选项 A:用 FFmpeg(popen)把拼接后图像写到 stdin,然后推给 RTSP 服务端

    • 简单粗暴,依赖 FFmpeg 做推流 mux+encode

    • 已经在你的 main.cpp 里用了

    • 优点:最容易落地,FFmpeg 支持推 RTSP、RTMP 都稳

    • 缺点:FFmpeg 在 Jetson 上如果没启用硬编(nvenc),那还是 CPU 做 H.264 编码

  • 选项 B:全链路用 GStreamer 推流

    • GStreamer 可以用 appsrc 把你 CPU/GPU 的拼接帧丢回管道,然后 nvvidconv + nvv4l2h264enc 做 GPU 编码,rtspclientsink 或 rtpbin/udpsink 做流化。

    • 优点 :全流程硬编(nvv4l2h264enc),CPU 压力最低

    • 缺点 :写 C++ GStreamer appsrc 需要自己维护 GstPipelineGstAppSrc、buffer push,写起来比 popen(ffmpeg) 要麻烦不少,且需要调试好 RTSP session


所以:

  • 之前说 「不用 FFmpeg」 是指:「解码阶段不用 FFmpeg」,因为 GStreamer 已经硬解码了。

  • 如果要纯 GStreamer 全链路 ,就要把 FFmpeg popen 部分换成 GStreamer 的 appsrc + nvv4l2h264enc + rtspclientsink



✅ 1️⃣ 【方案 A】直接用 GStreamer 拉取 RTSP + nvv4l2decoder

流程

复制代码

scss

复制编辑

(海康摄像头 RTSP) → GStreamer → rtspsrc → rtph264depay → nvv4l2decoder → CUDA Mat

  • RTSP 协议是海康自带的。

  • GStreamer 自带 rtspsrc 可以直接拉流。

  • Jetson 的 nvv4l2decoder 是最成熟的硬件解码插件,稳定高效。

  • 后续直接转成 cv::cuda::GpuMat 处理 remap,拼接也走 CUDA。

优点

  • 简单、干净,完全不依赖厂商 SDK(HCNetSDK)

  • 全硬件解码,零 CPU 开销

  • 最好调试,最多人用,资料多

  • 维护成本低

缺点

  • 需要网络 RTSP 稳定(丢包要注意)

  • 如果摄像头不是 RTSP 输出,而是专有协议,则必须 SDK


✅ 2️⃣ 【方案 B】海康 SDK (HCNetSDK)+ PlayM4 软解码

流程

复制代码

scss

复制编辑

(海康摄像头) → HCNetSDK → PlayM4 → YUV → OpenCV

  • 走海康私有协议(比如海康的 PS 流、专用登录等)。

  • PlayM4 一般只能软解码(除非用自研插件配合硬解码)。

  • 你要自己维护多路 SDK 线程、缓冲、丢帧逻辑。

优点

  • 如果 RTSP 不稳定(比如公网)、或者要高级控制(云台、录像调度),必须用 SDK。

  • 一些场景下比纯 RTSP 更可控。

缺点

  • PlayM4 不支持硬解码,CPU 压力大。

  • 要自己拼接 OpenCV 流程。

  • 移植麻烦,Jetson 也没专门的 ARM64 优化。

  • 不支持 GStreamer pipeline。


✅ 3️⃣ 【方案 C】工业场景高阶方案:ONVIF 或 RTSP + 边缘推流器

还有人会:

  • 在相机侧用边缘设备先拉流 → 本地转码(GStreamer/FFmpeg)→ 统一推给 RTSP 服务端 → Jetson 从统一 RTSP 拉。

  • 这样可以做转码(例如把所有流转成相同分辨率/码率),稳定性最好。


✅ 4️⃣ 【最佳实践:实际生产怎么选?】

1️⃣ 若摄像头支持 RTSP(海康都支持) → 优先选 GStreamer + rtspsrc + nvv4l2decoder

2️⃣ 若要跨公网 + 要登录控制 + 云台 + 录像 → 用海康 SDK 但只能软解(除非自己改)

3️⃣ 若要极致可控 → 相机接入侧加推流器(或者 NVR 先做聚合)


🔑 结论

环视、低延时、单机 Jetson:一定优先直接 RTSP + GStreamer + nvv4l2decoder!

  • 最少依赖,最少功耗,GPU 干活,CPU 只拼接。

  • SDK 只在需要云台控制或特殊功能时使用。

✅ 【GStreamer 多路 RTSP 拉流 + nvv4l2decoder 硬解码 → CUDA remap → 拼接 → appsrc 回推 RTSP】的 全套 Jetson 版 C++。

相关推荐
free-elcmacom10 分钟前
机器学习高阶教程<6>推荐系统高阶修炼手册:混排、多任务与在线学习,解锁精准推荐新境界
人工智能·python·学习·算法·机器学习·机器人
qdprobot21 分钟前
齐护机器人AiTallpro小智AI图形化编程Mixly Scratch MQTT MCP远程控制
人工智能·mqtt·机器人·图形化编程·ai对话·mcp·小智ai
切糕师学AI23 分钟前
钉钉Webhook机器人如何发送群消息?
机器人·自动化·钉钉
Piar1231sdafa38 分钟前
舰船目标检测与识别:基于Mask R-CNN的改进模型_x101-64x4d_fpn_ms-poly_3x_coco实战详解
目标检测·目标跟踪·cnn
才思喷涌的小书虫1 小时前
DINO-X 视觉模板挑战赛火热报名中
人工智能·目标检测·计算机视觉·ai·数据标注·图像标注·模型定制
BFT白芙堂2 小时前
Franka Research 3 进阶应用:基于神经网络的 ORACLE 交互控制策略深度解析
人工智能·深度学习·神经网络·oracle·机器人·人机交互·vr
لا معنى له7 小时前
目标检测的内涵、发展和经典模型--学习笔记
人工智能·笔记·深度学习·学习·目标检测·机器学习
Lun3866buzha11 小时前
篮球场景目标检测与定位_YOLO11-RFPN实现详解
人工智能·目标检测·计算机视觉
Dingdangcat8612 小时前
城市交通多目标检测系统:YOLO11-MAN-FasterCGLU算法优化与实战应用_3
算法·目标检测·目标跟踪
光锥智能12 小时前
以机器为中心到以人为中心,大晓机器人首创ACE具身研发范式
机器人