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

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

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

基于GStreamer的Smooth Streaming插件开发

1.gst_ssvideosink_preroll()。该函数用来初始化底层播放器接口,本文将avplayer的start函数接口放在该函数中。

2.gst_ssvideosink_render()。该函数是sink插件中最主要的函数,它定义了sink插件的实际功能,本文中的数据解析和数据注入部分都在该函数中实现,如上图中的红色方框内容。

3.gst_ssvideosink_event()。该函数用来判断数据是否注入完,若是,给主函数发送一个事件结束信息来控制播放器的状态;否则,继续执行数据解析与数据注入。

4.gst_ssvideosink_render()。该函数用来对Fragment数据解析和对sample数据处理并注入到底层接口的功能。render函数的主要步骤如下图4-12所示:

图4-12 render函数实现流程图

Step1.从环形缓存中获取一个完整fragment数据;

Step2.调用SMTH_parsefragment()函数解析该fragment数据,获得该fragment数据的sample数据相关信息;

Step3.为解析出来的sample数据加入对应的帧头信息;

42

基于GStreamer的Smooth Streaming插件开发

Step4.将加入帧头信息的sample数据注入到avplayer底层buffer中; Step5.为每个sample数据注入其对应的PTS时间; Step6.重复步骤Step1到Step5,直到所有数据注入完。

⑴视频数据帧头格式。本文从服务器下载的流媒体数据中的视频数据是采用H264编解码的。因此,要依据H264格式对所解析的sample数据进行处理才能使得底层接口能够正确播放视频。

对于H264编解码格式的视频文件,在注入数据到底层接口之前需要注入两部分数据:不同码率视频资源的描述信息和sample数据之前的起始码。

不同码率视频资源的描述信息可以从Manifest解析数据中获得。而sample数据之前的起始码为00000001字符串,加入这些字符串的意义是为了底层接口解码数据时能知道每个sample的起始地方和结束地方。

⑵音频数据帧头格式。本文用的音频数据是基于AAC的ADTS格式。对于该格式的音频数据解码前需要加入adts_fixed_header和adts_variable_header。这些帧头信息详细地描述了音频数据,为硬件的解码提供依据。

⑶PTS时间的注入。PTS是为解码器规定某一帧数据的显示时间,通过设置视频和音频的PTS时间,并将其注入到底层接口,才能实现视频帧与音频帧的同步播出。音视频sample数据的PTS时间计算方法如下所示:

Samplepts =(f.samples[m].timeoffset+f.samples[m].duration)*TIME_SCALE

其中durantion为解析后每个sample的持续时间,timeoffset为偏移时间,TIME_SCALE为时间计算基数。

其它函数的功能与source插件中的功能一致,都是GStreamer框架中需要调用的函数。

4.5.3 Avplayer底层接口

本文所用的avplayer接口都是基于海思硬件平台的视频播放器接口。主要有init接口、open接口、start接口、stop接口以及close接口等五个接口。

1.init接口。调用此接口会初始化底层视频播放器,该接口只能初始化一次,封装函数为:JZ_Error_t jz_avplayer_Init()。

2.open接口。该接口是打开已经初始化的视频播放接口,封装函数为:

43

基于GStreamer的Smooth Streaming插件开发

JZ_Error_t jz_avplayer_Open(JZ_OPEN_PARAM_t *openParam)

其中传入参数openParam为所传入的流数据类型,数据流类型总共有TS、ES和PES,本文所用的是ES流,因此设置参数为ES。

3.start接口。调用该接口后就可以播放视频,其封装函数为: JZ_Error_t jz_avplayer_Start(JZ_START_PARAM_t *startParam) 其中参数startParam为启动参数,用来设置播放的视频与音频的id和类型。视频类型有H264和WVC1,音频类型有AACL、WMA和WMAP。本文中的视频参数为H264,音频参数为AACL。

4.stop接口和close接口。当视频播放完毕时,调用这两个接口来停止播放和关闭播放器。其封装函数为:

JZ_Error_t jz_avplayer_Close()和JZ_Error_t jz_avplayer_Stop()。

第五章 测试结果

5.1 测试实例设计

本文在基于海思平台的机顶盒上设计测试实例对所设计的插件进行测试验证。测试实例设计思想:首先,在工程目录下的GStreamer插件目录中新建manifest文件夹和ssvideosink文件夹,将设计的source元件和sink元件分别放在这两个文件中;然后,通过在工程里条件编译生成对应的元件库libgstmanifest.so和libgstssvideosink.so;接着,在工程目录下的external目录下新建用于创建管道的main函数,用于实现测试,链接相对应的库,生成可执行文件gst_manifest;最后,将生成的库以及可执行文件拷贝到机顶盒中,在机顶盒中执行该main函数,从而实现对整个插件的测试。

基于GStreamer框架下创建Smooth Streaming插件通信管道的流程如图5-1所示:

44

基于GStreamer的Smooth Streaming插件开发

图5-1 测试用例设计过程

5.2 实际设计问题点解决方法 5.2.1 Avplayer初始化失败

在机顶盒平台上,执行管道main函数时,出现avplayer初始化失败的问题。具体出现问题如图5-2所示:

图5-2 avplayer初始化失败

通过对问题的分析和向有经验的同事请教,可知在机顶盒内部中已有live tv进程对avplayer进行过初始化步骤,当在pipeline进程中再一次初始化avplayer的话,会初始化不成功。

通过分析,可知解决该问题的办法有两个:第一种,将机顶盒内部对

45

基于GStreamer的Smooth Streaming插件开发

avplayer进行初始化的live tv进程取消对avplayer的初始化工作,使其不工作;第二种,将管道建立pipeline进程移植到机顶盒内部执行avplayer初始化的live tv中去执行,并且在sink元件程序中不能对avplayer进行初始化。通过定位海思平台的源程序可知,实现live tv的代码是在框架层中处理的,也就是基于java处理机制的,因此将创建管道pipeline程序移植到live tv中去执行是不可取的,本文采取第一种方法去解决该问题。

通过使用第一种方法后,再次运行后没有出现同样的问题,并且能够播放下载的视频。

5.2.2 实现手动智能切换码率

由于Smooth Streaming协议是在HTTP协议的基础上增加了自适应的技术,主要是为了能解决网络出现跳动情况下自适应地切换视频码率。而本文中的服务器是模拟多媒体服务器,不能实时地检测网络状况,因此本文通过按键输入方法来切换视频码率去模拟自适应技术。

通过按键输入方法去实现自动切换码率的方法有两个难点:第一,在linux平台下如何实现非阻塞的键盘输入;第二,如何能使得下载数据码率和播放数据码率的同步。

第一种问题的解决办法。通过查阅资料得知,在windows平台中有实现非阻塞模式的键盘输入,但linux下没有。因此本文根据windows实现非阻塞的键盘输入方法,调用linux中的底层接口,设计一个属于linux下的非阻塞的键盘输入函数。通过调用该函数能够实现:当有按键按下时,执行切换码率操作;当没有按键按下时,下次执行线程直接不执行这一块操作,而不会出现等待按键按下才能继续工作的情况。

第二种问题的解决方法。首先,设计两个全局变量new_vbitflag和old_vbitflag,在source元件执行下载Fragment数据的线程函数中,old_vbitflag用来保存之前的码率值,new_vbitflag用来保存改变后的码率值;然后,设计另一个全局变量保存按键按下时,已经下载Fragment数据的个数;最后,在sink元件中,通过这些全局变量去实时地、准确地改变所解析和播放的码率数据。

46

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

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