Gstreamer基础教程10:GStreamer tools

目标

提示: GStreamer自带了一套工具,方便且必要。 本教程中没有代码,请坐好,放松,我们将教你:
  1. 如何从命令行构建和运行GStreamer管道,而根本不使用C语言!
  2. 如何找出你所用到的GStreamer elements及其功能。
  3. 如何发掘媒体文件的内部结构。

一、Introduction(简介)

这些工具可在GStreamer目录的bin文件中获得。您需要进入到这个目录来执行它们,因为它没有添加到系统的PATH环境变量中(防止环境变量过于冗杂)。

你只需打开一个终端(或控制台窗口)并转到GStreamer安装的bin目录中(请再次阅读安装GStreamer一节以找到它的位置),现在,您可以开始输入本教程中给出的命令了。

注意:
在Linux上,应该使用与你的linux系统相符合的GStreamer版本,即在Fedora发行版系统上应该使用名为gstreamer1的包安装工具,在Debian/Ubuntu发行版系统上使用名为gstreamer1.0-tools的包安装工具。

为了允许多个版本的GStreamer在同一系统中共存,这些工具是版本化的,也就是说,GStreamer版本号附加在它们的名称之后。这个版本基于GStreamer 1.0,因此这些工具被称为gst-launch-1.0gst-inspect-1.0gst-discoverer-1.0


二、gst-launch-1.0

1.Elements

以简单的形式,PIPELINE-DESCRIPTION(描述管道)是用感叹号(!) 分隔的elements列表。
继续并输入以下命令:

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

您应该会看到一个带有动画视频的窗口。在终端上使用CTRL+C命令停止程序。

  1. 这将实例化一个类型为videotestsrc的新element(一个生成示例视频样式的元素);src:源
  2. 一个videoconvert element(一个进行原始视频格式转换的元素,确保其他elements可以前后相互连接);
  3. 和一个autovideosink element(一个显示视频的窗口)。sink:汇

然后,GStreamer尝试将每个element的输出链接到管道描述中出现在其右侧的element的输入。如果有多个输入或输出Pad可用,则使用Pad Caps查找两个兼容的Pad。

2.Properties(属性)

属性可以以* property=value *的形式附加到元素(可以指定多个属性,用空格分隔)。使用gst-inspect-1.0工具(后面解释)来查找元素的可用属性。

gst-launch-1.0 videotestsrc pattern=11 ! videoconvert ! autovideosink

其中:
pattern=11 ====== property=value,显然,pattern是videotestsrc元素的一个属性 。

你应该看到一个由圆圈组成的静态视频模式。

3.Named elements(元素重命名)

可以使用name属性来命名element,这样就可以创建包含分支的复杂管道。Names允许链接到之前在描述中创建的elements,对于具有多个输出单元的元素(例如demuxers或tee)来说,Names是必不可少的。

引用已命名元素时,其名称后面要接小圆点

gst-launch-1.0 videotestsrc ! videoconvert ! tee name=t ! queue ! autovideosink t. ! queue ! autovideosink

您应该看到两个视频窗口,显示相同的示例视频模式。如果你只看到一个,试着移动它,因为它被第二个窗口覆盖了。

这个例子实例化了一个videotestsrc,链接到一个videoconvert,链接到一个tee (参考基础教程7:多线程和Pad可用性tee可将其输入Pad传入的内容复制到每个输出Pad) 。tee被简单地命名为“t”(使用name属性),然后链接到管道后面的queueautovideosink元素。
同样,tee也指的是“t.”,(注意小圆点)然后链接到第二个queue 和第二个autovideosink

要了解为什么队列queues)是必要的,请阅读基础教程7:多线程和Pad可用性

4.Pads(接口)

在链接两个elements时,您可能希望直接指定使用哪个Pads,而不是让GStreamer自动选择使用哪个Pad。您可以通过在元素名(它必须是一个重命名的元素)后添加一个Pad名称实现。通过使用gst-inspect-1.0工具了解Pads元素命名。

这是有用的,例如,当你想从一个demuxer(解码器)中检索一个特定的流:

gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux name=d d.video_0 ! matroskamux ! filesink location=sintel_video.mkv

