GStreamer Basic tutorial 学习笔记(十)

GStreamer工具

目标

  1. 通过命令行构建和运行GStreamer管道(gst-launch-1.0)。
  2. 查找可用的GStreamer元素及其功能(gst-inspect-1.0)。
  3. 发现(discover)媒体文件的内部结构(gst-discoverer-1.0)。

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

只需打开一个终端(或控制台窗口),进入您的GStreamer安装的bin目录(再次阅读“安装GStreamer”部分以找到其位置),然后您就可以开始输入本教程中给出的命令了。

  • 工具包位置:Linux环境下,找到gstreamer_cerbero包下载的文件位置:前缀目录/gstreamer_cerbero/package/1.21/bin
  • 推荐设置为环境变量,export PATH=${PATH}:/{你的目录}/gstreamer_cerbero/package/1.21/bin

函数与知识点

  1. gst-launch-1.0 介绍:gst-launch-1.0是一个构建和运行基本GStreamer管道的工具。简单形式的PIPELINE-DESCRIPTION是由感叹号(!)分隔的元素列表。属性可以以property=value的形式附加到元素。
    注意:gst-launch-1.0主要是开发人员的调试工具。你不应该在其之上构建应用程序。相反,使用GStreamer API的gst_parse_launch()(见Basic tutorial 1)函数作为从管道描述中构建管道的简便方法。

  2. name 介绍:元素的属性之一。命名的元素使用它们的名称后跟一个点进行引用(例如:given_name.)。可以使用name属性给元素命名,这样可以创建涉及分支的复杂管道。命名允许链接到先前在描述中创建的元素,并且对于使用具有多个输出Pad的元素(例如解复用器(demuxers)或分支器(tees))是不可或缺的。

  3. souphttpsrc 功能:这个插件从由URI指定的远程位置读取数据。支持的协议有’http’和’https’。
    说明:

    1. 必须通过URL指定HTTP代理。如果设置了“http_proxy”环境变量,则使用其值。如果使用libsoupGNOME集成功能构建,将使用GNOME代理配置,否则将使用代理自动检测。proxy属性可以用于覆盖默认设置。
    2. 如果设置了iradio-mode属性,并且位置是一个HTTP资源,souphttpsrc将向服务器发送特殊的Icecast HTTP头以请求额外的Icecast meta-information(元信息)。如果服务器不是Icecast服务器,则它的行为就好像iradio-mode属性未设置一样。如果是,则souphttpsrc将以application/x-icy的媒体类型输出数据,在这种情况下,您需要使用icydemux元素作为后续元素来提取Icecast元数据并确定底层媒体类型。

    例如: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_0audio_0。我们将video_0链接到一个matroskamux元素,将视频流重新打包成一个新的容器,最后将其链接到一个filesink,该sink会将流写入名为"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
  4. matroskamux 介绍:matroskamux是将不同的输入流混合成一个Matroska文件的复用器。

  5. vorbisparse 介绍:

    1. vorbisparse元素将解析Vorbis流的头数据包,并将它们作为流头信息放入caps中。这在使用multifdsink时非常有用,当您希望将实时的Vorbis流传送给多个客户端时,每个客户端在消费Vorbis数据包之前必须首先接收到流头信息。
    2. 该元素还确保推送出去的缓冲区具有正确的时间戳,并设置它们的偏移和偏移结束。vorbisparse输出的缓冲区具有oggmux期望接收的所有元数据,这允许您重新复用ogg/vorbis文件。

    注意:视频流无需使用此元素,音频流需要使用此元素,以从流中提取信息放入Pad Caps

  6. Caps Filter 介绍:Caps Filter的行为类似于一个什么都不做的传递元素,它只接受具有给定Caps的媒体,有效地解决了不确定性。在这个示例中,在matroskademuxmatroskamux之间添加了一个video/x-vp8Caps Filter,以指定我们对matroskademux生成video/x-vp8视频的输出Pad感兴趣。

    说明:要了解一个元素接受和产生的Caps,可以使用gst-inspect-1.0工具。要查看特定文件中包含的Caps,可以使用gst-discoverer-1.0工具。要查看一个元素对于特定管道产生的Caps,可以像平常一样运行gst-launch-1.0,并使用-v选项打印Caps信息。

  7. theoraenc 功能:该元素将原始视频编码为Theora流。Theora是由Xiph.org基金会维护的无版权视频编解码器,基于VP3编解码器。
    说明:

    1. Theora编解码器内部仅支持对在X和Y方向上均为16像素倍数的图像进行编码。但是,完全可以对其他尺寸的图像进行编码,因为可以设置任意矩形裁剪区域。如果尺寸不是16像素倍数,该元素将自动设置正确的裁剪区域
    2. 为了控制编码的质量,可以使用比特率(bitrate)和质量(quality)属性。这两个属性是互斥的。设置比特率属性将生成恒定比特率(CBR)的流,而设置质量属性将生成可变比特率(VBR)的流。
    3. 尤其在转码和将Theora放入Ogg容器时,通常需要在theoraenc之前使用videorate元素。
  8. oggmux 功能:该元素将流(音频和视频)合并到ogg文件中。

  9. flacenc 功能:flacenc用于编码FLAC流。
    介绍:FLAC是一种无损音频编解码器。FLAC音频可以直接写入文件,也可以嵌入到容器中,例如oggmuxmatroskamux

  10. gst-inspect-1.0 介绍:gst-inspect-1.0是一个工具,用于打印可用的GStreamer插件的信息,特定插件的信息,或特定元素的信息。当没有PLUGINELEMENT参数执行时,gst-inspect-1.0将打印所有插件和元素的列表以及摘要。当使用PLUGINELEMENT参数执行时,gst-inspect-1.0将打印有关该插件或元素的信息。
    提示:非常的好用,不懂的GStreamer问题,除了google还可以问他。

  11. gst-discoverer-1.0 介绍:这个工具是GstDiscoverer对象的包装器,该对象在基础教程9中出现过。它接受命令行中的URI,并打印GStreamer可以提取的有关媒体的所有信息。它对于找出用于生成媒体的容器和编解码器以及在管道中放置哪些元素来播放它非常有用。
    提示:使用gst-discoverer-1.0 --help可以获取可用选项的列表,给出的选项可以控制输出的详细程度。

你可能感兴趣的:(GStreamer学习笔记,c++,GStreamer,clearrtc,服务器)