GStreamer——gst-launch-1.0

介绍

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 用于播放一个视频测试源。

详细解释如下:

  1. gst-launch-1.0: 这是 GStreamer 的命令行工具,用于启动和控制 GStreamer 管道。

  2. videotestsrc: 这是 GStreamer 的一个插件,用于生成一个测试视频信号。它可以产生各种类型的测试图像,如灰度、彩色条纹、交叉线等。

  3. !: 这个符号是管道操作符,用于将一个插件的输出连接到另一个插件的输入。在这个例子中,它将 videotestsrc 的输出连接到下一个插件。

  4. 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

详细解释如下:

  1. gst-launch-1.0: 这是 GStreamer 的命令行工具,用于启动和控制 GStreamer 管道。

  2. playbin: 这是 GStreamer 的一个插件,用于自动处理多媒体数据的播放。它可以处理多种格式的音频和视频文件,包括本地文件和网络流。

  3. 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

  • 11
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值