介绍
gst-launch-1.0 [OPTION…] PIPELINE-DESCRIPTION
gst-launch-1.0 是一个构建和运行基本 GStreamer 管道的工具。
在其最简单的形式中,一个 PIPELINE-DESCRIPTION 是由感叹号 (!) 分隔的元素列表。属性可以以 property=value 的形式附加到元素上。
有关可能的 PIPELINE-DESCRIPTIONS 更完整的描述,请参阅下面的管道描述部分或咨询 GStreamer 文档。
请注意,gst-launch-1.0 主要是一种调试工具。您不应该在它的基础上构建应用程序。对于应用程序,使用 GStreamer API 的 gst_parse_launch() 函数作为从管道描述中构造管道的一种简单方式。
使用说明
root@ubuntu:~# gst-launch-1.0 --help
或
root@ubuntu:~# gst-launch-1.0 -h
或
root@ubuntu:~# man gst-launch-1.0
root@ubuntu:~# gst-launch-1.0 -help
Usage:
gst-launch-1.0 [OPTION…] PIPELINE-DESCRIPTION
Help Options:
-h, --help Show help options
--help-all Show all help options
--help-gst Show GStreamer Options
Application Options:
-t, --tags Output tags (also known as metadata)
-c, --toc Output TOC (chapters and editions)
-v, --verbose Output status information and property notifications
-q, --quiet Do not print any progress information
-m, --messages Output messages
-X, --exclude=PROPERTY-NAME Do not output status information for the specified property if verbose output is enabled (can be used multiple times)
-f, --no-fault Do not install a fault handler
-e, --eos-on-shutdown Force EOS on sources before shutting the pipeline down
--version Print version information and exit
root@ubuntu:~#
用法:
gst-launch-1.0 [选项...] PIPELINE-DESCRIPTION
帮助选项:
-h, --help 显示帮助选项
--help-all 显示所有帮助选项
--help-gst 显示 GStreamer 选项
应用程序选项:
-t, --tags 输出标签(也称为元数据)
-c, --toc 输出目录(章节和版本)
-v, --verbose 输出状态信息和属性通知
-q, --quiet 不打印任何进度信息
-m, --messages 输出消息
-X, --exclude=PROPERTY-NAME 如果启用了详细输出,则不输出指定属性的状态信息(可以多次使用)
-f, --no-fault 不安装错误处理程序
-e, --eos-on-shutdown 在关闭管道之前强制源端发送结束信号(EOS)
--version 打印版本信息并退出
version
root@ubuntu:~# gst-inspect-1.0 --version
gst-inspect-1.0 version 1.16.3
GStreamer 1.16.3
https://launchpad.net/distros/ubuntu/+source/gstreamer1.0
root@ubuntu:~#
播放视频测试源
gst-launch-1.0 videotestsrc ! autovideosink
gst-launch-1.0 videotestsrc ! autovideosink
用于播放一个视频测试源。
详细解释如下:
-
gst-launch-1.0
: 这是 GStreamer 的命令行工具,用于启动和控制 GStreamer 管道。 -
videotestsrc
: 这是 GStreamer 的一个插件,用于生成一个测试视频信号。它可以产生各种类型的测试图像,如灰度、彩色条纹、交叉线等。 -
!
: 这个符号是管道操作符,用于将一个插件的输出连接到另一个插件的输入。在这个例子中,它将videotestsrc
的输出连接到下一个插件。 -
autovideosink
: 这是 GStreamer 的一个插件,用于自动选择合适的视频接收器(sink)来显示视频。它会根据系统的能力选择最佳的视频接收器,例如 Xvimagesink、Ximagesink、CairoOverlay 等。
所以,这个命令的作用是使用 GStreamer 的 videotestsrc
插件生成一个测试视频信号,并通过 autovideosink
插件将其显示在屏幕上。
运行效果:
管道描述串是 videotestsrc ! autovideosink
,它包括了三个部分:
- 管道起始点:
videotestsrc
- 管道的终点:
autovideosink
- 起点和终点的连接:
!
这个管道描述串的意思是,把元素 videotestsrc
连接到元素 autovideosink
上。
这个例子完整的说明应该如下:
gst-launch-1.0 videotestsrc name=a a.src ! b.sink autovideosink name=b
gst-launch-1.0 的基本语法
gst-launch-1.0 的基本语法是
gst-launch-1.0 元素名称 属性=... 元素名称 属性=... ... 元素.SrcPad名称 ! 元素.SinkPad名称
所以,根据我们上面的例子,可以写出下面的命令行:
gst-launch-1.0 videotestsrc autovideosink
元素之间竟然没有 !
符号。命令行运行后并没出现语法错误,只是这个管道并不会工作,因为没有链接。
此时,管道描述符包含两个部分:
- 第一个元素:
videotestsrc
- 第二个元素:
autovideosink
要建立连接,就需要给元素命名:
gst-launch-1.0 videotestsrc name=a autovideosink name=b
当然,因为还没加入链接,当然还是不工作。此时,管道描述符仍然只包含两个部分:
- 第一个元素:
videotestsrc name=a
- 第二个元素:
autovideosink name=b
下面加入链接:
gst-launch-1.0 videotestsrc name=a autovideosink name=b a.src ! b.sink
运行一下,正常运行。
注意到没有,这次连接的位置竟然与刚才的例子不一样。其实,gst-launch-1.0 不在乎排列顺序。这个例子中,管道描述串包括三个部分:
- 第一个元素:
videotestsrc name=a
- 第二个元素:
autovideosink name=b
- 连接:
a.src ! b.sink
这三个部分可以任意排列。这三个部分之间并没有标点符号,会不会弄混?仔细分析一下就能发现,不会。因为元素名称前后都是空格,没有其他符号。元素的属性赋值(比如 name=a)有等号连接,连接描述有感叹号连接。所以,尽管描述串很复杂,而且无序,但不会弄错。
所以,前面看到的那个例子,管道描述串中也是由上面三个部分构成,只是顺序调整了一下。
gst-launch-1.0 videotestsrc name=a a.src ! b.sink autovideosink name=b
我们怎么能知道 videotestsrc
的 Pad 名称是 src
?可以用命令 gst-inspect-1.0 videotestsrc
查看。
使用 gst-inspect-1.0 , videotestsrc
有一个叫做 pattern 的属性,默认值是 0,最大值可以取到 24。接下来我们改成 1 看看:
gst-launch-1.0 videotestsrc pattern=1 ! autovideosink
运行效果:
显示效果分辨率过低,更换方法如下:
利用 CAPS 转换,强迫 Pad 之间的连接通过我们指定的 CAPS 进行。看下面的例子:
gst-launch-1.0 videotestsrc ! video/x-raw, width=1920, height=1080 ! autovideosink
也可以:
gst-launch-1.0 videotestsrc name=a autovideosink name=b a.src ! video/x-raw, width=1920, height=1080 ! b.sink
需要注意两点:
a.src ! video/x-raw, width=1920, height=1080 ! b.sink
是一个链接,不可乱序video/x-raw, width=1920, height=1080
是 CAPS 说明,其中的属性之间用逗号隔开。这个表示方法与元素是不一样的,元素的属性是用空格隔开的。
运行效果:
CAPS 的属性可能很复杂,比如 video/x-raw(memory:NVMM), width=(int)1920, height=(int)1080, format=(string)NV12
这种里面带括号的,无法直接放到 gst-launch-1.0。
另外,CAPS标识如果太简单也可能与元素无法区别。于是,这类 CAPS 必须用单引号或双引号括起来,明确告诉 gst-launch-1.0 这是一个 CAPS 说明。所以下面的例子也是合法的:
gst-launch-1.0 videotestsrc ! 'video/x-raw, width=1920, height=1080' ! autovideosink
gst-launch-1.0 videotestsrc ! "video/x-raw, width=1920, height=1080" ! autovideosink
播放指定的网络媒体文件
gst-launch-1.0 playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
详细解释如下:
-
gst-launch-1.0
: 这是 GStreamer 的命令行工具,用于启动和控制 GStreamer 管道。 -
playbin
: 这是 GStreamer 的一个插件,用于自动处理多媒体数据的播放。它可以处理多种格式的音频和视频文件,包括本地文件和网络流。 -
uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
: 这是传递给playbin
插件的参数,指定了要播放的网络媒体文件的 URL。在这个例子中,URL 指向的是 Sintel 电影预告片的一个 480p WebM 格式的视频文件。
所以,这个命令的作用是使用 GStreamer 的 playbin
插件播放指定的网络媒体文件。
执行过程:
显示效果:
用于发送和接收UDP RTP数据:
$ gst-launch-1.0 v4l2src ! \
video/x-raw-yuv,width=128,height=96,format='(fourcc)'UYVY ! \
videoconvert ! ffenc_h263 ! video/x-h263 ! rtph263ppay pt=96 ! \
udpsink host=192.168.1.1 port=5000 sync=false
$ gst-launch-1.0 udpsrc port=5000 ! application/x-rtp, \
clock-rate=90000,payload=96 ! rtph263pdepay queue-delay=0 ! ffdec_h263 \
! xvimagesink
使用YUY2或YV12作为测试视频格式,帧率为30帧/秒:
$ gst-launch-1.0 videotestsrc ! \
'video/x-raw-yuv,format=(fourcc)YUY2,framerate=30/1;video/x-raw-yuv,format=(fourcc)YV12,framerate=30/1' \
! xvimagesink
通过alsasrc录制文件,限定采样率及位宽:
$ gst-launch-1.0 alsasrc! \
'audio/x-raw-int,rate=[32000,64000],width=[16,32],depth={16,24,32},signed=(boolean)true' \
! wavenc ! filesink location=recording.wav