1. 前言
Gstreamer是一个用于创建流媒体(streaming media)应用的框架。基础的设计思想来源于Oregon Graduate Institute的video pipeline产品,同样也从DirectShow应用中借鉴了一些思想。
Gstreamer的开发框架使得编写任意类型的流媒体应用都变得十分简单。Gstreamer框架的设计思想让包括处理audio和video的应用开发变得不那么困难。并且Gstreamer不仅仅局限于audio和video,可以处理任意(any)类型的数据流(data flow)。 The pipeline design is made to have little overhead above what the applied filters induce(pipeline设计的开销要远小于filter所引起的)。基于此,Gstreamer即使是在设计高延迟或高性能(high-demands on latency or performance)的高端音频应用时,依旧是一个优秀的框架。
Gstreamer最常被使用来构建一个media player(媒体播放器)。Gstreamer中已经包含用于构建一个支持各种格式类型(ncluding MP3, Ogg/Vorbis, MPEG-1/2, AVI, Quicktime, mod, and more.),media player所需的组件components。但是,Gstreamer不仅仅只能做一个media player。其最重要的优势在于,(the pluggable componets)可插拔的plugin可以被mixed和matched到任意pipeline中,从而可以编写成熟的video或者audio编辑应用程序。
2. 编写一个audio filter插件
接下来的内容是如何开发一个示例:audio filter插件-MyFilter。这个element包含一个input pad和一个output pad。这个filter插件的作用仅仅就是将media和event数据从它的sink pad流入,src pad流出,对其中的数据不做任何处理。但是这个教程的最后,将会学习到如何添加一些有趣的功能:properties and signal handlers。
2.1 构建模板
在这一部分,我们将学到如何使用最少的code来构建一个新的plugin。首先,我们会看到如何得到Gstreamer的template source。然后,知道如何使用一些基础工具来复制和修改一个template plugin从而构建一个新的plugin。通过学习这部分的内容,最后我们将得到一个可以在Gstreamer应用中compile and use的audio filter插件。
2.1.1 克隆一个template plugin源码
Gstreamer说它有两种方式来开发一个plugin,一种是从零开始手撸代码,另一个种是复制一个已经存在的plugin模板然后修改。(说了个寂寞,CV不香