GStreamer——教程——基础教程10:GStreamer tools

基本教程10:GStreamer工具

目标

GStreamer附带了一系列工具,从方便到绝对必要。本教程中没有代码,只需坐下来放松,我们将教您:

  • 如何从命令行构建和运行GStreamer管道,而无需使用C语言!
  • 如何找出您拥有的GStreamer元素及其功能。
  • 如何发现媒体文件的内部结构。

介绍

这些工具位于GStreamer二进制文件的bin目录中。您需要转到此目录才能执行它们,因为它没有被添加到系统的PATH环境变量中(以避免过多地污染它)。

只需打开终端(或控制台窗口),转到您的GStreamer安装的bin目录(再次阅读安装GStreamer部分以找出它在哪里), 您可以开始输入本教程中给出的命令了。

在Linux,您应该使用安装在您的 分发,工具应该安装一个名为gstreamer1 在Fedora风格发行版上,或在Debian/Ubuntu风格gstreamer1.0-tools。 分布。

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

gst-launch-1.0

这个工具接受一个文本描述的管道,实例化它,并将其设置为PLAYING状态。它可以让您快速检查给定的管道是否有效,然后再使用GStreamer API调用进行实际实现。
请注意,它只能创建简单的管道。特别是,它只能模拟管道与应用程序之间的交互到一定程度。无论如何,它非常适用于快速测试管道,并被世界各地的GStreamer开发人员每天使用。
请注意,gst-launch-1.0主要是供开发人员使用的调试工具。您不应该在其上构建应用程序。相反,请使用GStreamer API的gst_parse_launch()函数作为从管道描述构建管道的简便方法。
尽管构造管道描述的规则非常简单,但多个元素的连接可能会很快使这些描述看起来像是黑魔法。不要担心,每个人都会学习gst-launch-1.0语法,最终。
gst-launch-1.0的命令行由一系列选项和PIPELINE-DESCRIPTION组成。以下是一些简化的说明,请参阅gst-launch-1.0 参考页 上的完整文档。

Elements

简单来说,PIPELINE-DESCRIPTION是一个由感叹号 (!)分隔的元素类型列表。直接输入以下命令:

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

您应该看到一个带有动画视频图案的窗口。在终端上使用CTRL+C停止程序。
这个实例化了一个新的videotestsrc类型的元素(一个生成样本视频模式的元素),一个videoconvert(一个进行原始视频格式转换,确保其他元素可以理解的元素),以及一个autovideosink(一个用于渲染视频的窗口)。然后,GStreamer尝试将每个元素的输出链接到出现在其右侧描述中的元素的输入。如果一个元素有多个输入或输出Pad可用,那么会使用Pad Caps来找到两个兼容的Pad。

属性

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

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

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

Elements 命名

可以使用name属性对元素进行命名,这样就可以创建涉及分支的复杂管道。名称允许链接到先前在描述中创建的元素,对于使用多个输出Pad的元素(如解复用器或分支等),名称是必不可少的。
命名元素通过在其名称后加上一个点来引用。

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属性),然后连接到一个队列和一个autovideosink。使用“t.”(注意点)引用相同的tee,然后连接到第二个队列和第二个autovideosink。
要了解为什么需要队列,请阅读基本教程7:多线程和Pad可用性

Pads

当GStreamer需要在两个元素之间链接时,您可能希望直接指定Pad。您可以通过在元素名称后添加一个点加Pad名称来实现(必须是命名元素)。使用gst-inspect-1.0工具来学习元素的Pad名称。
例如,当您想要从demuxer中检索其中一个特定流时,这非常有用:

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

此示例从互联网获取媒体文件使用souphttpsrc,它是webm格式(一种特殊的Matroska容器,请参阅基本教程2:GStreamer概念)。然后我们使用matroskademux打开容器。该媒体包含音频和视频,因此matroskademux将创建两个输出Pad,分别命名为video_0和audio_0。我们将video_0链接到一个matroskamux元素以重新打包视频流到一个新的容器中,并将其最终链接到一个filesink,它将将流写入名为“sintel_video.mkv”的文件(location属性指定文件的名称)。
总的来说,我们从webm文件中提取了音频并生成了一个新的Matroska文件,其中包含视频。如果我们只想保留音频:

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

