目标
GStreamer附带了一套工具,从方便到绝对必要。本教程中没有代码,只要坐下来放松一下,我们就会教你:
- 如何从命令行构建和运行GStreamer管道,完全不使用C !
- 如何找出可用的GStreamer元素及其功能capabilities。
- 如何发现媒体文件的内部结构。
介绍
这些工具在GStreamer二进制文件的bin目录中。用户需要移动到该目录才能执行它们,因为它没有被添加到系统的PATH环境变量中(以避免过度污染它)。
只需打开一个终端(或控制台窗口),并转到您的GStreamer安装的bin目录(再次阅读安装GStreamer部分以找到我们的位置),然后您就可以开始输入入本教程中给出的命令。
为了允许在同一个系统中同时存在多个版本的GStreamer,这些工具是版本化的,即在它们的名称后面附加一个GStreamer版本号。这个版本基于GStreamer 1.0,因此这些工具被称为gst-launch-1.0、gst-inspect-1.0和gst-discoverer-1.0
gst-launch-1.0
该工具接受管道的文本描述,将其实例化,并将其设置为播放状态。它允许您在使用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 cap找到两个兼容的Pad。
属性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 tutorial 7: 多线程和Pad可用性》中的内容,tee将通过输入Pad发送的所有内容复制到每个输出Pad)。tee被简单命名为t(使用name属性),然后链接到queue和autovideosink。同一个tee指的是使用“t”。`(注意点),然后链接到第二个queue。
要了解为什么必须使用queue,请看Basic tutorial 7: 多线程和Pad可用性。
Pads
在链接link两个元素时,您可能希望直接指定Pad,而不是让GStreamer选择使用哪个Pad。为此,可以在元素名称(它必须是一个命名元素)后面加上一个点号和Pad名称。使用gst-inspect-1.0工具获取元素的pad名称。
例如,当你想从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_00 ! matroskamux ! filesink location=sintel_video.mkv
使用souphttpsrc从互联网获取媒体文件,它是webm格式的(一种特殊的Matroska容器,请参阅基本教程2:GStreamer概念)。然后我们使用matroskademux打开容器。该媒体包含音频和视频,因此matroskademux将创建两个输出pad,名为video_00和audio_00。我们将video_00链接到一个matroskamux元素,以便将视频流重新打包到一个新的容器中,最后将其链接到一个filesink,它将把视频流写入名为“sintel_video”的文件。(location属性指定了文件的名称)。
总而言之,我们获取了一个webm文件,剥离了音频,并生成了一个包含视频的matroska文件。如果我们只想保留音频:
<
本文介绍了GStreamer中的三个实用工具:gst-launch-1.0、gst-inspect-1.0和gst-discoverer-1.0。通过这些工具,用户可以从命令行构建和运行GStreamer管道,了解GStreamer元素的功能,并发现媒体文件的内部结构。
最低0.47元/天 解锁文章
4170

被折叠的 条评论
为什么被折叠?



