如何确定选择了哪个GStreamer插件decodebin3



我需要确定decodebin3选择了哪个解码器插件。

我发现,在它生成源焊盘之后,我不能总是将它链接到某些下游元素。但是如果我";禁用";(更改排名(一个给定的不可用插件,我可以使我的管道可链接/功能。我想动态切换选择,以防下游元素无法链接。

旧的decodebin有类似autoplug-select的信号,这似乎是一种计算插件的方法。但是decodebin3没有等效的信号?

当我启用调试日志记录时,我看到了子插件的名称(这就是如何以POC方式手动禁用"坏"插件以测试我的概念(。有没有一种方法可以迭代decodebin3中的子级?

我自己想好了。基本上,这个插件创建的元素是一个";bin";(这就是为什么它被称为decodeBIN3!(,因此可以使用gst_bin_iterate_elements来迭代其中的子元素。然后,可以获得生成元素的工厂,并从那里检查工厂的类型,例如解码器。您还可以获得"的唯一id;工厂类型";。

以下是为类似问题制定自己的解决方案时要使用的主要函数。(很抱歉,如果我发布了我的确切用例的所有代码,那将是一种痛苦,也许会令人困惑…(

gst_bin_iterate_elements( GST_BIN( decoder ) );
GstElement *element( GST_ELEMENT_CAST( g_value_peek_pointer( &value ) ) );
GstElementFactory *factory( gst_element_get_factory( element ) );
const gboolean isDecoder( gst_element_factory_list_is_type( factory, GST_ELEMENT_FACTORY_TYPE_DECODER ) );
const GType factoryType( gst_element_factory_get_element_type( factory ) );

最新更新