概述
0 背景
gstreamer 是一个流媒体处理框架,可以使用插件的方法创建 pipeline,快速验证某些功能。NVIDIA 推出的 deepstream 便是基于 gstreamer 开发的 sdk,也推出了自己的插件,如硬件编解码模块 NVCODEC。
在开发过程中,我们习惯用 gst-launch-1.0 工具来搭建 pipeline,因此本文整理一下常见的 pipeline 方法,并不断完善补充。
关于 gstreamer 的基本使用,可以参考《gstreamer基础教程》和《gstreamer开发手册》系列教程。
由于 NVIDIA 的 jetson 平台与 dGPU 平台的编解码模块有所区别,因此本文按照平台进行分类汇总。
参考:https://docs.nvidia.com/jetson/l4t/index.html#page/Tegra%20Linux%20Driver%20Package%20Development%20Guide/accelerated_gstreamer.html
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视频编解码测试指令0 背景1 jetson 平台2 dGPU 平台的全部内容,希望文章能够帮你解决Linux之gstreamer视频编解码测试指令0 背景1 jetson 平台2 dGPU 平台所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复