GStreamer 常用元素及其用法

1. 输入/输出

filesrc
此元素读取本地文件并生成具有 ANY Caps (能力) 的媒体。如果要为媒体获取正确的 Caps,请使用typefind 元素或将 filesrc 的 typefind 属性设置为 TRUE 来浏览流。

gst-launch-1.0 filesrc location=xxx ! decodebin ! autovideosink


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

gst-launch-1.0 v4l2src device=/dev/video20 ! mpph264enc ! mpegtsmux ! filesink location=xxx.ts

souphttpsrc

 这个element作为一个客户端,使用SOUP库经由HTTP来接收数据。通过location属性来设置URL。

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

videotestsrc

     这个element生成一个固定的video输出(通过pattern属性来设置),用来测试视频的pipeline。

gst-launch-0.10 videotestsrc ! ffmpegcolorspace ! autovideosink

audiotestsrc

      这个element生成一个音频信号(通过设置wave属性来设置),用来测试音频的pipeline。

gst-launch-0.10 audiotestsrc ! audioconvert ! autoaudiosink

 

2. 视频适配

ffmpegcolorspace

      这个element会把一个色彩空间转换到另一个色彩空间(比如从RGB转到YUV)。它也可以在转换不同的YUV格式或者RGB格式。

      通常来说,在解决协商问题时,这个element是你的第一选择。当上游element和下游element是兼容的时候,这个element就是直通的,所以对性能的影响几乎是不存在的。

      作为一个习惯,当你用一个不知道Caps的element的时候,总是可以用一下ffmpegcolorspace,就像autovideosink一样。

gst-launch-0.10 videotestsrc ! ffmpegcolorspace ! autovideosink

videorate

      这个element接受带时间戳的视频数据转换成匹配source pad帧率的流。通过丢弃或者复制帧来执行改正,而不是通过古怪的算法。

      这个在连接不同帧率的element时很有用。正如其他的适配插件,如果不需要的话会直通过去(上下游element能匹配上)。

      如果实际帧率未知的情况下,为了以防万一,使用这个element是个不错的主意。

gst-launch-0.10 videotestsrc ! video/x-raw-rgb,framerate=30/1 ! videorate ! video/x-raw-rgb,framerate=1/1 ! ffmpegcolorspace ! autovideosink

videoscale

      这个element可以修改视频帧的尺寸。这个element会先检查不修改视频尺寸是否可行,如果可行,就不在进行尺寸的转换。所以在pipeline中加入这个element是安全的,可以提高鲁棒性。

      这个element支持很多色彩空间,包括不同的YUV和RGB格式。而且可以放在pipeline的任何地方。

      如果视频是往一个用户控制的窗口输出时,加上videoscale这个element是个好主意,因为并不是所有的视频输出都是支持缩放的。

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

3. 音频适配

audioconvert

      这个element会转化原始的不同音频格式之间的缓冲。它支持从整数到浮点数的转化,符号数/字节序转换以及声道转换。

      正如ffmpegcolorspace对于视频做的一样,这个element使用很安全,你可以用来解决音频不匹配的问题。

gst-launch-0.10 audiotestsrc ! audioconvert ! autoaudiosink

audioresample

      这个element使用可配置的窗口函数重采样音频缓冲到不同的采样率来增强质量。

      同样地,它可以解决采样率的问题,同时不需要担心出错。

gst-launch-0.10 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

      这个element接受带时间戳的音频帧,然后通过增加或者降低采样来获得一个标准流。它不能修改采样率,只能通过移除重叠部分和填充空白部分来获得连续“干净”的输出。

      当时间戳丢失接收器要求所有的采样同时渲染时这个element比较有用。这个很难给出一个例子,所以就省略了。

4. 多线程

queue

     基本上,一个queue执行两个任务:

      数据可以一直放进队列直到满为止

      queue会给source pad创建一个新的线程,这样就可以解耦对于sink和source pad的处理

      另外,queue在变空或满的时候会触发信号,可以抛弃一些缓冲数据来避免阻塞。

queue2 

      这个element不是queue的进化版本。它和queue有同样地设计目标,但实现方法不同,这也导致了一些功能不太一致。 queue2同样执行了上面列出的queue的两个任务,此外,还可以把收到的数据存在硬盘上。它同时用更通用更方便的缓冲消息来取代了空/满这些信号。

      当涉及到网络缓冲时,请使用queue2而不是queue。

multiqueue

      这个element可以对多个流同时提供queue,并且简化对流的管理。此外,它可以同步不同的流,确保任何一个流都不会运行的特别快。

      这是一个先进的element。decodebin里面包含着这个element,你在一个通常的播放应用里面很少会直接使用。

tee

 如何使用tee这个element。把数据分成相同的多份是非常有用的,比如,可以同时在屏幕上播放图像和保存文件到硬盘。

      在每个分支上使用独立的playbin element,提供相互独立的线程。否则一旦数据在一个分支上阻塞了,那么其它分支也会停止。

gst-launch-0.10 audiotestsrc ! tee name=t ! queue ! audioconvert ! autoaudiosink t. ! queue ! wavescope ! ffmpegcolorspace ! autovideosink

5. caps

capsfilter

      gst-launch使用Caps过滤。当我们编程实现一个pipeline时,Caps过滤通常用capsfilter这个element来实现。这个element不会修改数据,但会限制数据的类型。

gst-launch-0.10 videotestsrc ! video/x-raw-gray ! ffmpegcolorspace ! autovideosink

typefind

      这个element决定了一个流所包含的媒体的类型。它按照他们的等级调用typefind函数。一旦检测到,它就会把source pad设置成发现的媒体类型,然后发出have-type信号。

      decodebin这个element内部就包含了typefind,虽然我们通常是使用GstDiscoverer来获得更多地信息,但你也可以用这个element来确定媒体类型。

6. 调试

fakesink

      这个sink element仅仅简单的抛弃所有输入的数据。在调试过程中它是很有用的,你可以用它来取代你想使用的sink来确保不会出现意外。它在gst-lauch命令行并出现-v参数后会显得非常冗余,如果你觉得无用信息太多,那么可以设置silent属性。

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

identity

      这是一个哑巴element仅仅把输入数据不加修改的传过来。它也有一些有用的调试函数,例如偏移量和时间戳检测,或者丢弃缓冲。想要进一步了解请阅读它的文档。

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

浩瀚之水_csdn

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值