文章目录

  • 1. Goal
  • 2. 介绍
  • 3. gst-lanuch-1.0
    • 3.1 Elements
    • 3.2 Properties
    • 3.3 Named elements
    • 3.4 Pads
    • 3.5 Caps filters
    • 3.6 Examples
  • 4. gst-inspect-1.0
  • 5. gst-discoverer-1.0
  • 6. Conclusion

1. Goal

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

  • 如何在不使用C的情况下从命令行构建和运行GStreamer管道
  • 如何找出可用的GStreamer元素及其功能
  • 如何发现媒体文件的内部结构。

2. 介绍

这些工具位于GStreamer二进制文件的bin目录中。 您需要移动到该目录来执行它们,因为它没有添加到系统的PATH环境变量中(以避免过多污染它)。
只需打开一个终端(或控制台窗口)并转到GStreamer安装的bin目录(再次阅读Installation GStreamer部分,以找到我们的位置),就可以开始键入本教程中给出的命令了。
为了允许多个版本的GStreamer在同一系统中共存,对这些工具进行了版本控制,即,在其名称后附加了一个GStreamer版本号。 此版本基于GStreamer 1.0,因此这些工具称为gst-launch-1.0,gst-inspect-1.0和gst-discoverer-1.0。

3. gst-lanuch-1.0

该工具接受pipeline的文本描述,实例化它,并将其设置为PLAYING状态。 它允许您在使用GStreamer API调用进行实际实现之前,快速检查给定的pipeline是否有效。
请记住,它只能创建简单的pipeline。 特别是,它最多只能模拟pipeline与应用程序的交互。 无论如何,快速测试pipeline非常方便,并且全世界的GStreamer开发人员每天都在使用它。
请注意,gst-launch-1.0主要是开发人员的调试工具。 您不应该在此基础上构建应用程序。 而是使用GStreamer API的gst_parse_launch函数作为从pipeline描述构造pipeline的简便方法。
尽管构造pipeline描述的规则非常简单,但是多个元素的串联可以使这些描述很快变得像黑魔法。不要害怕,因为每个人最终都会学习gst-launch-1.0语法。
gst-launch-1.0的命令行由一个选项列表和一个PIPELINE-DESCRIPTION组成。 接下来给出一些简化的说明,请参阅参考页上有关gst-launch-1.0的完整文档。

以下命令需要把autovideosink替换成ximagesink能成功运行

3.1 Elements

简而言之,PIPELINE-DESCRIPTION是由感叹号(!)分隔的元素类型列表。继续并输入以下命令:

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

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

3.2 Properties

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

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

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

3.3 Named elements

可以使用name属性来命名elements,这样可以创建涉及分支的复杂pipeline。名称允许链接到描述中先前创建的elementes,并且对于使用具有多个输出pad的elements(例如,解复用器或tee)必不可少。
使用其名称后跟一个点来引用已命名elements。

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

您应该看到两个视频窗口,显示相同的示例视频模式。 如果只看到一个,请尝试将其移动,因为它可能位于第二个窗口的顶部。

3.4 Pads

您可能不希望让GStreamer选择在链接两个elements时要使用哪个Pad,而是可以直接指定Pad。 您可以通过在elements名称之后添加点号和Pad名称(必须是命名elements)来做到这一点。 使用gst-inspect-1.0工具了解pad的名称。
例如,当您要从解复用器中检索一个特定的流时,这很有用:

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

这使用webm格式(一种特殊的Matroska容器,请参阅基本教程2:GStreamer概念)使用souphttpsrc从Internet上获取媒体文件。 然后,我们使用matroskademux打开容器。 该媒体包含音频和视频,因此matroskademux将创建两个输出Pad,分别名为video_0和audio_0。 我们将video_0链接到matroskamux元素,以将视频流重新打包到一个新的容器中,最后将其链接到一个filesink,filesink会将流写入一个名为"sintel_video.mkv"的文件中(location属性指定了 文件)。
总之,我们取了一个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中。
注意,在以上两个示例中,没有媒体被解码或播放。 我们刚从一个容器移动到另一个容器(再次进行多路分解和重新多路复用)。

3.5 Caps filters

当一个elements具有多个输出pads时,可能会发生与下一个element的链接不明确的情况:下一个element可能具有多个兼容的输入pad,或者其输入pads可能与所有输出的pads兼容。 在这些情况下,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 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 filters的行为就像是传递元素,它什么都不做,只接受具有给定Caps的媒体,从而有效地解决了歧义。 在此示例中,在matroskademux和matroskamux之间,我们添加了一个video/x-vp8 Caps filters,以指定我们对可以产生这种视频的matroskademux的pad感兴趣。
要找出elements接受并产生的Caps,请使用gst-inspect-1.0工具。 要查找包含在特定文件中的Caps,请使用gst-discoverer-1.0工具。 要找出element为特定pipeline生成的Caps,请照常运行gst-launch-1.0,并带有–v选项以打印Caps信息。

3.6 Examples

  1. 使用playbin播放媒体文件(如基本教程1:Hello world!):
