設備默認自帶 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 只做邏輯,不做解碼/編碼。