77范文网 - 专业文章范例文档资料分享平台

基于Gstreamer框架的smooth streaming协议的插件开发 - 图文(7)

来源:网络收集 时间:2020-04-16 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

基于GStreamer的Smooth Streaming插件开发

int http_Getheader(char *host_file, char *host_addr, int sockfd, int portnum)。其中:传入参数都为socket通信相关信息;其返回值为从报头信息中获取实体正文的长度。添加打印信息可以获得响应报头信息如图4-5所示:

图4-5 响应报头信息

5.获取实体正文

实体正文与响应报头消息是服务器一起发送的,通过识别响应报头的格式确定响应报头是否已经接受完毕,从而确定接受相对应额实体正文。本文设计接受实体正文函数如下所示:

void http_Recvcontent(int sockfd, char **temp_buffer, int contentlen)。其中:传入参数temp_buffer为用来保存实体正文的缓存;传入参数contentlen是获取响应报头消息所返回的实体正文的长度大小。

4.3 环形缓存设计

在实际的流媒体开发过程中,我们一般都是将从流媒体服务器中下载的数据保存在不同的文件中。当数据量小的时候,读写文件没有什么影响,但当数据量越来越大时,每次打开文件和读写文件所消耗的时间会越来越多。而我们的流媒体数据大小少则几百兆,多则几个G或者几十G,而且要实现直播或者点播方式的流媒体开发,数据的操作比较频繁,更会增加程序执行的时间,使得我们的程序在运行的过程中速度很慢。

与此同时,在实际的直播或点播形式的流媒体开发过程中,我们不仅要实现从流媒体服务器中下载数据,而且在同时要解析下载数据并将数据注入到底层播放器接口实现实时播放。这种模式就很类似于队列,从一端插入元素,从另一端

32

基于GStreamer的Smooth Streaming插件开发

删除元素。因此,需要一种适合流媒体开发的缓存技术,本文根据实际需要选择了环形缓存技术的原因如下所述:

1.环形缓存存储速度快,操作简单。

环形缓存却不一样。它是通过设定一个固定大小的空间,直接将下载的数据以内存拷贝方式拷贝到固有的空间中,操作方便并且能循环利用该数据空间,同时执行时间短。

2.环形缓存可以实现队列的功能。

环形缓存的实质就是一种队列,通过读写指针去控制缓存中数据的读写。 综上所述,可知环形缓存技术在解决流媒体开发过程中占有不可替代的地位。

4.3.1 环形缓存的基本结构

在通信程序中,经常使用环形缓存作为数据结构来存放通信中发送和接收的数据。环形缓存是一个先进先出的循环缓冲区,可以向通信程序提供对缓冲区的互斥访问。本文设计的环形缓存结构如下所示:

typedef struct ring {

char *bufBase; int bufLen; int wptr; int rptr; int dataLen;

}RING;

其中:bufBase为环形缓存指针;bufLen为环形缓存的大小;wptr为写指针值;rptr为读指针值;dataLen为环形缓存中已有数据的长度。

4.3.2 环形缓存的工作原理

环形缓存通常有一个读指针和一个写指针。读指针指向环形缓冲区中可读的

33

基于GStreamer的Smooth Streaming插件开发

数据,写指针指向环形缓冲区中可写的缓冲区。通过移动读指针和写指针就可以实现缓冲区的数据读取和写入。在通常情况下,环形缓冲区的读用户仅仅会影响读指针,而写用户仅仅会影响写指针。如果仅仅有一个读用户和一个写用户,那么不需要添加互斥保护机制就可以保证数据的正确性。如果有多个读写用户访问环形缓冲区,那么必须添加互斥保护机制来确保多个用户互斥访问环形缓冲区。

4.3.3 环形缓存的设计过程

本文根据实际情况设计了一个简单并且实用的环形缓存,环形缓存的数据结构如上所述,主要分为四个大的模块进行设计:初始化模块、读数据模块、写数据模块和销毁模块。以下从这四个大方向详细该环形缓存的设计过程。

1.初始化模块

