目标

GStreamer自带了一些使用方便和完全必要的工具。本教程无代码,并且教我们如下内容:

  • 如何在不适用C语言,使用命令行来构建并运行GStreamer管道。
  • 如何找出GStreamer可用的元素及其相应元素的capabilities.
  • 如何发现媒体文件的内部结构。

介绍

这些工具位于 GStreamer 二进制文件的 bin 目录中。所以,如果想执行这些工具,除了将此目录添加到系统环境变量($PATH),否则只能在bin目录中命令行执行相关工具。

为了允许GStreamer多版本在同一个系统中共存,这些工具已经版本化,即:一个GStreamer版本号取决于他们的名称。当前版本是基于GStreamer 1.0,所以这些工具被叫做 gst-launch-1.0gst-inspect-1.0 和 gst-discoverer-1.0 。

gst-launch-1.0

此工具接受管道的文本描述,将文本管道实例化,并将管道设置为 PLAYING 状态。它允许你在使用GStreamer API 构建实际实现的管道之前,去快速的检查这个给出的管道是否工作(ps[译者理解]:意思是在使用GStreamer API构建管道前,可以使用gst-launch-1.0命令检验已经给出的管道是否可用)。

请记住,它只能创建简单的管道。特别是,它只能模拟管道与应用程序的交互到一定程度。在任何情况下,快速测试管道都非常方便,世界各地的 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(一个进行原始视频格式转换的元素,确保其他元素可以相互理解),和一个自动视频接收器(呈现视频的窗口)。然后,GStreamer 尝试将每个元素的输出链接到描述中出现在其右侧的元素的输入。如果有多个输入或输出Pad可用,则使用Pad Caps来查找两个兼容的Pads。

Properties

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

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

会看到如上的一个由圆圈组成的静态视频模式。

Named elements

元素可以使用 name 属性命名,这样可以创建涉及分支的复杂管道。名称允许链接到之前在描述中创建的元素,并且对于使用具有多个输出pad的元素是必不可少的,像demuxer 或tee,例如:

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

您应该看到两个视频窗口,显示相同的示例视频模式。如果您只看到一个,请尝试移动它,因为它可能位于第二个窗口的顶部。
这个示例实例化了一个videotestsrc,链接到一个videoconvert,链接到一个tee(请记住在Basic教程7:多线程和Pad可用性中,tee将通过其输入Pad传入的所有内容复制到其每个输出Pad)。tee被简单地命名为“t”(使用name属性),然后链接到队列和自动视频接收器。同样的t指的是't.'(注意'.'),然后链接到第二个队列和第二个自动视频接收器。

Pads

与其让 GStreamer 在链接两个元素时选择使用哪个 Pad,不如直接指定 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

这使用 souphttpssrc 从互联网获取媒体文件,该文件采用 webm 格式(一种特殊的 Matroska 容器)然后我们使用 matroskademux 打开容器。该媒体包含音频和视频,因此 matroskademux 将创建两个输出 Pad,分别命名为 video_0 和 audio_0。我们将 video_0 链接到 matroskamux 元素以将视频流重新打包到一个新容器中,最后将其链接到一个文件接收器,后者会将流写入名为“sintel_video.mkv”的文件(位置属性指定文件名)。

总而言之,我们采用了一个 webm 文件,去除了音频,并生成了一个带有视频的新 matroska 文件。如果我们只想保留音频:

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。

请注意,在上述两个示例中,没有媒体被解码或播放。我们刚刚从一个容器移动到另一个容器(再次解复用和重新复用)。

Caps filters

当一个元素有多个输出pad时,可能会发生下一个元素的链接不明确的情况:下一个元素可能有多个兼容的输入pad,或者其输入pad可能与所有输出pad的 Pad Caps 兼容。在这种情况下,GStreamer 将使用第一个可用的 pad 进行链接,这几乎等于说 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

这与上一个示例中的媒体文件和解复用器相同。 filesink 的输入 Pad Caps 是 ANY,这意味着它可以接受任何类型的媒体。matroskademux 的两个输出pad中的哪一个将链接到文件接收器?video_0 还是audio_0?你不可能知道。

但是,您可以通过使用named pads(如上一小节中所述)或使用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 过滤器的行为就像一个传递元素,它什么都不做,只接受具有给定 Caps 的媒体,有效地解决了歧义。在这个例子中,在 matroskademux 和 matroskamux 之间我们添加了一个 video/x-vp8 Caps Filter 来指定我们对 matroskademux 的输出垫感兴趣,它可以产生这种视频。

