GStreamer Basic tutorial 学习笔记(六)

Pad Capabilities

  1. Pad Capabilities 是 GStreamer 的基本元素,大多数时候它们是不可见的,因为框架会自动处理它们。Pads 允许信息进入和离开一个元素。
  2. 一个 PadCapabilities(简称 Caps)指定了通过该 Pad 可以传输的信息的类型。
  3. Pads 可以支持多个 Capabilities
  4. 尽管 Capabilities 可以被指定为范围,从PadPad传输的实际信息必须只有一种规定明确的类型。通过一种称为协商的过程,连接的两个 Pads 就会就一个共同的类型达成一致,因此 PadsCapabilities 变得固定(它们只有一种类型,而且不包含范围)。

协商(negotiation)

目的:为了使两个元素连接在一起,它们必须共享 Capabilities 的一个公共子集(否则它们根本无法相互理解)。这正是 Capabilities 的主要目标。

Pad 模板

Pads 是从 Pad 模板创建的,它们指示了一个 Pad 可能拥有的所有可能的 Capabilities。模板对于创建多个类似的 Pads 是有用的,并且还允许在元素之间提前拒绝连接:如果它们的 Pad 模板的 Capabilities 没有公共子集(它们的交集为空),则无需进行进一步的协商。

可以将 Pad 模板看作是协商过程的第一步。随着协商的进行,实际的 Pads 被实例化,它们的 Capabilities 逐渐完善,直到被固定(或协商失败)。

函数与知识点

  1. GstCaps :描述媒体类型的数据结构。

  2. GstPad *gst_element_get_static_pad (GstElement * element, const gchar * name) 功能:通过名称从元素中检索一个pad。这个版本只检索已经存在的(即“静态的”)pad

    提示:使用后解除引用,线程安全。

  3. GstCaps *gst_pad_get_current_caps (GstPad * pad) 功能:获取使用最后一个GST_EVENT_CAPS事件配置在pad上的capabilities

    提示:增加引用计数,需要使用gst_caps_unref(caps)解引用。

  4. GstCaps *gst_pad_query_caps (GstPad * pad, GstCaps * filter) 功能:获取此pad可以生成或消费的capabilities

    提示:filter可以是NULL,但如果不是NULL,则返回的caps将是filter的一个子集。增加引用计数, 需要使用gst_object_unref (pad)解引用。

  5. GstElementFactory *gst_element_factory_find (const gchar * name) 功能:根据给定的名称搜索(创建)一个元素工厂。

    提示:增加返回的元素工厂的引用计数;调用者负责解除引用。

  6. GstElement *gst_element_factory_create (GstElementFactory * factory, const gchar * name) 功能:使用给定的元素工厂创建一个新的元素。

    提示:由于所有元素都需要一个名称作为第一个参数,因此它将被赋予提供的名称。
    注意:第二章使用的gst_element_factory_make()gst_element_factory_find()gst_element_factory_create()的快捷方式。

  7. gst_message_parse_state_changed (GstMessage * message, GstState * oldstate, GstState * newstate, GstState * pending) 功能:从GstMessage中提取旧状态和新状态。

    提示:线程安全。文档中的用法是经典用法,即在状态改变时,提取旧状态和新状态,并输出新旧状态的值。

  8. const gchar *gst_element_state_get_name (GstState state) 功能:生成一个字符串,表示给定的状态。

你可能感兴趣的:(GStreamer学习笔记,c++,GStreamer,clearrtc,服务器)