GStreamer基础教程之便利的元素

目标

本教程列出了一些值得了解的方便的 GStreamer 元素。它们的范围从允许您轻松构建复杂管道的强大的多合一元素(如playbin),到在调试时非常有用的小帮助元素。

为简单起见,以下示例是使用该gst-launch-1.0工具给出的 。-v如果您想查看正在协商的 Pad Caps,请使用命令行参数。

Bins

这些是 Bin 元素,您将它们视为单个元素,它们负责实例化所有必要的内部管道以完成其任务。

playbin

该元素已在整个教程中广泛使用。它管理媒体播放的所有方面,从源到显示,通过解复用和解码。它非常灵活,有很多选项,有一整套教程专门介绍它。有关更多详细信息,请参阅 Playback tutorials 。

uridecodebin

此元素将来自 URI 的数据解码为原始媒体。它选择一个可以处理给定 URI 方案的源元素并将其连接到一个decodebin元素。它就像一个多路分配器,因此它提供与媒体中发现的流一样多的src pad。

gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! videoconvert ! autovideosink
gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! audioconvert ! autoaudiosink

decodebin

该元素使用可用的解码器和解复用器通过自动插入自动构建解码管道,直到获得原始媒体。它在内部uridecodebin使用,通常使用起来更方便,因为它也创建了合适的源元素。它取代了旧decodebin元素。它就像一个多路分配器,因此它提供与媒体中发现的流一样多的src pad。

gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! decodebin ! autovideosink

File input/output

filesrc

此元素读取本地文件并生成带有ANYCaps 的媒体。如果要获取媒体的正确 Caps,请使用typefind元素或设置totypefind属性filesrc来 探索流TRUE。

filesink

此元素将它接收到的所有媒体写入文件。使用该 location属性指定文件名。

gst-launch-1.0 audiotestsrc ! vorbisenc ! oggmux ! filesink location=test.ogg

Network

souphttpsrc

此元素使用libsoup库通过 HTTP 作为客户端通过网络接收数据。设置要通过location 属性检索的 URL.

gst-launch-1.0 souphttpsrc location=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! decodebin ! autovideosink

Test media generation

这些元素对于检查管道的其他部分是否工作非常有用,通过用这些“保证”工作的测试源之一替换源。

videotestsrc

此元素生成视频模式(可在具有该pattern属性的许多不同选项中进行选择)。用它来测试视频管道。

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

audiotestsrc

此元素产生音频波(可在具有该wave属性的许多不同选项中进行选择)。用它来测试视频管道。

gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink

Video adapters

videoconvert

此元素从一种颜色空间(例如 RGB)转换为另一种颜色空间(例如 YUV)。它还可以在不同的 YUV 格式(例如 I420、NV12、YUY2...)或 RGB 格式排列(例如 RGBA、ARGB、BGRA...)之间进行转换。

这通常是您解决协商问题时的首选。在不需要时,由于其上下游元素已经可以相互理解,因此它以直通模式运行,对性能的影响最小。

根据经验,videoconvert无论何时使用在设计时不知道 Caps 的元素(例如 )autovideosink,或者可能因外部因素而异(例如解码用户提供的文件)时,请始终使用。

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

videorate

此元素采用带时间戳的视频帧的传入流,并生成与源 pad 的帧速率匹配的流。校正是通过丢弃和复制帧来执行的,没有使用花哨的算法来插入帧。

这对于允许需要不同帧速率的元素进行链接非常有用。与其他适配器一样,如果不需要(因为有两个 Pad 都可以同意的帧速率),它会以直通模式运行,不会影响性能。

因此,当实际帧速率在设计时未知时,始终使用它是一个好主意,以防万一。

gst-launch-1.0 videotestsrc ! video/x-raw,framerate=30/1 ! videorate ! video/x-raw,framerate=1/1 ! videoconvert ! autovideosink

videoscale

此元素调整视频帧的大小。默认情况下,元素尝试在源和接收器 Pads 上协商为相同的大小,因此不需要缩放。因此,如果不需要缩放,可以安全地将此元素插入管道中以获得更健壮的行为而无需任何成本。

该元素支持广泛的色彩空间,包括各种 YUV 和 RGB 格式,因此通常能够在管道中的任何地方运行。

如果视频要输出到大小由用户控制的窗口,最好使用videoscale元素,因为并非所有视频接收器都能够执行缩放操作。

gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! videoscale ! video/x-raw,width=178,height=100 ! videoconvert ! autovideosink

Audio adapters

audioconvert

此元素在各种可能的格式之间转换原始音频缓冲区。它支持整数到浮点数转换、宽度/深度转换、符号和字节顺序转换以及通道转换。

就像videoconvert视频一样,您可以使用它来解决音频的协商问题,并且自由使用它通常是安全的,因为如果不需要此元素,则它什么也不做。

gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink

