Pad Capabilities
Pad Capabilities
是 GStreamer 的基本元素,大多数时候它们是不可见的,因为框架会自动处理它们。Pads
允许信息进入和离开一个元素。- 一个
Pad
的Capabilities
(简称Caps
)指定了通过该Pad
可以传输的信息的类型。 Pads
可以支持多个Capabilities
。- 尽管
Capabilities
可以被指定为范围,从Pad
到Pad
传输的实际信息必须只有一种规定明确的类型。通过一种称为协商的过程,连接的两个Pads
就会就一个共同的类型达成一致,因此Pads
的Capabilities
变得固定(它们只有一种类型,而且不包含范围)。
协商(negotiation)
目的:为了使两个元素连接在一起,它们必须共享 Capabilities 的一个公共子集(否则它们根本无法相互理解)。这正是 Capabilities 的主要目标。
Pad 模板
Pads
是从 Pad
模板创建的,它们指示了一个 Pad
可能拥有的所有可能的 Capabilities
。模板对于创建多个类似的 Pads
是有用的,并且还允许在元素之间提前拒绝连接:如果它们的 Pad
模板的 Capabilities
没有公共子集(它们的交集为空),则无需进行进一步的协商。
可以将 Pad
模板看作是协商过程的第一步。随着协商的进行,实际的 Pads
被实例化,它们的 Capabilities
逐渐完善,直到被固定(或协商失败)。
函数与知识点
-
GstCaps
介绍:描述媒体类型/数据格式和属性的结构。通过定义和匹配Caps,GStreamer可以自动选择合适的元件来处理媒体数据。Caps包含以下几个关键方面的信息:
- 媒体类型(MediaType):描述媒体数据的类型,如音频、视频、文本等。
- 媒体格式(MediaFormat):定义媒体数据的实际格式,如编码方式、采样率、分辨率等。
- 媒体属性(MediaProperties):描述媒体数据的其他特性,如通道数、颜色空间、比特率等。
例如:Caps可以用不同的形式定义,包括字符串表示、结构体表示以及caps文件。其中,字符串表示最为常见。以下是一个典型的Caps字符串表示的示例:
"audio/x-raw, format=(string){ S16LE, S24LE, FLOAT }, rate=(int)44100, channels=(int)2"
这个Caps表示一个音频流,以Raw(未压缩)格式传输,格式可以是S16LE(有符号16位小端)、S24LE(有符号24位小端)或FLOAT(浮点数),采样率为44.1kHz,通道数为2。利用Caps,GStreamer可以在管道中的元件之间进行Caps的匹配和协商,以确定合适的数据传输格式和元件能力。当媒体流经过管道时,每个元件会检查输入和输出的Caps,确保它们的格式和特性匹配。如果Caps不匹配,GStreamer将尝试进行格式转换或选择其他支持相应Caps的元件。
-
GstPad *gst_element_get_static_pad (GstElement * element, const gchar * name)
功能:通过名称从元素中检索一个pad
。这个版本只检索已经存在的(即“静态的”)pad
。
提示:使用后解除引用,线程安全。 -
GstCaps *gst_pad_get_current_caps (GstPad * pad)
功能:获取使用最后一个GST_EVENT_CAPS
事件配置在pad
上的capabilities
。
提示:增加引用计数,需要使用gst_caps_unref(caps)
解引用。 -
GstCaps *gst_pad_query_caps (GstPad * pad, GstCaps * filter)
功能:获取此pad
可以生成或消费的capabilities
。
提示:filter
可以是NULL
,但如果不是NULL
,则返回的caps
将是filter
的一个子集。增加引用计数, 需要使用gst_object_unref (pad)
解引用。 -
GstElementFactory *gst_element_factory_find (const gchar * name)
功能:根据给定的名称搜索(创建)一个元素工厂。
提示:增加返回的元素工厂的引用计数;调用者负责解除引用。 -
GstElement *gst_element_factory_create (GstElementFactory * factory, const gchar * name)
功能:使用给定的元素工厂创建一个新的元素。
提示:由于所有元素都需要一个名称作为第一个参数,因此它将被赋予提供的名称。
注意:第二章使用的gst_element_factory_make()
是gst_element_factory_find()
和gst_element_factory_create()
的快捷方式。 -
gst_message_parse_state_changed (GstMessage * message, GstState * oldstate, GstState * newstate, GstState * pending)
功能:从GstMessage
中提取旧状态和新状态。
提示:线程安全。文档中的用法是经典用法,即在状态改变时,提取旧状态和新状态,并输出新旧状态的值。 -
const gchar *gst_element_state_get_name (GstState state)
功能:生成一个字符串,表示给定的状态。