初始化模块主要是对环形缓存的数据长度进行初始化,同时对环形缓存结构体中的数据初始化。本文设计的环形缓存初始化函数如下所示:

RING *Ringbuf_init(int bufsize)

其中传入参数bufsize为希望设计环形缓存的大小;返回值为该结构体指针。

2.读数据模块

本文将读数据模块分割成两个子模块:r_getbuf模块和r_putbuf模块,其中r_getbuf模块用来获取当前环形缓存中能读数据的首地址,r_putbuf模块用来修改读数据后环形缓存中的读指针rptr和dataLen。具体接口如下所示:

int r_getbuf(RING *ringbuf, char **rbufaddr, int len)

int r_putbuf(RING *ringbuf, int len)

其中r_getbuf函数中参数:ringbuf为传入的环形缓存指针,rbufaddr为传出可读数据地址的指针,传入参数len为从环形缓存中读取数据的长度,返回值为环形缓存能够提供的读取数据的长度。r_putbuf函数中参数:ringbuf为传入的环形缓存指针,传入参数len为r_getbuf函数的返回值。

3.写数据模块

写入数据到环形缓存也是基于同样的原理,分割成两个子模块:w_getbuf模块和w_putbuf模块,其功能通读模块类似。具体接口如下所示:

34

基于GStreamer的Smooth Streaming插件开发

int w_getbuf(RING *ringbuf, char **wbufaddr, int len)

int w_putbuf(RING *ringbuf, int len)

写数据模块的参数与读数据模块原理一致。

4.销毁模块

当调用环形缓存结束时,需要释放初始化的资源,特别是本文中调用了malloc函数来获取一块固定大小的数据空间,因此在销毁模块中必须对其free,否则会出现内存泄露问题。本文设计的环形缓存销毁函数接口如下所示:

int Ringbuf_destroy(RING *ringbuf)

其中传入参数ringbuf为指向环形缓存的指针;释放资源成功返回0值,否则返回-1值。

4.4 Smooth Streaming通信协议设计实现 4.4.1 Smooth Streaming通信协议设计流程

Smooth Streaming协议是基于HTTP协议进行通信,并且能根据用户端实际的可用频宽和CPU资源动态地调整从服务器端下载的在线视频数据质量,从而为用户带来每一时刻的最佳视觉感受。具体的工作流程如图4-6所示:

图4-6 Smooth Streaming通信协议流程

根据上图可知,Smooth Streaming协议工作的具体步骤如下所示: Step1:客户端向服务器发送Manifest请求; Step2:服务器发送Manifest响应信息给客户端;

35

基于GStreamer的Smooth Streaming插件开发

Step3:客户端接受Manifest响应信息,解析该信息的实体正文; Step4:客户端从解析后得到的数据中获得第一个Fragment的URL地址, 并向服务器发送Fragment请求;

Step5:服务器根据该URL发送对应的Fragment响应信息给客户端; Step6:客户端接受Fragment响应信息,并对其解析获得该Fragment数据; Step7:重复Step4到Step6步骤,直到接受完所有Fragment数据为止。 其中Manifest为该媒体数据的视讯清单;Fragment为每个视讯档案中的视频片段。

4.4.2 Smooth Streaming通信协议设计过程

根据Smooth Streaming协议的工作步骤,本文将该协议设计过程分割成以下几个模块进行设计:下载Manifest数据模块、解析Manifest数据模块、下载Fragment数据模块和解析Fragment数据模块等,具体的模块框图如图4-7所示:

图4-7 Smooth Streaming通信协议具体实现框图

1.下载Manifest数据模块

该模块功能主要是从服务器端下载媒体数据的Manifest数据到客户端中。由于Smooth Streaming协议是基于HTTP协议的,同时IIS服务也是基于HTTP协议通信基础上建立的,因此Manifest数据可以用本文设计的HTTP协议来下载,具体步骤为:首先,解析服务器URL地址;然后,创建socket通信,发送Manifest

36

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库基于Gstreamer框架的smooth streaming协议的插件开发 - 图文(7)在线全文阅读。

基于Gstreamer框架的smooth streaming协议的插件开发 - 图文(7).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/976863.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: