NVIDIA Jetson AGX设备gst-play/gst-launch无法播放RTSP流求助
在Jetson AGX上使用GStreamer播放RTSP流失败的排查与解决思路
问题概述
在NVIDIA Jetson AGX设备上使用gst-play-1.0和gst-launch-1.0播放RTSP流时均失败,但相同RTSP流在搭载Ubuntu 20.04、GStreamer 1.16.3的x86电脑上可正常播放,说明流本身无问题。
RTSP流常用URL格式:
rtsp://192.168.1.xxx:8554/main.264 rtsp://username:password@192.168.1.xxx:554
已尝试的命令及现象
1. 使用gst-play-1.0
命令:
$ gst-play-1.0 rtsp://192.168.1.xxx:8554/main.264
终端卡住输出:
Press 'k' to see a list of keyboard shortcuts. Now playing rtsp://192.168.1.xxx:8554/main.264 Pipeline is live. Opening in BLOCKING MODE NvMMLiteOpen : Block : BlockType = 261 NVMEDIA: Reading vendor.tegra.display-size : status: 6 NvMMLiteBlockCreate : Block : BlockType = 261 Prerolled.
2. 使用gst-launch-1.0初始尝试
命令:
$ gst-launch-1.0 rtspsrc location=rtsp://192.168.1.xxx:8554/main.264 latency=0 buffer-mode=auto ! queue ! rtph264depay ! h264parse ! avdec_h264 ! videoconvert ! videoscale ! video/x-raw,width=1920,height=1080 ! autovideosink
终端卡住输出:
Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Progress: (open) Opening Stream Progress: (connect) Connecting to rtsp://192.168.1.xxx:8554/main.264 Progress: (open) Retrieving server options Progress: (open) Retrieving media info Progress: (request) SETUP stream 0 Progress: (open) Opened Stream Setting pipeline to PLAYING ... New clock: GstSystemClock Progress: (request) Sending PLAY request Progress: (request) Sending PLAY request Progress: (request) Sent PLAY request
按Ctrl+C后的输出:
^Chandling interrupt. Interrupt: Stopping pipeline ... Execution ended after 0:00:02.188911578 Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
设备信息
- L4T 32.6.1 [JetPack 4.6]
- Ubuntu 18.04.6 LTS
- Kernel Version: 4.9.253-tegra
- GStreamer 1.14.5
- CUDA 10.2.300
- OpenCV 4.1.1(无CUDA支持)
- CUDNN 8.2.1.32
- TensorRT 8.0.1.6
补充测试结果
尝试硬件加速命令
使用Jetson专用硬件加速元素的命令:
gst-launch-1.0 rtspsrc location=rtsp://username:password@192.168.1.xxx:554 latency=500 ! queue ! rtph264depay ! h264parse ! nvv4l2decoder ! nvvidconv ! 'video/x-raw(memory:NVMM),width=1920,height=1080' ! nvvidconv ! autovideosink
终端输出:
Setting pipeline to PAUSED ... Opening in BLOCKING MODE Pipeline is live and does not need PREROLL ... Progress: (open) Opening Stream Progress: (connect) Connecting to rtsp://username:password@192.168.1.xxx:554 Progress: (open) Retrieving server options Progress: (open) Retrieving media info Progress: (request) SETUP stream 0 Progress: (open) Opened Stream Setting pipeline to PLAYING ... New clock: GstSystemClock Progress: (request) Sending PLAY request Progress: (request) Sending PLAY request Progress: (request) Sent PLAY request NvMMLiteOpen : Block : BlockType = 261 NVMEDIA: Reading vendor.tegra.display-size : status: 6 NvMMLiteBlockCreate : Block : BlockType = 261 (gst-launch-1.0:14920): GStreamer-CRITICAL **: 21:59:35.771: gst_mini_object_unref: assertion 'mini_object != NULL' failed NvMMLiteOpen : Block : BlockType = 261 NVMEDIA: Reading vendor.tegra.display-size : status: 6 NvMMLiteBlockCreate : Block : BlockType = 261
使用gst-discoverer-1.0检测流
命令:
gst-discoverer-1.0 rtsp://username:password@192.168.1.xxx:554
输出:
Analyzing rtsp://username:password@192.168.1.xxx:554 Opening in BLOCKING MODE NvMMLiteOpen : Block : BlockType = 261 NVMEDIA: Reading vendor.tegra.display-size : status: 6 NvMMLiteBlockCreate : Block : BlockType = 261 Done discovering rtsp://username:password@192.168.1.xxx:554 Topology: unknown: application/x-rtp video: H.264 (Main Profile) Properties: Duration: 99:99:99.999999999 Seekable: no Live: yes Tags: video codec: H.264 (Main Profile)
解决思路
替换为Jetson专用渲染器
用nveglglessink替代autovideosink,这是JetPack原生支持的硬件加速显示元素,能避免显示适配问题:gst-launch-1.0 rtspsrc location=rtsp://username:password@192.168.1.xxx:554 latency=1000 ! queue ! rtph264depay ! h264parse ! nvv4l2decoder ! nvvidconv ! nveglglessink sync=false修复显示环境变量
针对NVMEDIA: Reading vendor.tegra.display-size : status: 6警告,设置显示环境变量:export DISPLAY=:0 export GST_GL_WINDOW=egl再重新运行播放命令。
优化RTSP流参数
- 调高
latency值到1000-2000ms,适配网络延迟 - 启用RTSP重传机制,添加
do-retransmission=true参数:gst-launch-1.0 rtspsrc location=rtsp://username:password@192.168.1.xxx:554 latency=2000 do-retransmission=true ! queue ! rtph264depay ! h264parse ! nvv4l2decoder ! nvvidconv ! nveglglessink
- 调高
验证硬件解码功能
播放本地H264文件,确认nvv4l2decoder等硬件插件正常工作:gst-launch-1.0 filesrc location=test.h264 ! h264parse ! nvv4l2decoder ! nveglglessink若本地播放正常,说明问题集中在RTSP流的网络传输环节。
更新GStreamer插件
安装缺失的插件包,确保RTSP和H264处理组件完整:sudo apt-get install gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav
内容的提问来源于stack exchange,提问作者9friday
相关产品推荐
相关产品推荐