vorbisparse元素是必需的,用于从流中提取一些信息并将其放入Pad Caps中,以便下一个元素matroskamux知道如何处理流。

在上述两个示例中,没有媒体被解码或播放。我们只是从一个容器转移到另一个容器(解复用和重新复用)。

Caps过滤器

当一个元素有多个输出Pad时,可能会发生链接到下一个元素的歧义:下一个元素可能具有多个兼容的输入Pad,或者其输入Pad可能与所有输出Pad的Pad Caps兼容。在这种情况下,GStreamer将使用第一个可用的Pad进行链接,这基本上相当于说GStreamer会随机选择一个输出Pad。
考虑以下管道:

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

这是与前一个示例相同的媒体文件和demuxer。filesink的输入Pad Caps为ANY,意味着它可以接受任何类型的媒体。matroskademux的两个输出Pad中的哪一个将链接到filesink?video_0还是audio_0?您无法知道。
但是,您可以消除这种歧义,方法是使用命名的Pad(如上一节所述),或使用Caps过滤器:

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

Caps过滤器的行为类似于一个只接受具有给定Caps的媒体并通过的传递元素,从而有效地消除了歧义。在此示例中,在matroskademux和matroskamux之间,我们添加了一个video/x-vp8 Caps过滤器,以指定我们对matroskademux可以产生这种视频的输出Pad感兴趣。
要查找元素接受和产生的Caps,请使用gst-inspect-1.0工具。要查找特定文件中包含的Caps,请使用gst-discoverer-1.0工具。要在特定的管道中查找元素正在产生的Caps,请像往常一样运行gst-launch-1.0,并使用–v选项打印Caps信息。

示例

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

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

一个完整的可操作播放管道,具有音频和视频(或多或少是playbin将在内部创建的管道):

gst-launch-1.0 souphttpsrc location=https://gstreamer.freedesktop.org/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://gstreamer.freedesktop.org/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由Caps过滤器设置为320x200。

gst-launch-1.0 uridecodebin uri=https://gstreamer.freedesktop.org/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

该工具有三种操作模式:

  • 无参数时,列出所有可用的元素类型,即可用于实例化新元素的类型。
  • 用文件名作为参数时,将文件视为GStreamer插件,尝试打开它,并列出其中描述的所有元素。
  • 用GStreamer元素名称作为参数时,列出有关该元素的所有信息。

让我们看一个第三模式的例子:

gst-inspect-1.0 vp8dec

Factory Details:
  Rank                     primary (256)
  Long-name                On2 VP8 Decoder
  Klass                    Codec/Decoder/Video
  Description              Decode VP8 video streams
  Author                   David Schleef <ds@entropywave.com>, Sebastian Dröge <sebastian.droege@collabora.co.uk>

Plugin Details:
  Name                     vpx
  Description              VP8 plugin
  Filename                 /usr/lib64/gstreamer-1.0/libgstvpx.so
  Version                  1.6.4
  License                  LGPL
  Source module            gst-plugins-good
  Source release date      2016-04-14
  Binary package           Fedora GStreamer-plugins-good package
  Origin URL               http://download.fedoraproject.org

GObject
 +----GInitiallyUnowned
       +----GstObject
             +----GstElement
                   +----GstVideoDecoder
                         +----GstVP8Dec

Pad Templates:
  SINK template: 'sink'
    Availability: Always
    Capabilities:
      video/x-vp8

  SRC template: 'src'
    Availability: Always
    Capabilities:
      video/x-raw
                 format: I420
                  width: [ 1, 2147483647 ]
                 height: [ 1, 2147483647 ]
              framerate: [ 0/1, 2147483647/1 ]


Element Flags:
  no flags set

Element Implementation:
  Has change_state() function: gst_video_decoder_change_state

Element has no clocking capabilities.
Element has no URI handling capabilities.

Pads:
  SINK: 'sink'
    Pad Template: 'sink'
  SRC: 'src'
    Pad Template: 'src'