要找出元素接受和生成的 Caps,请使用 gst-inspect-1.0 工具。要找出特定文件中包含的大写字母,请使用 gst-discoverer-1.0 工具。要找出元素为特定管道生成的 Caps,请照常运行 gst-launch-1.0,并使用 –v 选项打印 Caps 信息。

Examples

使用playbin 显示一个媒体文件:

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 元素就会执行重新缩放操作。输出上限由上限过滤器设置为 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

这个工具有三种操作模式:

  • 不带参数,它会列表出所有有效元素类型,也就是说,您可以用来实例化新元素的类型。
  • 以文件名作为参数,它将文件视为一个Gstreamer插件,尝试打开它并列出其中描述的所有元素。
  • 以元素名作为参数,则它会列出这个元素的所有信息。

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

gst-inspect-1.0 vp8decFactory Details:Rank                     primary (256)Long-name                On2 VP8 DecoderKlass                    Codec/Decoder/VideoDescription              Decode VP8 video streamsAuthor                   David Schleef <ds@entropywave.com>, Sebastian Dröge <sebastian.droege@collabora.co.uk>Plugin Details:Name                     vpxDescription              VP8 pluginFilename                 /usr/lib64/gstreamer-1.0/libgstvpx.soVersion                  1.6.4License                  LGPLSource module            gst-plugins-goodSource release date      2016-04-14Binary package           Fedora GStreamer-plugins-good packageOrigin URL               http://download.fedoraproject.orgGObject+----GInitiallyUnowned+----GstObject+----GstElement+----GstVideoDecoder+----GstVP8DecPad Templates:SINK template: 'sink'Availability: AlwaysCapabilities:video/x-vp8SRC template: 'src'Availability: AlwaysCapabilities:video/x-rawformat: I420width: [ 1, 2147483647 ]height: [ 1, 2147483647 ]framerate: [ 0/1, 2147483647/1 ]Element Flags:no flags setElement Implementation:Has change_state() function: gst_video_decoder_change_stateElement 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 objectflags: readable, writableString. Default: "vp8dec0"parent              : The parent of the objectflags: readable, writableObject of type "GstObject"post-processing     : Enable post processingflags: readable, writableBoolean. Default: falsepost-processing-flags: Flags to control post processingflags: readable, writableFlags "GstVP8DecPostProcessingFlags" Default: 0x00000403, "mfqe+demacroblock+deblock"(0x00000001): deblock          - Deblock(0x00000002): demacroblock     - Demacroblock(0x00000004): addnoise         - Add noise(0x00000400): mfqe             - Multi-frame quality enhancementdeblocking-level    : Deblocking levelflags: readable, writableUnsigned Integer. Range: 0 - 16 Default: 4noise-level         : Noise levelflags: readable, writableUnsigned Integer. Range: 0 - 16 Default: 0threads             : Maximum number of decoding threadsflags: readable, writableUnsigned Integer. Range: 1 - 16 Default: 0

相关章节为:

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

更多信息,请查看documentation page of gst-inspect-1.0

gst-discoverer-1.0

此工具是 GstDiscoverer 对象的包装器。它接受来自命令行的 URI 并打印有关 GStreamer 可以提取的媒体的所有信息。找出用于制作媒体的容器和编解码器,以及您需要将哪些元素放入管道中来播放它,这很有用。

使用 gst-discoverer-1.0 --help 获取可用选项列表,这些选项基本上控制输出的详细程度。

我们看个例子:

gst-discoverer-1.0 https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm -vAnalyzing https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
Done discovering https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
Topology:container: video/webmaudio: audio/x-vorbis, channels=(int)2, rate=(int)48000Codec:audio/x-vorbis, channels=(int)2, rate=(int)48000Additional info:NoneLanguage: enChannels: 2Sample rate: 48000Depth: 0Bitrate: 80000Max bitrate: 0Tags: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/1Codec:video/x-vp8, width=(int)854, height=(int)480, framerate=(fraction)25/1Additional info:NoneWidth: 854Height: 480Depth: 0Frame rate: 25/1Pixel aspect ratio: 1/1Interlaced: falseBitrate: 0Max bitrate: 0Tags:taglist, video-codec=(string)"VP8\ video", container-format=(string)Matroska;Properties:Duration: 0:00:52.250000000Seekable: yesTags:video codec: VP8 videolanguage code: encontainer format: Matroskaapplication name: ffmpeg2theora-0.24encoder: Xiph.Org libVorbis I 20090709encoder version: 0audio codec: Vorbisnominal bitrate: 80000bitrate: 80000

总结

此教程展示了:

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

