在Gst中创建动态管道(二)_从playerbin创建管道

playerbin创建管道

make_playerbin_pipeline()基于gst中的playbin元素,playbin元素在gstplaybin.cgstdecodebin.c中执行。
playerbin中创建动态管道的确是个棘手的任务,我了解得也不很透彻,只能尽可能解释清楚一些。

1. 通过首选项选择

它包括:管道源(source/槽(sink),视频比例(video scale),音频转换/音量/缩放(convert/volume/scale)等。
这在gstplaybin.cgstdecodebin.c中完成;它将依靠后面的解码器组合(assemble)。
Gstplaybin
还添加了一些友好的用户界面(UI)功能,音频文件的视觉效果(visualisation),元信息(meta info),缓存和窗口支持等。

2.通过媒体流中的信息确定

例如,mpegogg(demuxer)mp3aac(codec),甚至音频或音频/视频/字幕等。
这在gstdecodebin.c gstdecodebin2.c中完成。

a           typefind

gst_decode_bin_init()中为decodebin创建typefind元素。
gst_decode_bin_init()中注册“have_type”信号注册回调函数type_found
每个demuxer有一种typefind方法,如gstoggdemux.c中的gst_ogg_pad_typefind()

b           close_link() and try_to_link_1()

每个demuxer将尝试分析数据流并为后面的管道生成(动态)源衰减器,然后递归查找兼容元素直至原始数据(“video/x-raw”、“audio/x-raw”、“text/plain”、“text/x-pango-markup”)从而形成整个管道的路径。

如果在close_pad_link()中发现一个兼容元素,该兼容元素将调用try_to_link_1()将其添加到临时管道,该元素添加到try_to_link_1()中的临时管道之后,就会调用close_link()查找另一个潜在的跟随元素。这就是递归过程,一个元素不应该出现两次。

所有元素信息来自注册表(registry):
gst_decode_bin_init()
中的gst_default_registry_feature_filter()
只有Demux/Decoder/Depayloader/Parser在解码bin中使用。
元素使用的优先级通过它们的级别(rank)定义:compare_ranks()
如果存在某种动态(间或)衰减器,close_pad_link()close_link()将调用dynamic_add()
队列在demuxer源衰减器之后,解码器槽衰减器之前使用。




本文译自Moblin.org技术社区,  点击此处,查看原文


               更多内容,到“Moblin技术中国”专区


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值