Element Properties:
  name                : The name of the object
                        flags: readable, writable
                        String. Default: "vp8dec0"
  parent              : The parent of the object
                        flags: readable, writable
                        Object of type "GstObject"
  post-processing     : Enable post processing
                        flags: readable, writable
                        Boolean. Default: false
  post-processing-flags: Flags to control post processing
                        flags: readable, writable
                        Flags "GstVP8DecPostProcessingFlags" Default: 0x00000403, "mfqe+demacroblock+deblock"
                           (0x00000001): deblock          - Deblock
                           (0x00000002): demacroblock     - Demacroblock
                           (0x00000004): addnoise         - Add noise
                           (0x00000400): mfqe             - Multi-frame quality enhancement
  deblocking-level    : Deblocking level
                        flags: readable, writable
                        Unsigned Integer. Range: 0 - 16 Default: 4
  noise-level         : Noise level
                        flags: readable, writable
                        Unsigned Integer. Range: 0 - 16 Default: 0
  threads             : Maximum number of decoding threads
                        flags: readable, writable
                        Unsigned Integer. Range: 1 - 16 Default: 0

最相关的部分是:

  • Pad Templates:这个列表列出了该元素可以拥有的所有类型的Pad,以及它们的功能。这是您查找元素是否可以与另一个元素链接的地方。在这种情况下,它只有一个接收器Pad模板,只接受video/x-vp8(以VP8格式编码的视频数据)和只有一个源Pad模板,产生video/x-raw(解码后的视频数据)。
  • Element Properties:这个列表列出了元素的属性,以及它们的类型和可接受的值。

要获取更多信息,您可以查看gst-inspect-1.0文档页面

gst-discoverer-1.0

此工具是基本教程9:媒体信息收集中显示的GstDiscoverer对象的包装器。它从命令行接受一个URI,并打印GStreamer可以提取的所有有关媒体的信息。它有助于找出用于生成媒体的容器和编解码器是什么,因此需要将哪些元素放入管道中进行播放。
使用gst-discoverer-1.0 --help获取可用选项的列表,这些选项基本上控制输出的详细程度。

让我们看一个例子:

gst-discoverer-1.0 https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm -v

Analyzing https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm
Done discovering https://gstreamer.freedesktop.org/data/media/sintel_trailer-480p.webm
Topology:
  container: video/webm
    audio: audio/x-vorbis, channels=(int)2, rate=(int)48000
      Codec:
        audio/x-vorbis, channels=(int)2, rate=(int)48000
      Additional info:
        None
      Language: en
      Channels: 2
      Sample rate: 48000
      Depth: 0
      Bitrate: 80000
      Max bitrate: 0
      Tags:
        taglist, language-code=(string)en, container-format=(string)Matroska, audio-codec=(string)Vorbis, application-name=(string)ffmpeg2theora-0.24, encoder=(string)"Xiph.Org\ libVorbis\ I\ 20090709", encoder-version=(uint)0, nominal-bitrate=(uint)80000, bitrate=(uint)80000;
    video: video/x-vp8, width=(int)854, height=(int)480, framerate=(fraction)25/1
      Codec:
        video/x-vp8, width=(int)854, height=(int)480, framerate=(fraction)25/1
      Additional info:
        None
      Width: 854
      Height: 480
      Depth: 0
      Frame rate: 25/1
      Pixel aspect ratio: 1/1
      Interlaced: false
      Bitrate: 0
      Max bitrate: 0
      Tags:
        taglist, video-codec=(string)"VP8\ video", container-format=(string)Matroska;

Properties:
  Duration: 0:00:52.250000000
  Seekable: yes
  Tags:
      video codec: VP8 video
      language code: en
      container format: Matroska
      application name: ffmpeg2theora-0.24
      encoder: Xiph.Org libVorbis I 20090709
      encoder version: 0
      audio codec: Vorbis
      nominal bitrate: 80000
      bitrate: 80000

结论

本教程显示:

  • 如何使用gst-launch-1.0工具从命令行构建和运行GStreamer管道。
  • 如何使用gst-inspect-1.0工具找出可用的GStreamer元素及其功能。
  • 如何使用gst-discoverer-1.0发现媒体文件的内部结构。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值