GStreamer Tutorial 中文翻译:Basic tutorial 14: Handy elements

本文介绍了GStreamer教程中的关键元素,包括playbin、uridecodebin、decodebin等,展示了如何使用它们进行媒体处理、网络抓取和调试。涉及bins、文件输入/输出、网络组件和调试工具,是GStreamer开发者必备知识。
摘要由CSDN通过智能技术生成

GStreamer Tutorial 14中文翻译



前言

由于工作原因,用的GStreamer的图像解码库,所以记录GStreamer Tutorial 的中文翻译和个人的理解以便学习。若有不足请多指教。侵删。


Basic tutorial 14: Handy elements

目的

本教程列出了一些有用的、值得了解的GStreamer元素。它们的范围从允许您轻松构建复杂管道的强大的一体化元素(如playbin),到调试时非常有用的小助手元素。
为简单起见,下面给出了使用gst-launch-1.0工具的示例(在基础教程10:GStreamer工具中了解它)。如果您想要查看正在协商的Pad Caps,请使用-v命令行参数。

Bins

这些是Bin元素,你把它们当作一个单独的元素,它们负责实例化所有必要的内部pipeline来完成它们的任务。

playbin

这个元素在整个教程中被广泛使用。它管理媒体播放的所有方面,从源头到显示,经过解复用和解码。它是如此灵活,有如此多的选项,以至于有一整组教程专门讨论它。更多细节请参见播放教程

uridecodebin

这个元素把URI的数据解码成原始媒体。它选择一个可以处理给定URI方案的源元素,并将其连接到一个解码器元素。它的作用就像一个解复用器,所以它提供了与媒体中发现的流一样多的source 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元素。它的作用就像一个解复用器,所以它提供了与媒体中发现的流一样多的source 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

这个元素读取一个本地文件,并产生具有ANY的Caps的媒体。如果你想为媒体获得正确的Caps,通过使用typefind元素或将filesrctypefind属性设置为TRUE来探索流。

gst-launch-1.0 filesrc location=f:\\media\\sintel\\sintel_trailer-480p.webm ! decodebin ! autovideosink

filesink

这个元素把它收到的所有媒体写到一个文件里。使用location属性来指定文件名。

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

Network

souphttpsrc

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

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

测试媒体的生成

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

videotestsrc

这个元素产生一个视频模式(可通过模式属性在许多不同的选项中选择)。用它来测试视频管道。

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

audiotestsrc

这个元素产生一个音频波(可在许多不同的选项中用wave属性选择)。用它来测试音频管道。

gst-launch-1.0 audiotestsrc ! audioconvert ! autoaudiosink

视频适配器

videoconvert

这个元素从一个颜色空间(如RGB)转换到另一个(如YUV)。它也可以在不同的YUV格式(如I420、NV12、YUY2…)或RGB格式排列(如RGBA、ARGB、BGRA…)之间转换。
这通常是你在解决一致问题(negotiation problems)时的首选。当不需要时,由于其上游和下游的元素已经可以相互理解,它以直通模式行事,对性能影响最小。
作为一条经验法则,当你使用那些在设计时Caps未知的元素时,总是使用videoconvert,比如autovideosink,或者可以根据外部因素变化,比如解码一个用户提供的文件。

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

videorate

这个元素接收一个带时间戳的视频帧流,并产生一个与source pad的帧率相匹配的流。纠正是通过丢弃和复制帧来进行的,没有使用花哨的算法来插值帧。
这对于允许需要不同帧速率的元素链接是很有用的。与其他适配器一样,如果不需要它(因为有一个两个Pads都同意的帧速率),它将以直通模式工作,不会影响性能。
因此,当设计时实际帧率未知时,最好总是使用它,以防万一。

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

音频适配器

audioconcvert

这个元素在各种可能的格式之间转换原始音频缓冲区。它支持整数到浮点数的转换、宽度/深度转换、有符号性和无符号性的转换以及通道转换。
就像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不是你想要的。

多线程

queue

队列已经在基础教程7:多线程和pad可用性中作了解释。基本上,一个队列执行两个任务:

  • 数据被排在队列中,直到达到一个选定的限制。任何将更多的缓冲区推入队列的尝试都会阻止推入线程,直到有更多的空间可用;
  • 该队列在source pad上创建一个新的线程,以解耦source padsink上的处理。
    此外,队列在即将变空或变满时(根据一些可配置的阈值)会触发信号,并且可以被指示丢弃缓冲区,而不是在满时阻塞。
    作为一条经验法则,只要网络缓冲不是你关心的问题,就应该选择更简单的队列元素而不是queue2。请看基础教程7:多线程和pad可用性的例子。

queue2

这个元素不是队列的演变。它有相同的设计目标,但采用了不同的实现方法,这导致了不同的功能。不幸的是,通常不容易分辨哪个队列是最佳选择。
queue2 执行上面为 queue 列出的两项任务,此外,它能够将收到的数据(或部分数据)存储在磁盘文件中,以便以后检索。它还用《基础教程12:流》中描述的更通用、更方便的缓冲信息取代了信号。
作为经验法则,当网络缓冲是你关心的问题时,最好选择queue2而不是queue。请看基础教程12:流媒体的例子(queue2隐藏在playbin中)

multiqueue

这个元素为多个流同时提供队列,并简化了它们的管理,如果其他流没有收到数据,允许一些队列增长,或者如果没有连接到任何东西,允许一些队列放弃数据(而不是像一个更简单的队列那样返回一个错误)。此外,它还同步不同的流,确保没有一个流比其他流领先太多。
这是一个高级元素。它在decodebin中被用到过,但你很少需要在一个正常的播放程序中自己实例化它。

tee

基础教程7:多线程和pad的可用性已经展示了如何使用一个三通元素,它将数据分割到多个垫子。分割数据流是很有用的,例如,当捕捉视频时,视频在屏幕上显示,同时也被编码并写入文件。另一个例子是播放音乐和连接可视化模块。
人们需要在每个分支中使用单独的队列元素,为每个分支提供单独的线程。否则,一个分支中的数据流受阻会使其他分支停滞。

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

能力介绍

capsfilter

基础教程10:GStreamer工具已经解释了如何用gst-launch-1.0使用Caps过滤器。当以编程方式建立管道时,Caps过滤器是通过capsfilter元素实现的。这个元素并不修改数据本身,而是对数据格式进行限制。

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

typefind

这个元素决定了一个流所包含的媒体的类型。它按其等级顺序应用类型查找功能。一旦类型被检测到,它将其源Pad Caps设置为所发现的媒体类型,并发出have-type信号。
它是由decodebin内部实例化的,你也可以用它来寻找媒体类型,尽管你通常可以使用GstDiscoverer,它提供了更多的信息(如在基础教程9:媒体信息收集中看到)。

调试

fakesink

这个sink元素简单地吞噬了任何送入它的数据。它在调试时很有用,可以取代你的正常的sink,并将它们排除在方程式之外。当与gst-launch-1.0的-v开关结合使用时,它可能会非常冗长,所以使用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

结论

本教程列出了一些值得了解的元素,因为它们在使用GStreamer的日常工作中很有用。有些元素对生产管道很有价值,而其他元素只需要用于调试目的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值