首页 > 其他分享 >Basic tutorial 10: GStreamer 工具

Basic tutorial 10: GStreamer 工具

时间:2023-03-08 20:44:30浏览次数:45  
标签:10 1.0 gst GStreamer element Pad video tutorial

Basic tutorial 10: GStreamer tools

目标

GStreamer附带了一系列工具,从基本必备的工具到方便灵活的小工具,应有尽有。本章教程无代码,将讲解如下内容:

  • 无需任何C代码,如何从命令行构建和运行一个GStreamer的pipelines
  • 如何找出可用的GStreamer elements(元素)及其capabilities(能力)
  • 如何发现媒体文件的内部结构

gst-launch-1.0

该工具接受文本形式描述的pipeline,实例化它,并且将此pipeline设置为PLAYING状态。它可以让你在使用GStreamer API调用前迅速的验证给定的pipeline是否能正常工作。

请记住,它只能创建简单的pipeline(管道)。特别是,它只能模拟管道与应用程序在一定级别上的交互。在任何情况下,快速测试pipeline(管道)都非常方便,全球的GStreamer开发人员每天都在使用它。

请注意,gst-launch-1.0主要是作为开发人员的调试工具。你不应该使用它构建应用程序。你应该使用GStreamer的APIgst_parse_launch()函数来构建管道。

尽管构建pipeline的描述规则非常简单,但是包含多个elements连接的描述规则可能又会变得复杂起来。

gst-launch-1.0的命令行包含一个选项列表,后面跟着一个PIPELINE-DESCRIPTION。下面给出了一些简化的说明,请参阅gst-launch-1.0的参考页上的完整文档。

Elements(元素)

简单来说,PIPELINE-DESCRIPTION是由感叹号(!)分隔开的elements类型列表,如下面这个示例:

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

你应该看到一个带有动画视频模式的窗口。在终端上使用CTRL+C停止程序。这个实例创建了一个videotestsrc的element(生成测试视频的element),一个videoconvert的element(原始视频格式转化的element,确保在它左右两端的element可以相互理解,其实就是协商成功)和一个autovideosink的element(根据系统软硬件环境自动选择合适的video sink)。然后,GStreamer尝试按照列出的顺序将各element连接起来(将左边element的src连到右边element的sink)。如果element有多个可用的Pad,这时会尝试通过PadCaps来匹配兼容的Pad对(左边element的src和右边element的sink)。

Properties(属性)

Properties可用附加到Elements后面,格式为property=value(可指定多个property,用空格分隔)。使用gst-inspect-1.0工具(下面将介绍)可查看element的可用property。

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

您应该会看到一个由圆圈组成的静态测试视频。

Named elements(有名元素)

之前的教程说过任何一个element都包含一个name属性,它是一个字符串,继承自GstObject。可以使用name属性命名element,这样就可以创建涉及多分支的复杂pipeline。可以通过names引用在之前描述中创建的element,并且对于使用具有多个输出pad的element,names是必不可少的,例如demuxers或tee。

引用已命名的element时只要在它的names后面跟个点号(.)。示例如下:

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

您应该看到两个视频窗口,显示相同的测试视频。如果你只看到一个,试着移动它,因为它可能在第二个窗口的顶部。

这个例子实例化了一个videotestsrc,它链接到一个videoconvertvideoconvert又链接到一个tee(还记得基础教程7:多线程和Pad可用性,tee将所有通过其输入Pad的内容复制到每个输出Pad)。tee被简单地命名为“t”(使用name属性),然后链接到一个queue和一个autovideosink。同样的tee也用t.来引用。’(注意这个点),然后链接到第二个queue和第二个autovideosink

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

Pads(链接点)

在链接两个element时,您可能希望直接指定Pad,而不是让GStreamer选择使用哪个Pad。你可以在element名称后加上一个点加上Pad名称(类似于结构体的成员引用,它必须是一个namedelement)来做到这一点。使用gst-inspect-1.0工具了解element的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_0 ! matroskamux ! filesink location=sintel_video.mkv

包含媒体数据的文件一般叫做container,例如mp4,ogg,avi等。它们可以包含1个或者多个流,如视频,音频,字幕,同类型的流也可以有多个存在。

上面例子使用souphttpsrc从网络上获取一个媒体文件,格式是webm。我们使用matroskademux打开这个container文件,此文件包含音频和视频,因此matroskademux会生成2个输出类型的pad(src pad),会被自动命名为video_0audio_0

为啥会是这种格式的pad名呢?通过gst-inspect-1.0看到matroskademuxPad Templates:

Pad Templates:
SRC template: 'video_%u'
Availability: Sometimes
Capabilities:
ANY

SRC template: 'audio_%u'
Availability: Sometimes
Capabilities:
ANY

SRC template: 'subtitle_%u'
Availability: Sometimes

SRC template就指定了它的命名格式,类似于printf的格式化

