gstreamer的fakesrc插件

来源:百度文库 编辑:神马文学网 时间:2024/04/28 06:19:47
基于gstreamer的应用程序就像一条管道一样。数据从头流到尾,最后输出至我们所期望的载体

(通常是磁盘上的文件或直接驱动硬件)。数据的源头是从一个源元件(source element)开始,

这种元件只有一个衬垫(pad),而且位于输出端,它向管道中的其它元件提供数据流。
    常用源元件主要有filesrc和fakesrc,filesrc会根据其location属性指向的元件生成一个数据

流,它必须依存于现有的文件。而fakesrc是一个虚源,它不需要现有的文件,而是提供了一个数据

缓冲区,我们可以自由地往这个缓冲区填充数据,然后这些数据就会流到下一个元件。
    fakesrc的使用和其它元件一样,也是先通过***_make()创建一个GstElement,然后设置这个

GstElement的属性,最后将其添加到一个管道中并与其它元件链接起来,下面是它的一些关键属性
1.sizemax 它是fakesrc对应的数据缓冲区的大小,如果是运动图像数据,就是一帧图像占用的空间

,具体与图像格式有关。如果一帧Raw RGB bpp=16,sizemax=width*height*2.一帧YUV I420图像由

于每个像素占用了12bit空间,则sizemax=w*h*1.5。
2.signal-handsoff 如果设为true则表示用户希望自己往缓冲区里写数据,此时还需要用户手写一

个callback函数。在这个函数中完成对数据缓冲区的操作,函数的定义必须遵循特定的格式,即参

数和返回值类型必须确定。其中有一个类型为GstBuffer* 的参数,直接对其进行相应修改即可。那

么这个callback函数何时被调用呢?每当一帧数据被其它下游元件处理完后,就会调用一次这个函

数,从而完成数据更新。而这个函数会被调用多少次呢?看下面的参数
3. numofbuffers 他确定fakesrc向下游元件传递的数据帧数,也就是上面的callback函数调用的次

数。
    设置好上面这些属性并定义了callback函数之后,我们就可以控制fakesrc的数据输出了。但此

时输出的数据是一块缓冲区,我们必须赋予它一定的含义,这样才能与后面的元件进行数据交换,

赋予含义实际上就是定义数据格式,这要通过一个capsfilter元件实现,它是一个过滤器,只让指

定格式的数据通过,但不会修改数据。具体实现步骤如下:
1. 定义个GstElement capsfilter
2. 设置其caps属性,这个属性包括多个子属性,一个典型的设置是:
它表示按I420格式编码的数据帧
3.将capsfilter放在fakesrc和下游元件(通常是一个编码器)之间。