设备默认自带 NVIDIA 硬件编解码能力(NVDEC/NVENC),但是需要你在 OpenCV 和 FFmpeg 里正确启用 + 调通 GStreamer 或 nvmpi,才真正能用起来!
这里的硬解码是核心:
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=ON
且WITH_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=ON
和 WITH_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-server
或 mediamtx
🚦 一句话:
Jetson NX 在 JetPack 4.5 下,最稳的组合就是:GStreamer 负责硬解码 + 硬编码,OpenCV 只做逻辑,不做解码/编码。