英伟达Jetson:Jetson Nano视频编解码测试

前言

本文主要测试Jetson Nano的编解码的能力是否符合官方文档所展示,本文主要基于1080P和4K的两类分辨率视频进行H.264和H.265的编解码测试,测试内容主要有:1080P,4K视频的直接解码测试;从1080P的USB摄像头和4K的CSI摄像头获取图像进行编码再进行解码显示。

一、安装 GStreamer

  • 首先使用以下命令来安装Gstreamer1.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
  • 查看Gstreamer版本
gst-inspect-1.0 --version

二、Gstreamer介绍

  • Gstreamer1.0包含 gst-omx解码插件如下所示:
    在这里插入图片描述
  • GStreamer 1.0 包括以下 gst-v4l2 视频解码器:
    在这里插入图片描述
  • GStreamer 1.0 包括以下 gst-omx 视频编码器:
    在这里插入图片描述
  • GStreamer 1.0 包括以下 gst-v4l2 视频编码器:
    在这里插入图片描述
  • Gstreamer1.0包括以下几种视频接收器
    在这里插入图片描述

三、安装v4l-utils

  • 终端输入以下命令来安装
sudo apt-get install v4l-utils
  • 利用V4-utils查询当前的USB设备
v4l2-ctl --list-devices
  • 打开USB摄像头并显示出来
gst-launch-1.0 v4l2src ! xvimagesink

四、USB摄像头的编解码测试

备注:本人的摄像头最高只支持1920x1080,30FPS,这里根据自己个人摄像头情况来修改下面的命令,如果不知道可以通过v4l2-ctl -d /dev/video0 --list-format-ext来查询自己的USB设备支持格式

  • 使用gst-omx 进行H264硬件编码(打开摄像头进行视频录制,按下Ctrl+C即可退出保存视频文件)
gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw, width=1920, height=1080, format=(string)YUY2" ! nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! omxh264enc ! 'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! qtmux ! filesink location=1080P.mp4 -e
  • 使用gst-omx 进行H265硬件编码(打开摄像头进行视频录制,按下Ctrl+C即可退出保存视频文件)
gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw, width=1920, height=1080, format=(string)YUY2" ! nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! omxh265enc ! 'video/x-h265, stream-format=(string)byte-stream' ! h265parse ! qtmux ! filesink location=1080P.mp4 -e

备注:如果下面解码后显示的界面太大可以将下面nvoverlaysink改成nv3dsink这样显示就变成窗口化

  • 使用gst-omx进行H264硬件解码(对上面保存的视频文件进行解码)
gst-launch-1.0 filesrc location=1080p.mp4 ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! omxh264dec ! nvoverlaysink -e
  • 使用gst-omx进行H265硬件解码(对上面保存的视频文件进行解码)
gst-launch-1.0 filesrc location=1080p.mp4 ! qtdemux name=demux demux.video_0 ! queue ! h265parse ! omxh265dec ! nvoverlaysink -e

备注:下面只展示了gst-v4l2的H264编解码,这里不再重复H265,因为与上面的gst-omx编解码方式相同只不过把对应的编解码参数改变而已

  • 使用gst-v4l2进行H264硬件编码
gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw, width=1920, height=1080, format=(string)YUY2" ! nvvidconv ! 'video/x-raw(memory:NVMM), format=(string)I420' ! nvv4l2h264enc ! 'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! qtmux ! filesink location=1080P.mp4 -e
  • 使用gst-v4l2进行H264硬件解码
gst-launch-1.0 filesrc location=1080p.mp4 ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! nvv4l2decoder enable-max-performance=1 ! nvoverlaysink -e

备注:以下展示H264和omx,H265以及v4l2自行类比

  • 网络流式传输RTSP,这里展示在同个设备下进行网络传输
gst-launch-1.0 v4l2src ! decodebin ! videoconvert ! omxh264enc ! video/x-h264, stream-format=byte-stream ! rtph264pay ! udpsink host=127.0.0.1 port=5000
  • 再打开一个新的终端
gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, encoding-name=H264, payload=96 ! rtph264depay ! h264parse ! omxh264dec ! nvoverlaysink

五、本地视频文件解码测试

备注:这里视频文件请自行查找获得,本文共测试了1080P,4K,6K,8K的视频素材文件,并且以下的解码方式为gst-omx进行,gst-v4l2不再重复;其中filename文件根据自己的文件名来填入;另外由于网络上大部分视频文件都是以H264编码因此这里也只展示了H264的解码

  • 对本地视频文件进行gst-omx的H264解码
gst-launch-1.0 filesrc location=<filename.mp4> ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! omxh264dec ! nveglglessink -e

六、CSI摄像头的编解码测试

备注:这里使用的是Jetson-IMX477-RPIV3摄像头

  • 进行4K的视频编码保存
SENSOR_ID=0 # 0 for CAM0 and 1 for CAM1 ports
FRAMERATE=30 # Framerate can go from 2 to 30 for 4032x3040 mode
gst-launch-1.0 -e nvarguscamerasrc sensor-id=$SENSOR_ID ! "video/x-raw(memory:NVMM),width=4096,height=2160,framerate=$FRAMERATE/1" ! nvv4l2h264enc ! h264parse ! mp4mux ! filesink location=4K.mp4
  • 进行4K视频的解码显示
gst-launch-1.0 filesrc location=4K.mp4 ! qtdemux name=demux demux.video_0 ! queue ! h264parse ! nvv4l2decoder enable-max-performance=1 ! nv3dsink -e

七、总结

总的来说,Jetson Nano对于4K视频可以不管在H.264还是H.265下做到很好地编解码,对于4K以上视频进行测试后发现将会超出Nano能力范围无法运行,对于1080P的图像最多可以4路进行编解码,总结来说就是Jetson nano 的编解码能力在4K视频流范围内

八、参考

[1] Linux之gstreamer视频编解码测试指令
[2] Jetson DeepStream GStreamer使用记录
[3] 英伟达开发指南
[4] 嵌入式笔记

  • 5
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值