如何使用gstreamer
Gstreamer 提供了一组开发多媒体应用的APIS,基于APIs 我们可以开发大量的多媒体应用。
通过Gstreamer也提供了gst-launch 我们可以很简单的将gstreamer的elements串联起来,不需要些任何的code ,实现基本的多媒体功能。
Gstreamer 使用的开发语言
gstreamer 通过C语言实现,主要遵循GLIB的对象系统GObject。
总认为应该使用c++来实现,但是这些人那。
core 与 plugins 分别实现原则。
core 实现基本的功能。
plugins 基于core 扩展实现。
gstreamer 的基本元素
element
在gstreamer中是最基本也是最重要元素。
在gstreamer我们最经常做的一件事情就是将elements连接起来形成一条链条,
然后数据会沿着链条依次处理。
每一个element都会有一个具体的功能,比如读取数据,解码数据,输出数据等等。
通过连接多个这样的elements,我们就会创建出一个链条(pipeline)并通过链条完成具体的功能。
gstreamer 提供了大量的elements,通过这些elements我们可以实现各种多媒体应用。
如果我们想自己实现elements完成特定的功能,gstreamer可以通过实现新的plugins来实现。
pad
elements 在形成pipeline时,需要通过pads 来协商是否能连接到一起。 我们不能把音频的解码element 连接到 overlay上。
所以在gstreamer 中通过pads 来描述elements的输入和输出特性。
pads会描述那些数据是可以通过elements处理和那些数据是可能被elements生成的。
Pad通过一种方法(caps negotiation) 来协商2个elements 之间是否可以连接,处理响应的数据。
bin 和 pipeline
bin 本身也是element,不过bin 也可以是一组 elements,当是一组elements的时候,可以简化程序的设计,
因为当对bin操作的时候,相当于对一组的elements设置状态。
pipeline 是top-level的bin,一个运行的程序必须有一个pipeline,当我们启动程式的时候,pipeline 会启动一个线程和一个bus。
我们可以通过bus 向线程发送指令。