Linux之gstreamer视频编解码测试指令
Posted 宗而研之
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux之gstreamer视频编解码测试指令相关的知识,希望对你有一定的参考价值。
0 背景
gstreamer 是一个流媒体处理框架,可以使用插件的方法创建 pipeline,快速验证某些功能。NVIDIA 推出的 deepstream 便是基于 gstreamer 开发的 sdk,也推出了自己的插件,如硬件编解码模块 NVCODEC。
在开发过程中,我们习惯用 gst-launch-1.0 工具来搭建 pipeline,因此本文整理一下常见的 pipeline 方法,并不断完善补充。
关于 gstreamer 的基本使用,可以参考《gstreamer基础教程》和《gstreamer开发手册》系列教程。
由于 NVIDIA 的 jetson 平台与 dGPU 平台的编解码模块有所区别,因此本文按照平台进行分类汇总。
1 jetson 平台
1.1 工具
由于要在jetson上使用usb摄像头,需要安装 v4l-utils
sudo apt-get install v4l-utils
要查询v4l设备(将它们连接到您的Jetson的USB端口后),请使用以下命令
v4l2-ctl --list-devices
查询设备支持的格式(在这种情况下为video0)
v4l2-ctl -d /dev/video0 --list-formats-ext
或者,您可以简单地查询所有已连接的v4l设备
v4l2-ctl --list-formats-ext
1.2 读取视频并保存视频
gst-launch-1.0 videotestsrc ! \\
'video/x-raw, format=(string)I420, width=(int)640, \\
height=(int)480' ! omxh264enc ! \\
'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! \\
qtmux ! filesink location=test.mp4 -e
1.3 读取USB摄像头并保存视频
gst-launch-1.0 v4l2src device="/dev/video0" ! "video/x-raw, width=1920, height=1080" \\
! decodebin ! videoconvert ! omxh264enc ! video/x-h264, \\
stream-format=byte-stream ! h264parse ! qtmux ! filesink \\
location=test.mp4 -e
1.4 读取文件并显示
gst-launch-1.0 filesrc location=test.mp4 ! qtdemux name=demux ! h264parse ! \\
omxh264dec ! fakesink -e
1.5 流式传输
编码发送
gst-launch-1.0 v4l2src ! decodebin ! videoconvert ! omxh264enc ! video/x-h264, \\
stream-format=byte-stream ! rtph264pay pt=96 ! udpsink host=127.0.0.1 port=8001 sync=false -e
接收解码
gst-launch-1.0 udpsrc address=127.0.0.1 port=8001 ! application/x-rtp, encoding-name=H264, \\
payload=96 ! rtph264depay ! queue ! h264parse ! omxh264dec ! fakesink
2 dGPU 平台
2.1 deepstream测试
gst-launch-1.0 filesrc location= /opt/nvidia/deepstream/deepstream-5.0/samples/streams/sample_1080p_h264.mp4 ! qtdemux ! \\
h264parse ! nvv4l2decoder ! m.sink_0 nvstreammux name=m batch-size=1 width=1920 height=1080 batched-push-timeout=4000000 ! \\
nvinfer config-file-path= /opt/nvidia/deepstream/deepstream-5.0/samples/configs/deepstream-app/config_infer_primary.txt \\
batch-size=1 unique-id=1 ! nvvideoconvert ! nvdsosd ! nvvideoconvert ! nvv4l2h264enc ! h264parse ! fpsdisplaysink test-overlay=false \\
video-sink="fakesink" -v
2.2 硬件编码
gst-launch-1.0 videotestsrc ! video/x-raw,width=1920,height=1080,format=BGR ! videoconvert ! video/x-raw,format=I420 ! nvvideoconvert ! 'video/x-raw(memory:NVMM)' ! nvv4l2h264enc ! h264parse ! matroskamux ! fakesink
2.3 硬件编码输出rtsp
gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,format=I420,width=640,height=480 ! nvvideoconvert ! 'video/x-raw(memory:NVMM)' ! nvv4l2h264enc ! video/x-h264, stream-format=byte-stream ! rtspclientsink location=rtsp://127.0.0.1/live/test
2.4 软件编码输出rtsp
gst-launch-1.0 videotestsrc ! videoconvert ! video/x-raw,format=I420,width=640,height=480 ! x264enc ! video/x-h264, stream-format=byte-stream ! rtspclientsink location=rtsp://127.0.0.1/live/test
(持续更新中)
以上是关于Linux之gstreamer视频编解码测试指令的主要内容,如果未能解决你的问题,请参考以下文章
RIoTBoard开发板系列笔记—— gstreamer + vpu实现视频硬件解码播放
使用 GStreamer 在 Android 上进行硬件视频解码
Raspberry Pi 上的 GStreamer 全高清视频 RTP 流