我需要确定哪个解码器插件decodebin3
已经选择。
我发现在它产生源垫之后,我不能总是将它连接到某些下游元素。但如果我“禁用”(改变等级)给定的不可用插件,我可以使我的管道链接/功能。我想动态切换选择,如果下游元素无法链接。
较老的decodebin
有像autoplug-select
这样的信号,这看起来是一种找到正在使用的插件的方法。但是decodebin3
没有等效的信号吗?
当我启用调试日志时,我看到了子插件的名称(这是如何手动禁用POC方式的“坏”插件来测试我的概念)。是否有一种方法可以迭代decodebin3
中的子级
发布于 2022-09-22 21:19:16
我自己想出来的。基本上,这个插件创建的元素是一个"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 ) );
https://stackoverflow.com/questions/73803717
复制相似问题