gst-launch-1.0 playbin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
  1. 具有音频和视频的完全操作的播放管道(与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
  1. 转码pipeline打开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.
  1. 重新缩放管道。 只要输入和输出caps的帧大小不同,videoscale元素都会执行重新缩放操作。 输出pad由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

4. gst-inspect-1.0

参考页
有三种操作模式:

  • 不带参数的情况下,它将列出所有可用的元素类型,即可以用来实例化新元素的类型
  • 使用文件名作为参数,它将文件视为GStreamer插件,尝试将其打开,并列出其中描述的所有元素
  • 以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 Template:此列表列出了此元素可以具有的所有pad及其caps。 您可以在此处查找某个element是否可以与另一个element链接。 在这种情况下,它只有一个sink pad templates,仅接受video/x-vp8(VP8格式的编码视频数据),只有一个src pad templates,产生video/x-raw(解码的视频数据)
  • Element Properties:列出element的属性及其类型和可接受的值

5. gst-discoverer-1.0

此工具是对基础教程9的包装。 它从命令行接受URI,并打印有关GStreamer可以提取的媒体的所有信息。找出使用了哪些容器和编解码器来制作媒体,以及因此需要将哪些elements放入pipeline中播放媒体是很有用的。
使用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

6. Conclusion

本教程显示:

  • 如何使用gst-launch-1.0工具从命令行构建和运行GStreamer pipeline
  • 如何使用gst-inspect-1.0工具找出可用的GStreamer elements及其caps
  • 如何使用gst-discoverer-1.0发现媒体文件的内部结构

Gstreamer基础教程10: Gstreamer 工具相关推荐

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

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

  2. Gstreamer基础教程10:GStreamer tools

    文章目录 目标 一.Introduction(简介) 二.gst-launch-1.0 1.Elements 2.Properties(属性) 3.Named elements(元素重命名) 4.Pa ...

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

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

  4. 【GStreamer学习】之GStreamer基础教程

    目标 没有什么比在屏幕上打印出"Hello World"更能获得对软件库的第一印象了! 但是由于我们正在学习多媒体框架,所以我们将输出"Hello World!" ...

  5. 【GStreamer开发】GStreamer基础教程07——多线程和Pad的有效性

    目标 GStreamer会自动处理多线程这部分,但在有些情况下,你需要手动对线程做解耦.本教程会教你怎样才能做到这一点,另外也展示了Pad的有效性.主要内容包括: 如何针对部分的pipeline建立一 ...

  6. ArcGIS二次开发基础教程(10):三维分析

    ArcGIS二次开发基础教程(10):三维分析 坡度分析 请务必学会使用帮助文档!!! //DEM数据的坡度分析 将分析结果添加到地图上 //首先获取DEM数据,方法有很多例如从个人地理数据库获取,也 ...

  7. Sketch基础教程之文字工具详细介绍

    Sketch 是最强大的移动应用矢量绘图设计工具,对于网页设计和移动设计者来说,比PhotoShop好用N倍!尤其是在移动应用设计方面,Sketch 的优点在于使用简单,学习曲线低,并且功能更加强大易 ...

  8. Gstreamer基础教程13:Playback Speed

    文章目录 1.Goal 2.介绍 3. A Trick mode player 3.1 Compile 3.2 Code 4.Analyze 5.讨论 1.Goal 快进.倒放和慢动作都是所谓的技巧模 ...

  9. GStreamer基础教程04 - 动态连接Pipeline

    摘要 在以前的文章中,我们了解到了2种播放文件的方式:一种是在知道了文件的类型及编码方式后,手动创建所需Element并构造Pipeline:另一种是直接使用playbin,由playbin内部动态创 ...

最新文章

  1. button 去掉原生边框
  2. css控制显示行数,多出部分显示省略号
  3. Web开发需弄懂的知识点(.NET)
  4. MySQL 报 Can't create more than max_prepared_stmt_count statements
  5. import导入工程时出现error:Description Resource Path Location Type Target runtime com.genuitec.runtime.gener
  6. 基于query语句解析mysql工作原理
  7. 在Java中进行输入验证时用错误通知替换异常
  8. 五种基于RGB色彩空间统计的皮肤检测算法
  9. html 上标下标 特殊字符等
  10. 毕设项目 - 基于SSM的教师工作考核绩效管理系统(含源码+论文)
  11. 计算机网络故障检测,计算机网络故障处理
  12. 怎么制作GIF图片并添加文字
  13. OLAP 系统选型,选 Apache Kylin 还是 ClickHouse?
  14. 英语思维导图大全 介词(七)
  15. javascript网页特效(一)
  16. 上传附件,附件类型问题
  17. hackinglab.cn脚本关之三
  18. 架构师之路--从原理角度来分析性能
  19. 台式计算机的主流配置,现在台式电脑主流配置是什么配置?
  20. 打开相机拍照或从相册中选择照片

热门文章

  1. 学计算机应用不会打字怎么办,电脑不能打字是怎么回事【 解决方案】
  2. 【Nginx】为什么说Nginx是一个反向代理服务器
  3. CVPR 2021 论文大盘点-图像修复篇
  4. PHP基本语法(1)
  5. 【测试用例练习】水杯、电梯、钢笔 测试用例
  6. stylegan2:analyzing and improving the image quality of stylegan
  7. Java+SSM会议室预约系统(含源码+论文+答辩PPT等)
  8. [渝粤教育] 中国地质大学 操作系统原理(新) 复习题 (2)
  9. C语言_有限状态机(FSM)
  10. 仿咔叽分享页层级滑动效果