NVIDIA Jetson: GStreamer 和 openMAX(gst-omx) 插件

本文指导如何在Nvidia Jetson平台上安装和配置GStreamer,重点讲解gst-omx插件,特别是OpenMAX的视频解码器、编码器和sink,以及omxh264dec与nvarguscamerasrc的实际应用。同时提到gst-omx的现状和替代方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Nvidia 的 GPU 产品的开发工具包叫做 DeepStream,是基于 GStreamer 开发。因此,掌握 DeepStream,必须从 GStreamer 入手。先看看这货如何安装的吧!

1 安装 GStreamer-1.0

安装步骤如下:

sudo add-apt-repository universe
sudo add-apt-repository multiverse
sudo apt-get update
sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa \ gstreamer1.0-plugins-base gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \ gstreamer1.0-libav
sudo apt-get install libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev \ libgstreamer-plugins-good1.0-dev \ libgstreamer-plugins-bad1.0-dev

2 查看 GStreamer-1.0 版本

命令如下:

gst-inspect-1.0 --version

3 GStreamer 插件

GStreamer 是靠插件组合成媒体流管道的,具体介绍可以参考《GStreamer官方入门课程一览表,快速帮你找到自己需要的范例》。本文来点实际的,聊聊那些可以用在Nvidia Jetson 上的非常实用的插件。

3.1 OpenMAX 插件

OpenMax 是开放多媒体加速层(英语:Open Media Acceleration,缩写为OpenMAX),一个不需要授权、跨平台的软件抽象层,以C语言实现的软件接口,用来处理多媒体。它是由Khronos Group提出的标准,也由他们来维持,目标在于创造一个统一的接口,加速大量多媒体资料的处理。

GStreamer 提供了一组基于 OpenMAX 的插件,名字叫做 gst-omx

3.1.1 视频解码器

视频解码器说明
omxh265decOpenMAX IL H.265 Video decoder
omxh264decOpenMAX IL H.264 Video decoder
omxmpeg4videodecOpenMAX IL MPEG4 Video decoder
omxmpeg2videodecOpenMAX IL MPEG2 Video decoder
omxvp8decOpenMAX IL VP8 Video decoder
omxvp9decOpenMAX IL VP9 video decoder

3.1.2 视频编码器

视频编码器说明
omxh264encOpenMAX IL H.264/AVC video encoder
omxh265encOpenMAX IL H.265/AVC video encoder
omxvp8encOpenMAX IL VP8 video encoder (supported with NVIDIA® Jetson™ TX2/TX2i and NVIDIA® Jetson Nano™; not supported with NVIDIA® Jetson AGX Xavier™)
omxvp9encOpenMAX IL VP9 video encoder (supported with Jetson TX2 and Jetson AGX Xavier; not supported with Jetson Nano)

3.1.3 sink

视频 Sink说明
nvoverlaysinkOpenMAX IL videosink element

我写了个例子,可以获取 Nvidia Nona 上的 CSI 接口摄像头的视频信息,用 omxh264enc 编码,然后再用 omxh264dec 解码,最后送屏幕显示。

gst-launch-1.0  nvarguscamerasrc ! omxh264enc ! h264parse ! omxh264dec ! autovideosink

其中 nvarguscamerasrc(摄像头数据捕获) 、h264parse(h.264编码解析) 后面会继续介绍。如果您对 gst-launch-1.0 和其后面的管道配置参数不熟悉,请参考《深入浅出,快速弄明白 gst-launch-1.0 PIPELINE-DESCRIPTION 管道描述语法》。

3.1.5 gst-omx 不再被推荐使用

然而,Nvidia 的官方说明宣布,Linux for Tegra (L4T) Release 32.1 不推荐使用 gst-omx

我搜了一下,发现还有一个更老的版本叫做 gst-openmax。如果那位朋友晓得 L4T 不推荐它的原因,可以给我留言。

