一种层间回填自适应SVC-DASH播放方法与流程

文档序号:16889451发布日期:2019-02-15 22:56阅读:233来源:国知局
一种层间回填自适应SVC-DASH播放方法与流程

本发明涉及一种动态自适应流媒体方法



背景技术:

近年来,在线流媒体视频服务得到广泛的应用。在线视频业务在整个因特网的数据流量正占据着越来越大的比重。基于http的自适应流技术克服了基于rtp/rtsp的流媒体传输部署难、不兼容防火墙等问题和http渐进式下载无法动态调整视频质量的问题,被广泛用于提供商用高质量的视频服务。市场上有多种流媒体技术,mpeg-dash(dash:dynamicadaptivestreamingoverhttp)协议可以兼容市场上主流自适应流媒体技术,受到业界和研究界的关注。

传统的自适应流媒体技术通过在服务端存储大量高级视频编码(advancedvideocoding,avc)以提供视频服务,但avc编码冗余非常大。可扩展视频编码(scalablevideocoding,svc)以其一次编码可多次按需适配的高可扩展性成为视频编码领域的研究热点。相比于avc编码,svc编码的方法能够大大减少视频提供商在视频服务端的存储容量。



技术实现要素:

本发明要解决现有技术的上述缺点,提供一种层间回填自适应svc-dash播放方法。

本发明基于dash框架,设计面向svc编码的流媒体客户端自适应播放方法。现有的基于svc编码的自适应决策方法主要根据客户端吞吐量或者缓存预测下一视频片段的质量等级,然后根据视频质量等级串行下载片段的基础层和增强层。基于吞吐量预测方法在带宽变化时会带来片段质量频繁切换的问题。基于缓存的预测方法则为了维持高缓存而一直下载较低质量等级的视频片段,引起观看视频的整体用户体验qoe偏低。上述方法在网络带宽剧烈变化时,存在视频卡顿、不能及时响应网络带宽、用户体验不友好的情况。

一种层间回填自适应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文件中的<baseurl>项修改为服务器的存储视频数据集的网络地址。

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<cur_speed<1.1*pre_speed,

则select=pre_select

否则,转步骤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,j)。如果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暂停播放,等待新片段的载入,否则继续播放直到播放到最后一个片段结束。

本发明的优点是:

1、采用svc编码的视频流,可以大大减少服务端的存储成本。

2、基于svc编码层的层间回填自适应机制可以在保证视频流流畅播放的基础上根据网络带宽状况确定是否回填视频质量,实现流畅播放基础上的及时响应网络带宽变化,提升用户体验。

附图说明

图1是本发明方法的架构图。

图2是本发明的自定义缓存存储结构。

图3是本发明的层间回填算法总体流程图。

图4是本发明的回填片段序号查找算法流程图

图5是本发明的回填质量确定算法流程图。

具体实施方式

参照附图,进一步说明本发明:

一种层间回填自适应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文件中的<baseurl>项修改为服务器的存储视频数据集的网络地址。

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<cur_speed<1.1*pre_speed,

则select=pre_select

否则,转步骤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,j)。如果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暂停播放,等待新片段的载入,否则继续播放直到播放到最后一个片段结束。

本说明书实施例所述的内容仅仅是对发明构思的实现形式的列举,本发明的保护范围不应当被视为仅限于实施例所陈述的具体形式,本发明的保护范围也及于本领域技术人员根据本发明构思所能够想到的等同技术手段。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1