我们将video_0链接到一个matroskamux element,将视频流重新打包到一个新的container中,最后将其链接到一个filesink,该element将把视频流写入名为“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中。

注意,在上面的两个例子中,没有媒体文件被解码或播放。我们只是从一个容器移动到另一个容器(多次进行demux和mux操作)。

这里又涉及到一个概念mux和demux,复用和解复用。从一个container中分离出流的过程就叫做demux,把1个或多个流整到一个container的过程就叫mux。

需要注意,这里为啥处理视频选择matroskamux, matroskademu,处理音频使用vorbisparse?其实是根据sintel_trailer-480p.webm这个文件来的,为了方便演示,提前获取了这个container里面包含的流的格式,然后直接使用对应格式的muxer、demuxer、parser。正常情况下,是通过一个叫findtype的element探测的。使用GStreamer的另一个工具gst-discoverer-1.0可以查看container的里面包含的流信息。

我们把这个文件下下来,然后用gst-discoverer-1.0查看

wget https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm
gst-discoverer-1.0 sintel_trailer-480p.webm
Analyzing file:///home/a/Videos/sintel_trailer-480p.webm
Done discovering file:///home/a/Videos/sintel_trailer-480p.webm

Topology:
  container: WebM
    audio: Vorbis
    video: VP8

Properties:
  Duration: 0:00:52.250000000
  Seekable: yes
  Live: no
  Tags: 
      container format: Matroska
      language code: en
      title: Audio, Sintel Trailer, Audio, Audio, Sintel Trailer
      encoder: Xiph.Org libVorbis I 20090709
      bitrate: 80000
      artist: Durian Open Movie Team
      copyright: (c) copyright Blender Foundation | durian.blender.org
      license: Creative Commons Attribution 3.0 license
      video codec: VP8 video
      application name: ffmpeg2theora-0.24
      encoder version: 0
      audio codec: Vorbis
      nominal bitrate: 80000

Caps filters

标签:10,1.0,gst,GStreamer,element,Pad,video,tutorial
From: https://www.cnblogs.com/thammer/p/17196196.html

相关文章

  • 【DP】LeetCode 剑指 Offer 10- I. 斐波那契数列
    题目链接剑指Offer10-I.斐波那契数列思路递推,思路可以参考剑指Offer10-II.青蛙跳台阶问题代码classSolution{publicintfib(intn){inta......
  • P3879 [TJOI2010] 阅读理解
    查找单词个数样例:39youareagoodboyhahaoyeah13omygodyoulikebleachnarutoonepieceandsodoi11butidonotthinkyouwillgetallthepoin......
  • Windows10系统配置Hyper-V虚拟机
    Windows10或Windows11系统的专业版、企业版或教育版,可以启用内置Hyper-V功能并创建虚拟机。如果您运行的是Windows11或Windows10的家庭版,Hyper-V功......
  • 卷积神经网络预测Cifar10
    搭建卷积神经网络导入模块fromkeras.datasetsimportcifar10importnumpyasnpfromkeras.utilsimportnp_utilsimportmatplotlib.pyplotaspltfromkeras.mod......
  • centos8-x86_64安装kylinv10-arrch64
    1.vmwareesxi安装centos8,开启内核虚拟化2.安装qemu-system-arrch64操作:wgethttps://download.qemu.org/qemu-2.11.0.tar.xztarxvJfqemu-2.11.0.tar.xzcdqem......
  • 51Nod1019 逆序数(归并排序详解)
    逆序对给定一个1-N的排列A1,A2,...AN,如果Ai和Aj满足i<j且Ai>Aj,我们就称(Ai,Aj)是一个逆序对。 求A1,A2...AN中所有逆序对的数目。input 第一行包含一个整数N......
  • PAT Basic 1015. 德才论
    PATBasic1015.德才论1.题目描述:宋代史学家司马光在《资治通鉴》中有一段著名的“德才论”:“是故才德全尽谓之圣人,才德兼亡谓之愚人,德胜才谓之君子,才胜德谓之小人。凡......
  • 教你E103-W10串口转WiFi模块的无线透传应用教程
    以下为E103-W10作为softAP实现UDP串口服务器无线数据透传的举例,E103-W10作为station可同理实现透传。1.透传默认仅在TCP client单连接或UDP传输模式时,支持透传。1.......
  • datahub 采集oracle数据 DPI-1047: Cannot locate a 64-bit Oracle Client library: l
    datahub命令行采集oracle报错如下:datahubingest-coracle.ymlsqlalchemy.exc.DatabaseError:(cx_Oracle.DatabaseError)DPI-1047:Cannotlocatea64-bitOr......
  • 10. 深入面向对象 - 2
    10.深入面向对象-2隐藏数据引入classCat(object):def__init__(self,new_name,new_age):self.name=new_nameself.age=new_aged......