利索能及
我要发布
收藏
专利号: 2018108087942
申请人: 浙江工业大学
专利类型:发明专利
专利状态:已下证
更新日期:2026-07-29
缴费截止日期: 暂无
联系人

摘要:

权利要求书:

1.一种层间回填自适应SVC-DASH播放方法,包括以下步骤:

步骤1,创建SVC编码数据集;

1.1视频格式转换;

选择YUV、AVI等任意格式视频源,将其转化为MPEG-DASH协议需要的H.264视频格式;采用FFMPEG,MediaCoder开源工具实施视频编码转换;

1.2视频分割;

SVC编码将每个视频片段分割为一层基础层和多层增强层,且基础层和多个增强层可以通过不同的组合方式解码出不同视频质量的媒体流;将步骤1.1生成的H.264格式视频分割成固定时长τ秒,一般为2~10秒的多个视频片段,每个视频片段由一层基础层和多个增强层构成;根据生成的视频片段序号、片段时长、视频片段帧率、片段层下载链接、片段层文件大小等信息构造一个MPD文件,MPD文件是DASH视频描述文件;视频片段分割采用JSVM、SVC_Demux_Mux开源工具;

步骤2,搭建基于SVC编码的HTTP视频文件服务器;

利用现有的服务端技术Apache,nginx,tomcat搭建SVC编码的文件服务器,并将MPD文件中的项修改为服务器的存储视频数据集的网络地址;

步骤3,层间回填自适应播放方法的SVC-DASH客户端模块及交互;

SVC-DASH客户端包括:用户交互模块、下载模块、缓存管理模块、自适应决策模块、片段合成模块以及播放控制模块共六个模块;用户交互模块是用户和客户端之间进行交互的接口,用户选择SVC编码的DASH视频源,下载并解析DASH视频源的MPD文件;自适应决策模块采用层间回填自适应方法决策出可以从视频文件服务器端下载的视频片段层;下载模块将决策出的视频片段层文件下载交由缓存管理模块;缓存管理模块负责将下载的片段层存储到缓存区;片段合成模块负责从缓存区内取出片段基础层和多层增强层进行合成,并交给播放控制模块;播放控制模块将片段合成模块合成的H.264片段加载至Mplayer播放器播放的主文件中,通过Mplayer播放器进行播放;播放控制模块需要保证当缓存区为空时,主动暂停Mplayer播放器播放视频,等待缓存区填充入新的片段后再通知Mplayer播放器继续播放视频;各个模块之间协作步骤如下:

3.1用户交互模块获取视频源MPD并解析处理;

首先用户通过用户交互模块添加可播放的视频源的MPD下载地址,检查MPD下载地址是否有效,如果无效,则重新进行添加MPD下载地址;如果有效则根据MPD下载地址从服务端下载MPD文件;当客户端下载好MPD文件后,将MPD文件通过XML技术进行解析,获取MPD文件包含的信息,并发送给自适应决策模块、下载模块和播放模块;

3.2层间回填自适应决策;

首先自适应决策模块采用层间回填自适应方法确定需要下载的片段层,然后下载模块根据自适应决策的片段层从服务端进行下载;

层间回填自适应方法是在SVC-DASH的框架下,根据缓存填充状态预测下一次下载的片段层,并返回给下载模块进行下载;当缓存区处于未填满状态时,通过下载新片段的基础层进行填充缓存;当缓存区填满时,通过回填算法确定下载的片段层;相关定义如下:定义片段层为(i,j),i为视频片段序号,j为质量等级,其中j∈[0,M],当j=0时,视频片段仅含基础层;当j>0时,视频片段含有1个基础层和j个增强层,M为片段i所含增强层总数;

定义last_chunk,last_chunk是一个长度为2的一维数组,其中last_chunk[0]记录最新下载的片段序号,last_chunk[1]记录上次回填的片段序号;

3.2.1缓存区处于未填满状态时,添加新片段基础层;

last_chunk[0]=last_chunk[0]+1,i=last_chunk[0],j=0;返回片段层(i,j);否则,转3.2.2。

3.2.2当缓存区填满时,质量回填;

当缓存区已满时,对已下载的视频片段进行回填;在回填的过程中,需要在每次下载基础层或增强层后,及时根据当前带宽调整回填质量;步骤包含回填片段序号查找和层间回填质量确定;

1)回填片段序号查找算法;

在选择回填片段序号时,需要保证回填片段尚未回填且尚未播放;因此选择回填片段序号时,选择last_chunk[1]和play_chunk+2中片段序号较大的;

i=max(last_chunk[1],play_chunk+2)j=len(buffer(i))

其中play_chunk表示了当前播放器正在播放的视频片段的序号,play_chunk+2表示正在播放的视频片段的序号+2,这样能够有效防止回填过程中下载已经播放过的视频片段的片段层;

2)层间回填质量确定算法;

基于实时带宽预测片段质量;当前带宽和上次网络带宽接近,则预测质量等级和上次选择的质量等级相同;否则,找到和当前带宽最匹配的质量等级;

定义上一次片段层下载的网络带宽为pre_speed,当前实时带宽为cur_speed;pre_select表示pre_speed带宽下选择的质量等级,select表示当前片段i的预测质量等级;

level为一维数组,存储不同质量等级所需的带宽;level[select]表示了质量等级为select时所需的带宽;具体如下:a)如果0.9*pre_speed

否则,转步骤b)

b)找到和当前带宽最匹配的质量等级,方法如下:

select从0开始,直到select符合

0.9*cur_speed≤level[select]<1.1*cur_speed,选择select值作为当前选择的质量等级;

如果当前带宽小于level数组中的最小质量等级所需带宽时,选择最低的质量等级select=0;

如果当前带宽大于level数组中的最大质量等级所需带宽时,选择最大质量等级,select=M;

3)确定自适应下载层;

如果j=select时,则i=i+1,last_chunk[1]=i,j=len(buffer(i)),返回(i,j);

3.3视频下载处理;

下载模块在获得自适应决策出的需要下载的片段层信息后,从获取的MPD文件信息中查找决策出的需要下载的片段层的下载链接,并将其下载;

3.4视频缓存管理;

在片段层下载后,将片段层存储到缓存区中;缓存区内存放的视频片段以哈希表结构组织,其中哈希表的键值是视频片段序号;哈希表的键值是一个列表,列表存储了片段序号为哈希表键对应的片段层存储地址;例如存储片段序号为7且其质量等级为2时,哈希表的键是7,其值为由7-BL,7-EL1和7-EL2的地址构成的列表;

3.5视频片段合成;

片段合成模块从缓存区中取出视频片段的基础层和多个增强层,由片段合成模块合成可播放的H.264片段,并由播放控制模块加载入播放文件中,由Mplayer播放器播放;合成模块工具可以参考JSVM,SVC_Demux_Mux等开源工具;

3.6控制播放模块读取主文件并播放;

Mplayer播放器启动时需要从播放主文件中开始读取并播放,控制播放模块不断的从片段合成模块获取新的H.264片段,并加载入播放主文件中,Mplayer播放器读入视频片段,并交给解码模块,解码模块将视频片段解码成帧,并存人Mplayer的播放帧缓存中;Mplayer从帧缓存中取出帧进行播放;视频还没有播放到最后一个片段时,如果帧缓存中已经没有可播放帧,控制播放模块会控制Mplayer暂停播放,等待新片段的载入,否则继续播放直到播放到最后一个片段结束。