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

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

时间:2024-10-16 18:21:15浏览次数:10  
标签:1.0 gst Nano launch Gstreamer omxh264enc mp4 video nvv4l2h264enc

        在工程实践中,通常使用使用英伟达版板卡作为图像处理的控制器,常见的有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 大小、帧率等。

标签:1.0,gst,Nano,launch,Gstreamer,omxh264enc,mp4,video,nvv4l2h264enc
From: https://blog.csdn.net/qq_27897937/article/details/142961892

相关文章

  • python+flask框架的 基于Java的外卖系统设计与实现 前台mp48(开题+程序+论文) 计算机
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着互联网技术的飞速发展,外卖服务已成为人们日常生活中不可或缺的一部分。关于外卖系统的研究,现有研究主要以技术实现和用户体验优化为主......
  • python+flask框架的 基于Java的外卖系统设计与实现前台mp48(开题+程序+论文) 计算机毕
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着互联网的快速发展和人们生活节奏的加快,外卖服务已成为现代都市生活中不可或缺的一部分。关于外卖系统的研究,现有研究主要以技术实现和......
  • Stanford CS149 -- Assignment 4: NanoGPT149
    作业描述及代码参见:cs149gptWarm-Up:访问张量张量/数组都是按行存储的,四维数组可以看作元素为三维数组的数组,元素大小即为三维数组内元素总数,以此类推。第1部分:简单(但不太高效)的注意力机制实现主要实现两个矩阵乘法和一个softmax运算。第2部分:块矩阵乘法和UnfusedSof......
  • Linux 之 nano 编辑器
    使用git提交的时候,发生冲突或要记录相关信息时会弹出nano这个编辑器。nano[选项][[+行,列]文件名]...nano[必要参数][选择参数][文件]命令行白的部分是组合键,后面的则是该组合键的功能。指数符号(^)代表的是键盘的[ctrl]按键,(M)表示Alt键。[Ctrl]-G:取得在线帮助(hel......
  • Arduino Nano点灯
    1、选开发板2、选芯片3、选端口4、编程器选项5、打开例程6、编译7、上传代码8、LED接法:9、实物10、I/O图 ......
  • Python实践——实现视频.mp4转图片.jpg(可成功实现)
    代码......
  • 基于SpringBoot+Vue的中山社区医疗综合服务平台系统+万字论文+Mp4演示
    系统简介:基于SpringBoot+Vue的中山社区医疗综合服务平台系统+万字论文+Mp4演示资源描述:是否有万字论文:有是否有论文视频:有是否有PPT:没有是否有Mp4演示:有是否有演示站:有是否前后端分离:是技术栈:Java:JDK8主要编程语言,用于后端开发MySQL:数据库管......
  • Arduino Nano制作
    1、硬件原理图:2、相关文件路径:boards.txt(包含熔丝位及相关文件的名称信息)路径:D:\arduino-1.85\hardware\arduino\avrATmegaBOOT_168_atmega328.hex路径:D:\应用软件\arduino-1.85\hardware\arduino\avr\bootloaders\atmega3、读取芯片ID:4、进入熔丝位配置:5、设置熔丝位:bo......
  • Gstreamer系列(2):gstreamer的视频编解码及不同平台编解码插件
    GStreamer是一个强大的多媒体框架,可以用于视频编码、解码和处理。视频编码的基础知识涉及到如何将原始视频数据转换为压缩格式以便于存储和传输。在GStreamer中,视频编码可以通过软编码(软件编码)和硬编码(硬件编码)两种方式实现。以下是GStreamer视频编码的基本概念,涵盖了这两......
  • 使用ffmpeg修复本地视频文件(mp4)播放时进度条无法拖动的问题
    右击视频文件查看属性,在详细信息页查看视频时长,显示为空,推测进度条无法拖动的原因是时间轴损坏于是采用了以下解决办法将视频分离出来,命名为video.mp4ffmpeg-i视频名称.mp4-map0:v-vcodeccopy-bsf:vh264_mp4toannexbvideo.mp4将音频分离出来,命名为audio.wavffm......