其中:
matroskademux name=d 表示重命名matroskademux 元素为d,d.video_0 ====重命名的元素名+点+Pad名称,指定使用video_0 这个Pad输出

WebM 格式,其实是以 Matroska(就是我们熟知的 MKV)容器格式为基础开发的新容器格式,里面包括了 VP8 视频和 Ogg Vorbis 音轨。

这个管道使用souphttpsrc元素从互联网上获取一个webm格式的媒体文件(一种特殊的Matroska容器,请参阅基础教程2:GStreamer概念)。

然后我们使用matroskademux(相当于解码)打开这个媒体容器。

该媒体包含视频和音频,因此matroskademux将创建两个输出Pad,分别名为video_0audio_0

我们将video_0 Pad链接到matroskamux元素的输入,这个过程也可看做将新视频流重新打包到一个新的容器中,最后将它链接filesink元素,filesink将把视频流写入名为“sintel_video.mkv”的文件中(location属性指定文件的名称)。

总之,我们取了一个webm文件,剥离了它的音频,并生成了一个只包含视频的matroska(MKV)文件。如果我们只想保留音频:

gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux name=d d.audio_0 ! vorbisparse ! matroskamux ! filesink location=sintel_audio.mka

vorbisparse元素从上个元素输出的信息流中提取一些信息并将其放入Pad的Caps中,这样下一个元素,matroskamux就知道如何处理这个流了。在抓取视频的情况下,这是不必要的,因为matroskademux已经提取了这个信息,并将其添加到了Caps。

5.Caps filters(功能过滤)

当一个element(元素)有多个输出Pads(接口)时,可能会出现指向下一个元素的链接是有歧义的:右侧元素可能有多个互相兼容的输入pads,或者它的输入Pad可能与左侧所有输出pad的caps兼容。在这些情况下,GStreamer将自动链接第一个可用的pad,相当于随机选择。

考虑这个管道:

gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux ! filesink location=test

这是与前面示例中相同的媒体文件和deuxer(解码器)。filesink元素的“Pad Caps”为“ANY”,表示可以接受任何类型的媒体。matroskademux的两个输出接口中的哪一个将被链接到filesink?video_0还是audio_0 ? 这不能确定。

不过,你可以通过使用重命名Pad(如上一小节所述)或使用Caps Filters来消除这种歧义:

gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux ! video/x-vp8 ! matroskamux ! filesink location=sintel_video.mkv

Caps Filter的功能类似于pass-through元素,它只接受给定Caps输出的媒体流,有效地解决了模糊性。在这个例子中,我们在matroskademuxmatroskamux之间添加了一个video/x-vp8 Caps Filter,以指定matroskademux中我们需要的输出pad,输出我们需要的视频。

可以使用gst-inspect-1.0工具,查看元素可接收和输出的Caps类型;
可以使用gst-discoverer-1.0工具要查找特定文件中包含的Caps;
要找出特定管道中的某个元素的Caps。可以运行gst-launch-1.0,使用-v选项打印Caps信息,

6.Examples(举例)

playbin播放媒体文件(如基础教程1:Hello world!):

gst-launch-1.0 playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm

一个完整的操作播放管道,带有音频和视频(基本与用playbin创建的管道功能相同):

gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! matroskademux name=d ! queue ! vp8dec ! videoconvert ! autovideosink d. ! queue ! vorbisdec ! audioconvert ! audioresample ! autoaudiosink

一个转码管道,它打开webm容器并解码两个流(通过uridecodebin),然后用不同的编解码器重新编码音频和视频分支,并将它们放在Ogg容器中((只是为了好玩)。

gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm name=d ! queue ! theoraenc ! oggmux name=m ! filesink location=sintel.ogg d. ! queue ! audioconvert ! audioresample ! flacenc ! m.

重新调节管道。当输入和输出视频图像尺寸大小不同时,videoscale元素执行缩放操作。输出caps由caps Filter设置为320x200。

gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! queue ! videoscale ! video/x-raw-yuv,width=320,height=200 ! videoconvert ! autovideosink

本文对gst-launch-1.0的简短描述应该足以让您入门。请记住,您可以在这里获得完整文档

三.gst-inspect-1.0

四.gst-discoverer-1.0

五.Conclusion


总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值