云服务器

商务合作:179001057@qq.com

GStreamer介绍和基本概念

xiaoxiao2021-09-19  28


某平台价值19860元的编程课程资料免费领取【点我领取】


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

GStreamer介绍 GStreamer是在Linux下创建流媒体的应用程序框架(流媒体:流媒体,又叫流式媒体,是边传边播的媒体,是多媒体的一种)。GStreamer不仅可以处理音频和视频,它可以处理任何一种类型的数据流。(菜鸟刚开始学习)我认为它主要的功能就是进行数据流(主要是音频或者视频)的采集,处理(包括编码,解码,压缩等),发送,显示等。比如说你可以通过GStreamer来构建一个音乐播放器、进行录音录像、进行音频传输等~~~插件(Plugin) GStreamer框架是基于插件的,有些插件中提供了各种各样的多媒体数字信号编解码器,也有些提供了其他的功能。GStreamer核心库函数是一个处理插件、数据流和媒体操作的框架。
#include <gst/gst.h>//使用GStreamer必须包含的头文件 /***创建所需元件(全局变量)***/ GstElement *pipeline,*source,*parser,*decoder,*converter,*sink; 元件(Element) 元件(Element)是GStreamer中很重要的概念。元件相当于一个可以执行特定功能的黑盒子,数据流从元件的sink端流入,经过元件的处理,从src端流出。你可以创建你所需要功能的元件,将其按照你所想处理数据流的步骤顺序连接起来,从而完成你所想要实现的功能。 例如helloworld.c中创建了6个元件,分别是管道pipeline、源元件source、分析器parser、解码器decoder、转换器converter和接收元件sink,每个元件都有自己的特定的功能。GStreamer已经默认安装了很多有用的元件,当然如果有需要,也可以自己写一个新的元件来使用。把这些元件连接在一起就可以执行你所指定的特殊任务了。箱柜(Bin)和 管道(Pipeline) 箱柜(Bin)也是一个元件!它是一种可以来装载其他元件的元件。相当于一个大的容器,把你所连接起来的元件装在这个容器中,就可以通过改变一个箱柜的状态改变在这个箱柜中所有元件的状态。 管道(Pipeline)是一种特殊的箱柜,通常我们都将元件放入管道中,数据流的流动状态可以通过设定管道的状态来实现。 箱柜可以发送总线消息(bus message)给它的内部元件,这些消息包括:错误消息(error messages),标签消息(tag messages),EOS消息(EOS messages)。根据这些消息,我们可以对总线做出相应的处理。衬垫(Pad) 衬垫(Pad)相当于一个元件的插口,各个元件通过这个插口进行连接,这样数据流就可以在这些元件中进行传输。衬垫会限制特定的数据流类型通过,所以只有当两个衬垫的数据类型一致时,才能建立连接。 数据流的流向都是从一个元件的源衬垫(src)到另一个元件的接收衬垫(sink)。 功能(Cap) 衬垫有限制特定的数据流流过的功能,那这个功能就是通过功能(Cap)来描述的。功能(Cap)描述了能够通过衬垫或当前通过衬垫的数据流。我们可以总线(Bus) 每一个管道默认包含一个总线,应用程序不需要再创建总线。应用程序在总线上设置一个消息处理器。当主循环运行的时候,总线将会轮询这个消息处理器是否有新的消息,当消息被采集到后,总线将呼叫相应的回调函数来完成任务。缓冲区(Buffer) 缓冲区包含了你创建的管道里的数据流。通常一个源元件会创建一个新的缓冲区,同时元件还将会把缓冲区的数据传递给下一个元件。元件会自动处理缓冲区,不需要自己来处理。事件(Events) 事件是一系列控制粒子,随着缓冲区被发送到管道的上游和下游。下游事件通知流状态相同的元件,可能的事件包括中断,flush,流的终止信号等等。

菜鸟刚开始学习,主要是对《GStreamer开发手册》的记录的笔记,有什么不对的地方,希望大家指正,有什么问题希望我们能一起探讨。 完!