GstElementFactory 最简单的应用就是创建一个元件的实例,但是工厂元件不仅仅只能做这件事,工厂元件作为在 GStreamer 注册系统中的一个基本类型,它描述了所有的插件(plugins)以及可由GStreamer 创建的元件。这意味着工厂元件可以用于自动元件实例化, 像自动插件(autopluggers); 或者创建一个可用元件列表,像管道编辑应用程序(GStreamer Editor) 的类似操作。
这里讲两个应用:
通过元件工厂得到元件的信息
#include <gst/gst.h>
int
main (int argc,
char *argv[])
{
GstElementFactory *factory;
/* init GStreamer */
gst_init (&argc, &argv);
/* get factory */
factory = gst_element_factory_find ("fakesrc");
if (!factory) {
g_print ("You don’t have the ’fakesrc’ element installed!/n");
return -1;
}
/* display information */
g_print ("The ’%s’ element is a member of the category %s./n"
"Description: %s/n",
gst_plugin_feature_get_name (GST_PLUGIN_FEATURE (factory)),
gst_element_factory_get_klass (factory),
gst_element_factory_get_description (factory));
return 0;
}
你可以通过gst_registry_pool_feature_list (GST_TYPE_ELEMENT_FACTORY)得到所有在GStreamer中注册过的工厂元件。
找出元件所包含的衬垫
工厂元件最有用处的功能可能是,它包含了对元件所能产生的衬垫以及这些衬垫的功能(以行外话讲: 就是指这些衬垫所支持的媒体类型)的一个详细描述 ,而得到这些信息是不需要将所有的插件(plugins)都装载到内存中。这可用来给一个编码器提供一个编码列表,或在多媒体播放器自动加载插件时发挥作用。目前所有基于 GStreamer 的多媒体播放器以及自动加载器(autoplugger)都是以上述方式工作。当我们在下一章:衬垫与功能( Pads and capabilities)中学习到 GstPad 与 GstCaps 时,会对上面的特性有个更清晰的了解。