gst_parse_launch()的局限性?

时间:2013-04-19 09:02:11

标签: c gstreamer

据我所知, gst_parse_launch()根据描述管道的命令行语法创建一个新管道。它会自动处理请求板的所有复杂细节,有时还会填充管道等,并构建管道。

所以我的问题是,为什么不一直使用这个?为什么要添加添加填充处理程序,请求和链接垫等?

是否有使用 gst_parse_launch()的情况?

2 个答案:

答案 0 :(得分:4)

许多GStreamer元素将使用这些功能来探测应加载哪个插件。想到的最好的例子是 decodebin playbin 插件。对于第一个,您只需选择源(例如 filesrc )。

现在,播放媒体流时会发生什么?

一开始,"内部" decodebin 仅限:

--- sink - > | [TypeFind] |

此时没有源垫,因为该元素仍然不知道流内容。

如果您有 avi 视频文件,那么 decodebin 将首先使用特定的GStreamer元素来探测流中使用的容器/编解码器。此元素(GstTypeFind)将根据流与编解码器/容器之间的相似性计算得分。

在此示例中,TypeFind将命中 avi 容器,因此它将分配 avi 解析器。 "内部" decodebin 现在正在扩展... avi 解析器分析流以了解是否有要解析的音频/视频子流。如果是这样,则再次输入typefind以查找使用的编解码器。

然后分配适当的解码器。这里, decodebin 现在已经完全就绪,下游元素(如接收元素)必须链接到新创建的源焊盘以获取流。这是通过 pad-added 信号和pad连接程序完成的。

如果没有任何这些打击垫功能,则无法执行此操作,并且必须在获取流之前静态设置所有内容,在金属中。这意味着您必须事先知道您要阅读的流的内容是什么(这是非常非常重度约束!)

最后一句话:当你通过命令行指定管道时(比如我猜的gst-launch),你处于一个高级别的界面。在您指定的元素内,填充链接的机制可能非常重要!事情是你不必费心,因为事情会完成。但是"不要打扰某些东西"并不意味着这件事对你没用。

答案 1 :(得分:1)

如果使用gst-launch,则只能运行静态管道。那是你不能寻求的,不能,例如随着时间的推移改变音量,你不能例如播放第二个文件。

gst-launch实际上是一种尝试元素或某些属性的开发工具。