GstElementFactory AGstElementFactory can be added to aGstPlugin as it is also aGstPluginFeature.
创建GstElement对象,最简单的方法是工厂对象GstElementFactory的gst_element_factory_make()。这个函数使用一个已存在的工厂对象和一个新的元件名来创建元件,Gstreamer对应地提供了多种类型的GstElementFactory对象,它们是通过特定的工厂名称来进行区分的。
代码实例:
GstElement*element; element= gst_element_factory_make ("fakesrc", "source");
GstElement 是一个必须理解的概念,因为它是组成管道的基本构件,也是框架中所有可用组件的基础作。从 GStreamer 自身的观点来看,GstElement 可以描述为一个具有特定属性的黑盒子,它通过连接点(link point)与外界进行交互,向框架中的其余部分表征自己的特性或者功能.
通过gst_element_factory_find()函数获得了一个名为haha的工厂对象,使用唯一的工厂名字来访问
GstElementFactory *factory; factory = gst_element_factory_find ("haha");
ps:通过
gst_registry_pool_feature_list()
可以找到所有在Gstreamer中注册过的工厂元件。GstElement *element; element = gst_element_factory_create (factory, "decoder");
以下内容摘自gstreamer官方开发手册:
这样在元件在被创建后,它不会执行任何操作。所以你需要改变元件的状态,使得它能够做某些事情。Gstreamer中,元件有四种状态,每种状态都有其特定的意义。为:
GST_STATE_NULL:默认状态。该状态将会回收所有被该元件占用的资源。
GST_STATE_READY:准备状态。元件会得到所有所需的全局资源,这些全局资源将被通过该元件的数据流所使用。例如打开设备、分配缓存等。但在这种状态下,数据流仍未开始被处理,所以数据流的位置信息应该自动置0。如果数据流先前被打开过,它应该被关闭,并且其位置信息、特性信息应该被重新置为初始状态。
GST_STATE_PAUSED:在这种状态下,元件已经对流开始了处理,但此刻暂停了处理。因此该状态下元件可以修改流的位置信息,读取或者处理流数据,以及一旦状态变为PLAYING,流可以重放数据流。这种情况下,时钟是禁止运行的。总之,PAUSED状态除了不能运行时钟外,其它与PLAYING状态一模一样。处于PAUSED状态的元件会很快变换到PLAYING状态。举例来说,视频或音频输出元件会等待数据的到来,并将它们压入队列。一旦状态改变,元件就会处理接收到的数据。同样,视频接收元件能够播放数据的第一帧。(因为这并不会影响时钟)。自动加载器(Autopluggers)可以对已经加载进管道的插件进行这种状态转换。其它更多的像codecs或者filters这种元件不需要在这个状态上做任何事情。
GST_STATE_PLAYING:PLAYING 状态除了当前运行时钟外,其它与PAUSED状态一模一样。你可以通过函数gst_element_set_state()来改变一个元件的状态。你如果显式地改变一个元件的状态,GStreamer可能会使它在内部经过一些中间状态。例如你将一个元件从NULL状态设置为PLAYING状态,GStreamer在其内部会使得元件经历过READY以及 PAUSED状态。
当处于GST_STATE_PLAYING状态,管道会自动处理数据。它们不需要任何形式的迭代。