(转) GStreamer介绍和基本概念

转自: https://blog.csdn.net/ckx20/article/details/53214048

简单的介绍和一些基本的概念

  1. GStreamer介绍 
    GStreamer是在Linux下创建流媒体的应用程序框架(流媒体:流媒体,又叫流式媒体,是边传边播的媒体,是多媒体的一种)。GStreamer不仅可以处理音频和视频,它可以处理任何一种类型的数据流。(菜鸟刚开始学习)我认为它主要的功能就是进行数据流(主要是音频或者视频)的采集,处理(包括编码,解码,压缩等),发送,显示等。比如说你可以通过GStreamer来构建一个音乐播放器、进行录音录像、进行音频传输等~~~
  2. 插件(Plugin) 
    GStreamer框架是基于插件的,有些插件中提供了各种各样的多媒体数字信号编解码器,也有些提供了其他的功能。GStreamer核心库函数是一个处理插件、数据流和媒体操作的框架。

#include <gst/gst.h>//使用GStreamer必须包含的头文件

/***创建所需元件(全局变量)***/
GstElement *pipeline,*source,*parser,*decoder,*converter,*sink;
  • 1
  • 2
  • 3
  • 4
  1. 元件(Element) 
    元件(Element)是GStreamer中很重要的概念。元件相当于一个可以执行特定功能的黑盒子,数据流从元件的sink端流入,经过元件的处理,从src端流出。你可以创建你所需要功能的元件,将其按照你所想处理数据流的步骤顺序连接起来,从而完成你所想要实现的功能。 
    例如helloworld.c中创建了6个元件,分别是管道pipeline、源元件source、分析器parser、解码器decoder、转换器converter和接收元件sink,每个元件都有自己的特定的功能。GStreamer已经默认安装了很多有用的元件,当然如果有需要,也可以自己写一个新的元件来使用。把这些元件连接在一起就可以执行你所指定的特殊任务了。
  2. 箱柜(Bin)和 管道(Pipeline) 
    箱柜(Bin)也是一个元件!它是一种可以来装载其他元件的元件。相当于一个大的容器,把你所连接起来的元件装在这个容器中,就可以通过改变一个箱柜的状态改变在这个箱柜中所有元件的状态。 
    管道(Pipeline)是一种特殊的箱柜,通常我们都将元件放入管道中,数据流的流动状态可以通过设定管道的状态来实现。 
    箱柜可以发送总线消息(bus message)给它的内部元件,这些消息包括:错误消息(error messages),标签消息(tag messages),EOS消息(EOS messages)。根据这些消息,我们可以对总线做出相应的处理。
  3. 衬垫(Pad) 
    衬垫(Pad)相当于一个元件的插口,各个元件通过这个插口进行连接,这样数据流就可以在这些元件中进行传输。衬垫会限制特定的数据流类型通过,所以只有当两个衬垫的数据类型一致时,才能建立连接。 
    数据流的流向都是从一个元件的源衬垫(src)到另一个元件的接收衬垫(sink)。 
    一个完整管道的形象描述
  4. 功能(Cap) 
    衬垫有限制特定的数据流流过的功能,那这个功能就是通过功能(Cap)来描述的。功能(Cap)描述了能够通过衬垫或当前通过衬垫的数据流。我们可以
  5. 总线(Bus) 
    每一个管道默认包含一个总线,应用程序不需要再创建总线。应用程序在总线上设置一个消息处理器。当主循环运行的时候,总线将会轮询这个消息处理器是否有新的消息,当消息被采集到后,总线将呼叫相应的回调函数来完成任务。
  6. 缓冲区(Buffer) 
    缓冲区包含了你创建的管道里的数据流。通常一个源元件会创建一个新的缓冲区,同时元件还将会把缓冲区的数据传递给下一个元件。元件会自动处理缓冲区,不需要自己来处理。
  7. 事件(Events) 
    事件是一系列控制粒子,随着缓冲区被发送到管道的上游和下游。下游事件通知流状态相同的元件,可能的事件包括中断,flush,流的终止信号等等。

猜你喜欢

转载自blog.csdn.net/gsymichael/article/details/81114001