GStreamer基础教程之GStreamer工具相关推荐

  1. Linux入门基础教程之Linux下软件安装

    Linux入门基础教程之Linux下软件安装 一.在线安装: sudo apt-get install 即可安装 如果在安装完后无法用Tab键补全命令,可以执行: source ~/.zshrc AP ...

  2. 什么是python基础教程-python基础教程之python是什么?概念解析

    Python,是一种面向对象的解释型计算机程序设计语言,由荷兰人Guido van Rossum于1989年发明,第一个公开发行版发行于1991年. Python是纯粹的自由软件, 源代码和解释器CP ...

  3. pgsql数据库默认配置事务类型_PostgreSQL基础教程之:初始化配置

    PostgreSQL基础教程之:初始化配置 时间:2020-04-27 来源: PostgreSQL基础教程之:初始化配置 一.配置pg_hba.conf 先说明客户端认证配置文件pg_hba.con ...

  4. python可以处理多大的数据_科多大数据之Python基础教程之Excel处理库openpyxl详解...

    原标题:科多大数据之Python基础教程之Excel处理库openpyxl详解 科多大数据小课堂来啦~Python基础教程之Excel处理库openpyxl详解 openpyxl是一个第三方库,可以处 ...

  5. python的excell库_扣丁学堂Python基础教程之Excel处理库openpyxl详解

    扣丁学堂Python基础教程之Excel处理库openpyxl详解 2018-05-04 09:49:49 3197浏览 openpyxl是一个第三方库,可以处理xlsx格式的Excel文件.pipi ...

  6. python2.7使用教程_Python 2.7基础教程之:概要介绍

    .. _tut-informal: ************************************************** An Informal Introduction to Pyt ...

  7. GStreamer基础教程10——GStreamer工具

    目标 GStreamer提供了一系列方便使用的工具.这篇教程里不牵涉任何代码,但还是会讲一些有用的内容: 如何在命令行下建立一个pipeline--完全不使用C 如何找出一个element的Capab ...

  8. python pymysql cursors_老雷python基础教程之pymysql学习及DB类的实现

    老雷python教程之pymysql学习及DB类的实现 CREATE TABLE `sky_guest` ( `id` int(11) NOT NULL AUTO_INCREMENT, `title` ...

  9. Gstreamer基础教程10: Gstreamer 工具

    文章目录 1. Goal 2. 介绍 3. gst-lanuch-1.0 3.1 Elements 3.2 Properties 3.3 Named elements 3.4 Pads 3.5 Cap ...

  10. GStreamer基础教程02——GStreamer概念

    上一个教程演示了如何自动生成一个pipeline.这次我们打算用一个个element来手动搭建一个pipeline.我们这个教程会演示: 1. 什么是GStreamer的element以及如何建立一个 ...

最新文章

  1. 老牌医药收割AI红利:先投个15亿美元抢中国人才
  2. 2021爱智先行者—(2)零基础APP开发实例
  3. 【Python】ffmpeg模块处理视频、音频信息
  4. Httpclient处理摘要认证
  5. jmeter 安装详解
  6. 瞎折腾-CentOS 7.4 编译4.16.2版kernel 并安装
  7. python爬虫从入门到放弃-python爬虫从入门到放弃(七)之 PyQuery库的使用
  8. Understand-4.0.877-Linux-64bit.tgz最新版本2017年源代码阅读利器,养眼theme之配置
  9. Linux ssh服务开启秘钥和密码认证
  10. WWW2023即将截稿
  11. matlab ode 初值,关于ODE45初值问题和erf函数的问题
  12. 游戏素材制作篇(一)——使用PR将视频或者动图转化为图片
  13. 1分钟了解什么是枚举/以及枚举的使用
  14. h5 版活体检测、视频活体检测
  15. 2022中国人力资源管理年度观察
  16. 自然辩证法复习题 1
  17. chrome不用翻墙也能用:
  18. 行为驱动开发(BDD)全面介绍
  19. Ubuntu_Ubuntu 12.04下设置笔记本成为wifi热点
  20. uni-app使用i18n实现多语言的切换及国际化开发

热门文章

  1. 计算机视觉隐私安全,震惊:用手机拍照也可以暴露大量个人隐私
  2. linux视频播放器安装程序,新手求助自带视频播放器安装问题
  3. MTK6577+Android之Camera驱动) ~% d
  4. mysql 将年月日转换成年_SQL数据库中怎么将时间格式转换到年和月?
  5. 如何简单的将中文翻译为英文
  6. 886. 可能的二分法
  7. KOF97判定框查看方法
  8. Java使用腾讯企业邮箱发邮件的例子
  9. python seo 采集内容_SEO如何处理采集内容(4)–转自{GoGo闯}
  10. 用proteus来看二极管的压降