目录
1.GstObject类继承关系
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstAllocator
╰──GstBufferPool
╰──GstBus
╰──GstClock
╰──GstControlBinding
╰──GstControlSource
╰──GstDevice
╰──GstDeviceMonitor
╰──GstDeviceProvider
╰──GstElement
╰──GstPad
╰──GstPadTemplate
╰──GstPlugin
╰──GstPluginFeature
╰──GstRegistry
╰──GstStream
╰──GstStreamCollection
╰──GstTask
╰──GstTaskPool
╰──GstTracer
╰──GstTracerRecord
2. GstElement
GstElement 是GStreamer管道(pipeline)中构建组件的抽象基类。GstElement子类的更多信息,请参考插件编写者指南。
- gst_element_get_name :获取组件名称;
- gst_element_set_name :设置组件名称。为了提高速度,使用适当的锁定时,可以在内核中使用 GST_ELEMENT_NAME。请勿在插件或应用程序中使用此功能,以保持ABI兼容性。
组件可以有Pad (类型为 GstPad). 这些pads与其他组件的pads相连接。在pads中流动数据的是 GstBuffer 。每个GstElement 的输入(或 槽sink)和输出(或源source)的 pads都有一个GstPad类型的GList 。
- gst_element_add_pad :添加pad;
- gst_element_remove_pad: 移除pad;
- gst_element_get_static_pad:配合名称,用来检索一个已经存在的组件pad;
- gst_element_request_pad:创建一个新的动态pad(带有GstPadTemplate );
- gst_element_iterate_pads :检索所有pad的迭代器;
- gst_element_link :连接两个组件;
- gst_element_link_many :连接一行的多个组件。连接组件前需要确保使用gst_bin_add将组件添加到bin或管道中
- gst_element_link_filtered:对于一组由GstCaps 限制的组件的连接;
- gst_element_link_pads 和gst_element_link_pads_filtered :指定要按名称链接到每个元素上的pad。
每个组件都有一个state (参见GstState).
- gst_element_get_state :获取组件状态;
- gst_element_set_state.:设置组件状态;设置状态会触发 GstStateChange.;
- gst_element_state_get_name:获取GstState字符串表示
如果设置了 GST_ELEMENT_FLAG_PROVIDE_CLOCK 标志,一些组件可以为管道提供时钟。不是所有的组件都需要时钟。注意,时钟的选择和分配通常由顶级GstPipeline处理,因此时钟功能仅在非常特殊的情况下使用。
- gst_element_get_clock :获取组件时钟;
- gst_element_set_clock:设置组件时钟;
- gst_element_provide_clock:检索组件时钟.
GstElement
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstElement
╰──GstBin
3.GstBin
GstBin是包含了GstElement的一个容器,可以处理一组组件。子组件的pad可以重影到bin,请参见GstGhostPad。这使bin看起来像其他任何组件,并允许创建更高级别的抽象组件。
gst_bin_new:创建新的GstBin;
GstPipeline:创建顶层bin。普通的bin不包含总线bus或handle clock distribution
gst_bin_add:添加组件;
gst_bin_remove:移除组件;
gst_bin_get_by_name:在bin中通过名称查询某个组件;
gst_bin_get_by_name_recurse_up :主要用于内部目的,当在当前容器中找不到该组件时,它将查询父容器。
gst_bin_iterate_elements:在bin中查询组件迭代器;
gst_object_unref:删除bin中资源;
每当将新组件添加到容器bin中时,都会触发添加 element-added信号。同样,只要将组件从bin中移出,就会发出元素移出信号element-removed。
GstBin类继承关系
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstElement
╰──GstBin
╰──GstPipeline
4. GstPad
GstElement通过"pads"连接, 这是轻量的通用连接点。
Pads有GstPadDirection, source pads生产数据,sink pads消费data。
- GstPadTemplate + gst_pad_new_from_template :创建pad,通常之后会加入到GstElement. 这通常发生在组件创建时,但是也可以发生在组件处理数据或应用程序请求pads时。
- gst_pad_new:创建没有pad模板的pads, 方向和名称都作为参数。如果名字时NULL,会确保一个唯一命名。
一个 GstElement 创建一个pad,通常会使用不同的 gst_pad_set_*_function() 函数回调去注册pads上的回调事件、请求、数据流。
- gst_pad_get_parent :查询GstElement拥有的pad.
- gst_element_get_static_pad:查询一个组件上的两个pad,之后会采取连接pad操作。
- gst_pad_link:连接pads. (快速连接可以使用gst_element_link).
- gst_pad_unlink:取消连接.
- gst_pad_get_peer:检查pad是否连接
在pads上的数据流准备好之前,需要激活pad。
- gst_pad_set_active:激活pad.
- gst_pad_query + gst_pad_peer_query :查询Pad和流上的不同配置。
- gst_pad_send_event + gst_pad_push_event:向一个pad发送一个GstEvent事件;某些事件会粘在pad上,即事件经过pad后,可以稍后使用gst_pad_get_sticky_event +gst_pad_sticky_events_foreach进行查询。 gst_pad_get_current_caps 和 gst_pad_has_current_caps是方便的功能,用于查询垫上的当前粘性CAPS事件。
- gst_pad_push 和 gst_pad_pull_range :向buffer中推或拉
可以使用可以与gst_pad_add_probe一起安装的探针来监视在Pad上发生的数据流,事件和查询。
- gst_pad_is_blocked:可用于检查是否在焊盘上安装了阻塞探针。
- gst_pad_is_blocking:检查阻塞探针当前是否阻塞了填充板。
- gst_pad_remove_probe:用于删除以前安装的探针,并取消阻止阻塞探针(如果有)。
pad有偏移量,该偏移量将应用于通过pad传递的所有数据的运行时间。
- gst_pad_get_offset:查询pad偏移.
- gst_pad_set_offset:更改pad偏移量
- gst_pad_start_task:启动,任务
- gst_pad_pause_task:暂停任务;
- gst_pad_stop_task:停止任务
GstPad类继承关系
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstPad
╰──GstProxyPad
5. GstElementFactory
GstElementFactory用来创建组件实例。一个GstElementFactory可以插入到 GstPlugin,因为它也是一个GstPluginFeature。
- gst_element_factory_find + gst_element_factory_create :创建组件实例;
- gst_element_factory_make:快捷创建组件实例
创建GstFileSrc组件
#include <gst/gst.h>
GstElement *src; //定义一个组件
GstElementFactory *srcfactory; //定义一个组件实例
gst_init (&argc, &argv);
srcfactory = gst_element_factory_find ("filesrc");
g_return_if_fail (srcfactory != NULL);
src = gst_element_factory_create (srcfactory, "src");
g_return_if_fail (src != NULL);
...
// 或者用下面方法等效
gst_element_factory_make("srcfactory","src");
GstElementFactory
GObject
╰──GInitiallyUnowned
╰──GstObject
╰──GstPluginFeature
╰──GstElementFactory
gst_element_facotry_make
GstElement *
gst_element_factory_make (const gchar * factoryname,
const gchar * name)
创建由给定组件实例定义的类型的新组件。如果name为NULL,则组件将获得保证的唯一名称,该名称由组件实例名称和数字组成。如果提供名称,则将提供提供的名称。