GStream常用类及其类间关系

目录

1.GstObject类继承关系

2. GstElement

GstElement

3.GstBin

GstBin类继承关系

4. GstPad

GstPad类继承关系

5. GstElementFactory

 GstElementFactory

gst_element_facotry_make

 


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,则组件将获得保证的唯一名称,该名称由组件实例名称和数字组成。如果提供名称,则将提供提供的名称。

 

你可能感兴趣的:(DeepStream)