audioresample

此元素使用可配置的窗口功能将原始音频缓冲区重新采样为不同的采样率以提高质量。

同样,使用它来解决有关采样率的协商问题,不要害怕慷慨地使用它。

gst-launch-1.0 uridecodebin uri=https://www.freedesktop.org/software/gstreamer-sdk/data/media/sintel_trailer-480p.webm ! audioresample ! audio/x-raw-float,rate=4000 ! audioconvert ! autoaudiosink

audiorate

此元素获取带时间戳的原始音频帧的传入流,并通过根据需要插入或删除样本来生成完美的流。它不允许像videorate这样改变采样率,它只是填充间隙并删除重叠的样本,因此输出流是连续的和“干净的”。

它在时间戳将丢失的情况下很有用(例如,当存储为某些文件格式时)并且接收器将需要存在所有样本。举例说明这个很麻烦,所以没有给出例子。

大多数时候,audiorate不是你想要的。

Multithreading

queue

queue已在基本教程 7:多线程和 Pad 可用性中进行了解释。基本上,队列执行两个任务:

  • 数据排队直到达到选定的限制。任何将更多缓冲区推入队列的尝试都会阻止推入线程,直到有更多空间可用。
  • 队列在源 Pad 上创建一个新线程,以解耦接收器和源 Pad 上的处理。

此外,queue当它即将变空或满时触发信号(根据一些可配置的阈值),并且可以指示在缓冲区满时丢弃缓冲区而不是阻塞。

根据经验,只要您不关心网络缓冲,就更喜欢更简单的queue元素queue2。有关示例,请参阅基本教程 7:多线程和 Pad 可用性 。

queue2

此元素不是 的演变queue。它具有相同的设计目标,但遵循不同的实现方法,从而产生不同的功能。不幸的是,通常不容易判断哪个队列是最佳选择。

queue2执行上面列出的两个任务queue,此外,还能够将接收到的数据(或其中的一部分)存储在磁盘文件上,以供以后检索。它还用基本教程 12:Streaming描述的更通用和方便的缓冲消息替换了信号 。

作为一个经验法则,每当您担心网络缓冲时,queue2 优于queue。有关 示例,请参阅基本教程 12:流式传输queue2隐藏在里面playbin)。

multiqueue

该元素同时为多个流提供队列,并简化了它们的管理,如果其他流上没有接收到数据,则允许某些队列增长,或者如果某些队列没有连接到任何东西,则允许它们丢弃数据(而不是返回一个错误,就像一个更简单的队列一样)。此外,它同步不同的流,确保它们都不会超前于其他流。

这是一个高级元素。它位于 中decodebin,但您很少需要在普通播放应用程序中自己实例化它。

tee

Basic tutorial 7: Multithreading and Pad Availability已经展示了如何使用一个tee元素,它将数据拆分到多个pad。拆分数据流很有用,例如,在捕获视频时,视频显示在屏幕上,并且还编码并写入文件。另一个例子是播放音乐和连接可视化模块。

需要queue在每个分支中使用单独的元素来为每个分支提供单独的线程。否则,一个分支中的阻塞数据流将使其他分支停止。

gst-launch-1.0 audiotestsrc ! tee name=t ! queue ! audioconvert ! autoaudiosink t. ! queue ! wavescope ! videoconvert ! autovideosink

 Capabilities

基础教程 10:GStreamer 工具已经解释了如何将 Caps 过滤器与gst-launch-1.0. 以编程方式构建管道时,Caps 过滤器是使用capsfilter元素实现的。此元素本身不会修改数据,但会强制限制数据格式。

gst-launch-1.0 videotestsrc ! video/x-raw, format=GRAY8 ! videoconvert ! autovideosink

typefind

此元素确定流包含的媒体类型。它按排名顺序应用 typefind 函数。检测到类型后,它会将其源 Pad Caps 设置为找到的媒体类型并发出have-type信号。

它由 内部实例化decodebin,您也可以使用它来查找媒体类型,尽管您通常可以使用 GstDiscoverer提供更多信息(如 基本教程 9:媒体信息收集中所示

Debugging

fakesink

这个接收器元素简单地吞下任何馈送它的数据。它在调试时很有用,可以替换您的普通接收器并将它们排除在等式之外。当与 的-v开关结合使用时,它可能会非常冗长gst-launch-1.0,因此请使用该silent属性去除任何不需要的噪音。

gst-launch-1.0 audiotestsrc num-buffers=1000 ! fakesink sync=false

identity

这是一个虚拟元素,它通过未修改的方式传递传入数据。它有几个有用的诊断功能,例如偏移量和时间戳检查,或缓冲区丢弃。阅读它的文档以了解这个看似无害的元素可以做的所有事情。

gst-launch-1.0 audiotestsrc ! identity drop-probability=0.1 ! audioconvert ! autoaudiosink

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值