Gstreamer系列(5):Gstreamer在arm平台(Nano, Orin, Xavier等)使用硬编码对视频进行保存mp4,推拉流

        在工程实践中,通常使用使用英伟达版板卡作为图像处理的控制器,常见的有xavier, TX2, orin,Nano等,这些控制器使用Gstreamer进行硬件编码的插件通常为omxh264enc, nvv4l2h264enc。本文将基于这两个插件进行介绍区别,并给出使用示例本。本系列其他文章有:

Gstreamer系列(1):linux平台下的gstreamer安装-CSDN博客

Gstreamer系列(2):gstreamer的视频编解码及不同平台编解码插件_gstreamer硬件编解码花屏-CSDN博客Gstreamer系列(3):ubuntu18.04, ubuntu20.04在x86平台Nvidia显卡的Gstreamer硬件编解码安装-CSDN博客

 Gstreamer系列(4):Gstreamer在x86平台使用硬编码对视频进行保存mp4,推拉流-CSDN博客

        omxh264enc 和 nvv4l2h264enc 都是 GStreamer 中用于 H.264 硬编码的插件,但它们针对不同的硬件平台和驱动架构。以下是它们的主要区别:

1. 硬件平台

  • omxh264enc和omxh264dec
    • 主要用于基于 ARM 架构的设备,如 NVIDIA Jetson 系列(如 Jetson TX1, TX2, Nano, Xavier)。
    • 使用 OpenMAX IL (OMX) 接口进行硬件编码。
  • nvv4l2h264enc和nvv4l2decoder
    • 主要用于基于 NVIDIA GPU 较新的设备,如orin,或者之前Nvidia板卡系统更新后。
    • 使用 V4L2 (Video for Linux 2) 接口进行硬件编码。

2. 驱动架构

  • omxh264enc和omxh264dec
    • 依赖于 OpenMAX IL (OMX) 驱动,这是一个跨平台的接口,用于与硬件加速器进行通信。
    • OMX 接口在某些设备上可能已经被弃用或不再更新。
  • nvv4l2h264enc和nvv4l2decoder
    • 依赖于 V4L2 (Video for Linux 2) 驱动,这是一个更通用的接口,广泛用于 Linux 系统中的视频处理。
    • V4L2 接口在 NVIDIA 设备上提供了更现代的硬件加速支持。

3. 性能和功能

  • omxh264enc和omxh264dec
    • 在某些旧的 NVIDIA Jetson 设备上可能性能较好,但在新的设备上可能不如 nvv4l2h264enc。
    • 功能相对简单,支持的编码参数较少。
  • nvv4l2h264enc和nvv4l2decoder
    • 在新的 NVIDIA Jetson 设备上性能更好,支持更多的编码参数和高级功能。
    • 提供了更多的控制选项,如比特率控制、GOP 大小、帧率等。

4. 兼容性

  • omxh264enc和nvv4l2decoder
    • 在某些旧的 NVIDIA Jetson 设备上可能更稳定,但在新的设备上可能不如 gst-v4l2 稳定。
  • nvv4l2h264enc和nvv4l2decoder
    • 在新的 NVIDIA Jetson 设备上更稳定,且兼容性更好。

5. 终端命令

5.1 gst-omx

# 采集摄像头播放
gst-launch-1.0 -ve v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2,width=640,height=480,framerate=30/1" !  autovideosink

# omxh264enc    保存mp4
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2,width=640,height=480,framerate=30/1" ! videoconvert ! omxh264enc ! h264parse ! qtmux  ! filesink  location=test.mp4 -e

# omx264enc    rtp推流
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2,width=640,height=480,framerate=30/1" ! videoconvert ! omxh264enc ! ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234

# avdec_h264软解码拉流
gst-launch-1.0 udpsrc port=7777 buffer-size=60000000 caps="application/x-rtp,media=video, clock-rate=90000,payload=96, encoding-name=H264" ! rtpjitterbuffer latency=7 ! rtph264depay  ! h264parse ! avdec_h264 ! videoconvert !  autovideosink  

# omxh264dec拉流
gst-launch-1.0 udpsrc port=7777 buffer-size=60000000 caps="application/x-rtp,media=video, clock-rate=90000,payload=96, encoding-name=H264" ! rtpjitterbuffer latency=7 ! rtph264depay ! h264parse ! omxh264dec ! videoconvert !  autovideosink  

5.2 gst-v4l2

# 采集摄像头播放
gst-launch-1.0 -ve v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2,width=640,height=480,framerate=30/1" !  autovideosink

# nvv4l2h264enc 保存mp4
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2,width=640,height=480,framerate=30/1" ! videoconvert ! nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! nvv4l2h264enc ! h264parse ! qtmux  ! filesink  location=test.mp4 -e

# nvv4l2h264enc rtp推流
gst-launch-1.0 v4l2src device=/dev/video0 ! "video/x-raw, format=YUY2,width=640,height=480,framerate=30/1" ! videoconvert ! nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! nvv4l2h264enc ! h264parse ! rtph264pay ! udpsink host=127.0.0.1 port=1234

# avdec_h264软解码拉流
gst-launch-1.0 udpsrc port=7777 buffer-size=60000000 caps="application/x-rtp,media=video, clock-rate=90000,payload=96, encoding-name=H264" ! rtpjitterbuffer latency=7 ! rtph264depay  ! h264parse ! avdec_h264 ! videoconvert !  autovideosink  

# nvv4l2decoder拉流
gst-launch-1.0 udpsrc port=7777 buffer-size=60000000 caps="application/x-rtp,media=video, clock-rate=90000,payload=96, encoding-name=H264" ! rtpjitterbuffer latency=7 ! rtph264depay ! queue  ! h264parse ! nvv4l2decoder ! nv3dsink -e 
 

6. 总结

在工程实践中,NVIDIA Jetson 系列板卡(如 Xavier, TX2, Orin, Nano 等)常用于图像处理,GStreamer 提供了 omxh264enc 和 nvv4l2h264enc 两个硬件编码插件。omxh264enc 主要用于基于 ARM 架构的旧设备,使用 OpenMAX IL (OMX) 接口,性能较好但功能简单,支持的编码参数较少。nvv4l2h264enc 则用于较新的设备,使用 V4L2 接口,性能更优,支持更多编码参数和高级功能,如比特率控制、GOP 大小、帧率等。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

袁本美

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

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

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

打赏作者

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

抵扣说明:

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

余额充值