当前位置:网站首页>gst-launch-1.0用法小记
gst-launch-1.0用法小记
2022-04-23 05:45:00 【许野平】
由于工作中要使用DeepStream这个框架,绕不开gstreamer-1.0,于是这段时间学习了这个框架的用法。还没有能力去阅读源码。gstreamer框架中,gst-inspect-1.0和gst-launch-1.0这两个工具是必须要熟悉的,现就gst-launcher-1.0的用法做下笔记,以免日后遗忘。参考https://blog.csdn.net/u010168781/article/details/102805210
一、命令格式
gst-launch-1.0 [OPTIONS] PIPELINE-DESCRIPTION
1. 参数选项
- -help
- -v, --verbose
- -q, --quiet 不打印信息
- -m, --messages 输出管道总线上的消息
- -t, --tags 输出标记tag(也称为元数据)
- -o FILE, --output=FILE 将管道保存到XML文件中,并退出
- -f, --no_fault 不安装故障处理程序
- -T, --trace 打印内存分配跟踪。必须在编译时启用该特性才能工作。
2. 管道描述串
- 元件: ELEMENTTYPE [PROPERTY1 …]
- 元件属性:PROPERTY=VALUE …,多个值之间用空格
- 箱子Bin: [BINTYPE.] ([PROPERTY1 …] PIPELINE-DESCRIPTION),通常在gst_parse_launch()函数中使用,构建部分管道,而不是完整的顶级管道
- 链接Link:[[SRCELEMENT].[PAD1,…]] ! [[SINKELEMENT].[PAD1,…]],将SRCELEMENT通过“!”链接到SINKELEMENT
[[SRCELEMENT].[PAD1,…]] ! CAPS ! [[SINKELEMENT].[PAD1,…]],CAPS表示过滤器,链接符合CAPS的PAD
能力CAP:MIMETYPE [, PROPERTY[, PROPERTY …]]] [; CAPS[; CAPS …]],使用给定的mimetype和可选的给定属性创建功能。
能力属性:NAME=[(TYPE)] VALUE in lists and ranges: [(TYPE)] VALUE
二、用例
1. 播放MP4音视频
MP4文件一般有2个流:音频流和视频流,部分文件会有字幕流。一般我们只处理2个流就够了。一般视频流采用h264编码,音频流采用aac编码。一开始由于不熟悉gst-inspect的用法,导致音视频解码器找不到,浪费了很多时间。
gst-inspect-1.0 | grep h264
找到h264解码器avdec_h264
gst-inspect-1.0 | grep aac
找到aac解码器avdec_aac。也可以用faad解码,faad输出为16位音频,avdec_aac输出为32位音频
gst-launch-1.0
中关于demux的用法也摸索了好久,mp4文件要用到qtdemux(quick time demux),用names属性分离管道,正确用法如下
播放视频
gst-launch-1.0 filesrc location=gongye.mp4 ! qtdemux name=demuxer demuxer. ! avdec_h264 ! xvimagesink
播放音频(audioresample可选)
gst-launch-1.0 filesrc location=gongye.mp4 ! qtdemux name=demuxer demuxer. ! avdec_aac ! audioconvert ! audioresample ! alsasink
播放音视频
gst-launch-1.0 filesrc location=gongye.mp4 ! qtdemux name=demuxer demuxer. ! queue ! avdec_aac ! audioconvert ! alsasink demuxer. ! queue ! avdec_h264 ! xvimagesink
demuxer. 后面可以指定流名称,如 demuxer.video_0,demuxer.audio_0,流名称必须与文件中的流名称对应。
其他的文件格式,如flv,ogg,mpeg等文件都可以采用类似的方式,先用gst-inspect-1.0查找对应的demux和音视频解码器,然后构建管道即刻播放。
对于元件中的request pad,gst-launch-1.0也可以指定request pad的连接,典型如tee,nvstreammux等元件需要request pad,连接方式如下:
gst-launch-1.0 filesrc location=sample_720.h264 ! h264parse ! nvv4l2decoder ! smuxer.sink_0 nvstreammux name=smuxer width=1920 height=1080 batch-size=1 batched-push-timeout=4000000 ! nvinfer config-file-path=dstest1_pgie_path.txt ! nvvideoconvert ! nvdsosd ! nvvideoconvert ! nvv4l2h264enc ! h264parse ! qtmux ! filesink location=test.mp4
以上命令是对deepstream-test1的命令行模拟,但是缺少了osd探针函数,所以并不完整,但也可以运行,主要用于展示nvstreammux request pad(sink_%u)的用法。其中nvv4l2decoder是nvidia的硬解码元件,nvstreammux是deepstream队列元件,在使用nvinfer进行推理之前必须要使用该队列元件添加nvinfer所需要的数据。nvinfer是推理元件,配置文件为dstest1_pgie_path.txt。有关deepstream的资料,请另行查阅。
2. 编码
gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-raw,format=YUY2,width=640,height=480,framerate=30/1 ! videoconvert ! x264enc ! h264parse ! qtmux ! filesink location=1.mp4 -e
注意,尾部的-e不能省,表示按下ctrl-c键后会向视频流发送EOS标识,视频流才能完整编码。
3. rtp推流
发送端:
gst-launch-1.0 v4l2src ! video/x-raw,format=YUY2,width=1280,height=720,framerate=10/1 ! videoconvert ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5600
接收端:
gst-launch-1.0 udpsrc port=5600 caps='application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H264' ! rtph264depay ! avdec_h264 ! videoconvert ! xvimagesink
————————————————
版权声明:本文为CSDN博主「ywxuan」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/ywxuan/article/details/117629563
版权声明
本文为[许野平]所创,转载请带上原文链接,感谢
https://yeping.blog.csdn.net/article/details/124214566
边栏推荐
- Example of ticket selling with reentrant lock
- Advanced operation of idea debug
- SQL optimization best practices
- How SYSTEMd uses / etc / init D script
- Sakura substring thinking
- Troubleshooting of data deleted and reappeared problems
- Generation of verification code
- 队列解决约瑟夫问题
- Rust 中的 RefCell
- Rust:如何 match 匹配 String 字符串?
猜你喜欢
定位器
Algèbre linéaire chapitre 2 - matrice et son fonctionnement
How SYSTEMd uses / etc / init D script
Installation and usage skills of idea
IO multiplexing of 09 redis
Class loading and classloader understanding
20 excellent plug-ins recommended by idea
[leetcode 401] binary Watch
Definition of C class and method
Mysql database foundation
随机推荐
C3p0 database connection pool usage
IO multiplexing of 09 redis
Algèbre linéaire chapitre 2 - matrice et son fonctionnement
[leetcode 459] duplicate substring
NVIDIA Jetson: GStreamer 和 openMAX(gst-omx) 插件
Collection and map thread safety problem solving
Database - sorting data
Solution to the trial of ycu Blue Bridge Cup programming competition in 2021
Rainbow (DP)
@Problems caused by internal dead loop of postconstruct method
队列解决约瑟夫问题
[leetcode 19] delete the penultimate node of the linked list
安全授信
电机与拖动(戚金清版)学习整理
-- SQL query and return limit rows
Framework analysis 1 Introduction to system architecture
Conversion between JS object and string
Rust 中的 Rc智能指针
几行代码教你爬取LOL皮肤图片
斯坦福机器学习课程汇总