关于 Tegra
2008年2月,早已敏锐洞察到了移动互联网市场的潜力的NVIDIA非常令人震惊的向业界发布了旗下一款重量级跨界产品——。
Tegra是一种采用单片机系统设计(system-on-a-chip)芯片,它集成了ARM架构处理器和NVIDIA的GeforceGPU,并内置了其它功能,产品主要面向小型设备。和Intel以PC为起点的x86架构相比,ARM架构的Tegra更像是以手机处理器为起点做出的发展。它不能运行x86 PC上的Windows XP等操作系统,但在手机上应用多年的ARM架构轻量级操作系统更能适应它高速低功耗的需求。
品牌推广编辑 播报
为了更好地在中国地区开展NVIDIA(英伟达™)的品牌推广活动,使NVIDIA(英伟达™)产品在中国地区更加深入人心并被广泛记忆,从2009年11月30日起,NVIDIA(英伟达™)Tegra™正式在中国启用中文名--“图睿™”。“NVIDIA(英伟达™)Tegra™(图睿™)”的中英文组合名称,被使用于所有的NVIDIA(英伟达™)公关、销售及其他宣传材料中,以及NVIDIA(英伟达™)合作伙伴的公关、销售及其他宣传材料中。“图睿™”须与“Tegra™”英文名称组合使用,不可以单独使用,且顺序不可以颠倒,即“Tegra™”在前,“图睿™”在后。


有关更多的信息请看后续文章… …

### 解决NVIDIA Jetson GStreamer gst-launch-1.0 RTSP转MP4录制不播放的问题 在处理NVIDIA Jetson平台上使用GStreamer通过`gst-launch-1.0`命令将RTSP流转换并保存为MP4文件遇到无法播放的情况时,有几个方面需要注意。 #### 安装必要的GStreamer组件 为了确保所有必需的插件都已安装,在Jetson平台上应执行如下命令来安装完整的GStreamer工具集及其开发库: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install gstreamer1.0-tools gstreamer1.0-alsa \ gstreamer1.0-plugins-base gstreamer1.0-plugins-good \ gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly \ gstreamer1.0-libav libgstreamer1.0-dev \ libgstreamer-plugins-base1.0-dev \ libgstreamer-plugins-good1.0-dev \ libgstreamer-plugins-bad1.0-dev[^1] ``` #### 正确配置GST_LAUNCH-1.0管道 当尝试从RTSP源捕获视频并将其实时编码成MP4格式存储到本地磁盘时,建议采用以下结构化的pipeline设置方法。这有助于创建兼容大多数媒体播放器的标准容器格式文件: ```bash gst-launch-1.0 rtspsrc location=rtsp://<your_rtsp_stream_url> ! decodebin ! x264enc tune=zerolatency bitrate=<desired_bitrate_in_kbps> ! mp4mux fragment-duration=5 ! filesink location=output.mp4 ``` 这里的关键点在于选择了合适的编解码器(`x264enc`)以及多路复用器(`mp4mux`),并且设置了合理的参数以适应不同的应用场景需求。特别是对于移动设备上的回放优化,可以通过调整比特率(bitrate)其他选项获得更好的体验效果。 另外值得注意的是,如果目标是生成分片式的MP4文件以便于后续在线传输或即时观看,则可以在上述基础上进一步指定更短的时间间隔来进行片段划分操作,比如上面例子中的`fragment-duration=5`表示每五秒切分为一个新的片段。 #### 验证输出文件的有效性 完成录制之后,可以利用FFmpeg或其他第三方软件检查生成的MP4文件是否具有正确的元数据标签索引表项。有时即使看起来正常的视频也可能因为缺少这些信息而导致某些特定类型的播放程序读取失败。修复这类问题的一个简单方式就是重新封装一次而不改变原始内容本身: ```bash ffmpeg -i output.mp4 -c copy fixed_output.mp4 ``` 此过程不会影响音画质量,仅是对内部结构进行了整理优化,从而提高了与其他应用程序之间的互操作性稳定性。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

许野平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值