基于缓存补偿的视频码率自适应算法

2022-09-25 08:42吉爱国栾云哲
计算机应用 2022年9期
关键词:阈值客户端预估

吉爱国,栾云哲

(青岛理工大学信息与控制工程学院,山东青岛 266520)

0 引言

随着互联网技术的不断发展,以音视频为主的多媒体内容在网络传输流量中占据的比重越来越大。根据第44 次中国互联网统计报告[1]显示,目前音视频类的流量占互联网流量的比重已达到80%,思科公司的报告[2]指出,到2021 年全世界网络流量将有80%为视频流量。

采用超文本传输协议(Hyper Text Transfer Protocol,HTTP)的流媒体传输技术,基于传输控制协议(Transmission Control Protocol,TCP),以其高可靠性、强防火墙穿透能力和系统配置简单等特点,成为近年来流媒体传输的主流技术,面对用户对高体验质量(Quality of Experience,QoE)的需求[3],基于HTTP 的动态自适应流(Dynamic Adaptive Streaming over HTTP,DASH)媒体技术作为一种有前途的解决方案,已经受到视频服务提供商和学术研究的重视[4]。

DASH 技术的核心在于部署在视频客户端的码率自适应(Adaptive Bit-Rate)切换算法,通过定义良好的码率自适应逻辑来提高视频播放质量,进而提高用户QoE,因此,如何设计高效的码率自适应算法成为DASH 技术的研究热点。

目前码率自适应算法的研究方向主要分为三大类:基于带宽的码率自适应算法、基于缓存的码率自适应算法和基于带宽和缓存混合控制的码率自适应算法。

1)基于带宽的码率自适应算法[5-6]。如:文献[5]中利用股市预测中的常用指标,异同移动平均(Moving Average Convergence and Divergence,MACD)线来预估下一时刻的可用带宽并适配码率;文献[6]中通过“探测和适应”的机制预测客户端TCP 吞吐量,根据预测结果选择合适的码率分片。

2)基于缓存的码率自适应算法[7-8]。如:文献[7]中通过对缓存区分级设置不同的倍增系数,根据缓存占用率与历史分片下载速率共同决定下一分片的下载码率;文献[8]中提出了一种基于模糊逻辑的码率自适应算法,该算法将当前缓存时长与缓存变化差值进行模糊化处理后,利用模糊判决规则对处理后的数据进行分析,最后去模糊化决策出下一分片的码率。以上两类算法在进行码率决策时考虑单一因素具有高效表现,在网络剧烈波动时,基于带宽的码率自适应算法对带宽预估的准确度会下降,码率可能会频繁切换,影响视频播放的流畅性,基于缓存的码率自适应算法在网络骤降时会大幅度消耗缓存资源,存在视频播放中断的风险。

3)基于带宽和缓存混合控制的码率自适应算法[9-14],在预估可用带宽的基础上,结合当前缓存区状态联合决策下一时刻的码率等级。如:文献[9]中取最近一段时间内的分片下载速率均值和方差感知网络变化,再观察当前缓存时长决策下一分片的码率等级;文献[11]中采用状态机的设计思想,通过检测QoE 影响因素的数值变化,充分利用影响因素与各个码率状态间的联系控制码率切换;文献[12]中优先考虑客户端缓存状态,再根据预估带宽决策码率是否切换;文献[13]中提出一种基于DASH 标准的码率平滑切换(Rate Smooth Switching,RSS)算法,根据最近几个分片的下载速率定义带宽偏移系数感知网络变化方向,结合缓存区切换阈值来判定是否切换码率;文献[14]中提出一种动态自适应的HTTP 流码率渐进切换(Dynamic Adaptive Step-wise Bitrate Switching,DASBS)算法,该算法先对最近几个分片的下载速率采用指数加权方法预估带宽,再依据带宽波动程度和缓存时长对带宽进行矫正,最大可矫正到预估带宽的1.5 倍,在缓存时长充足的情况下可以请求到比当前带宽高的码率等级,有效提高了视频的平均码率。上述算法结合了带宽和缓存联合决策码率切换,有效避免了视频播放中断现象,保证了视频播放的流畅性;但码率切换幅度较大,码率切换平滑性较差,在部分网络情况下,缓存时长会持续累积至最大值迫使码率决策模块采取“休眠”策略,降低了视频的平均码率和带宽利用率,影响用户QoE。

针对上述问题,本文提出了一种DASH 标准的基于缓存补偿的码率切换(Bitrate Adaptive Switching based on Buffer Compensation,BASBC)算法,通过在缓存区设置码率上切阈值和码率下切阈值,构造缓存累积-消耗的状态循环,避免发生缓存持续累积的情况,在保证视频播放流畅性和平滑性的基础上,利用冗余缓存延长视频切片下载时间,调整码率切换至更高等级,在缓存消耗至码率下切阈值时,确保视频能够逐级切换至合适的码率等级,充分利用缓存,提高带宽利用率和视频平均码率,有效改善用户观看视频的QoE。

1 码率自适应切换算法

1.1 系统模型

DASH 技术的系统由视频服务器与客户端播放器组成,视频原文件在视频服务器经编码后得到多个码率等级的视频压缩文件,这些压缩文件又被分割为多个视频分片,每段分片包含几秒的视频,可以保证多种码率的视频分片在时间线上相互对齐,使客户端在切换码率时可以平稳进行。在视频分片完成时,服务器还会生成一个用于描述这些视频分片信息的媒体描述文件(Media Presentation Description,MPD),这个文件包含视频分片的播放时长、码率等级和视频分片的统一资源定位符(Uniform Resource Locator,URL)等信息[15]。在客户端接收到并解析MPD 文件后,会调用码率自适应算法决策出合适的码率分片并下载到本地进行播放,整个DASH 技术的系统架构如图1 所示。

图1 DASH技术的系统架构Fig.1 System architecture of DASH technology

1.2 算法目标

码率自适应的目的是为了使客户端在有限的网络带宽下、网络波动频繁的环境中选择最佳码率的视频分片,通常较高的码率意味着视频经编码压缩后的文件所占空间较大,意味着在客户端可以解码更多的比特来还原视频的诸多细节。一般情况下,相同分辨率的视频,其码率越高,视频清晰度也就越高,因此码率可作为衡量视频质量高低的一个标准,客户端播放的视频分片,其码率越高,用户QoE 也就越好。除了视频码率外,还有其他一些影响用户QoE 的因素,如视频播放的卡顿次数和码率切换的次数等,因此,提高视频的播放质量,最大化用户QoE,可以从以下几个方面入手:

1)尽可能提高视频播放的平均码率。

2)视频播放过程中不能出现卡顿现象。

3)码率切换次数要少,保证视频播放的稳定性。

4)码率切换要实现逐级切换,避免出现码率突然大幅下降的现象。

5)视频启动要迅速,最小化视频启动时延。

为了更好地实现这几个目标,本文提出一种基于缓存补偿码率的自适应算法。

1.3 本文算法思想

首先,对DASH 技术的视频传输过程进行分析。简单来说,客户端先向服务器请求MPD 文件并将之下载到本地解析和获取服务器视频分片的具体信息,再调用客户端的码率自适应算法决策出应请求的码率等级。为保证用户观看视频的流畅性,所请求视频分片的码率应始终低于客户端的当前带宽值,客户端持续向服务器请求视频分片直到缓存上溢,请求分片的码率若持续低于客户端带宽值,缓存区将快速累积,为防止缓存上溢,部分算法采取“休眠”策略,等待缓存消耗再恢复请求。

视频缓存累积是因为视频分片的下载时间低于分片播放时长,随着视频播放,视频缓存区有了足够的缓存时长保证当前播放不会发生中断,此时认为可以将请求分片的码率调整到高于当前带宽值的等级,也就是使视频分片的下载时长大于视频分片的播放时长,达到消耗缓存时长的目的,既能避免缓存区发生上溢,又可以提高视频播放的平均码率。只有客户端网络状况良好、客户端能稳定请求码率最高级别的视频分片,且在缓存区即将上溢时,客户端才被允许采取“休眠”策略来避免缓存区上溢。

本文算法在客户端缓存区设置码率上切阈值和码率下切阈值,客户端在初始阶段采取快启动策略,即从低向高逐级切换至当前带宽值下的最高码率等级,此过程缓存处于累积状态。随时间推移,视频缓存时长将逐渐累积至码率上切阈值,此时缓存进入消耗状态,码率决策模块将请求高于当前带宽值的码率等级,并维持到视频缓存时长低于码率下切阈值时,再逐级切换到低于当前带宽值的最高码率等级,使缓存再次进入累积状态并向上切阈值运动,形成一个从下切阈值向上切阈值累积,再从上切阈值向下切阈值消耗的循环,客户端可充分利用缓存资源来提高视频的播放质量。传输速率恒定为6 Mb/s 时,本文算法的视频码率变化和客户端缓存变化如图2 所示。

图2 恒定速率下的客户端码率缓存变化比较Fig.2 Comparison of client bitrate and cache changes at constant rate

在图2 中,客户端处于稳定的网络环境中:在初始阶段,客户端始终请求低于当前带宽值的码率等级;在一段时间后,视频缓存时长累积至上切阈值,码率决策模块请求高于当前带宽值的码率级别;随时间推移,缓存时长消耗至下切阈值以下,码率决策模块逐级切换码率等级并重新累积缓存时长。

基于上述策略,进一步划分客户端缓存阈值,如图3 所示,其中:qmin是保障视频播放流畅性的最低阈值,低于这个阈值,客户端请求最低码率的视频分片以快速累积缓存时长,避免视频发生中断,但由于请求的视频码率是最低等级,对用户体验质量影响极差,因此,在视频播放过程中应极力避免缓存时长低于这个值;qup是动态上切阈值,缓存时长累积至这个值后,客户端将请求高于当前带宽值的码率等级,缓存进入消耗状态并向动态下切阈值qdown运动,当缓存时长低于qdown时,码率决策模块将逐级切换至当前带宽下的最高码率,缓存再次进入累积状态。缓存处于消耗状态时,客户端请求高码率视频分片的行为可看作是对前一个累积状态时视频码率偏低的补偿,能够有效提高视频播放的平均码率,提高用户QoE。

图3 视频缓存区阈值设置Fig.3 Video buffer threshold setting

客户端网络状况不可能一直保持稳定状态,在网络带宽频繁波动的环境下,采用这种策略可能会因带宽的突然下降而增加分片下载时间,导致缓存时长低于qmin,通过设计合理的码率缓存阈值可以有效避免这种情况的发生。

1.4 本文算法设计

本文所提出的码率自适应算法分为带宽预估模块和码率决策模块两个主要模块:带宽预估模块根据最近几个已下载的视频分片的下载速率预估下一时刻可用带宽;码率决策模块依据带宽预估值定义码率动态切换阈值,根据视频缓存时长和码率动态切换阈值来决策是否进行码率切换。

1)带宽预估模块。

在进行带宽预估之前,先对带宽可能发生的变化进行分析,在复杂网络环境中,下一时刻带宽变化不是上升就是下降,只是变化程度有高有低。

对于上升的网络状况,可以取最近M个分片的下载速率均值作为下一时刻的预估带宽值,如式(1)所示:

其中:k为下一分片的下载序号,bk-i表示最近第i个分片的下载速率。为保证用户观看视频不会发生中断现象,自适应策略应对带宽变化呈突然下降的情况敏感,因此设置一个波动系数θ感知带宽衰减的程度,若衰减程度高则以当前分片的下载速率作为下一时刻的预估带宽值,如式(2)所示:

其中:bk-1是当前分片的下载速率表示除去当前切片的最近M-1 个视频分片的下载速率均值。若当前分片下载速率小于均值,并且当前分片下载速率小于bdown时,则说明带宽衰减程度较大,以当前分片下载速率作为下一时刻的预估带宽值;若当前分片下载速率处于与bdown之间,表明带宽衰减程度不高,采用指数加权平均的方式来计算带宽预估值。

首先计算最近M个视频分片的权值,如式(3)所示:

其中:wk-i表示第k-i个下载分片的权重值,w是权重系数。从式(3)中可以看出,i取值越小,与当前分片序号越近的历史分片所占权重值越大,下一时刻带宽预估值为:

综上所述,将下一时刻的带宽预估值定义为:

2)码率决策模块。

码率切换模块是本文算法的设计重点。如1.3 节所述,本文算法尝试在视频播放过程中形成一种缓存状态循环,并在缓存区定义了两个动态阈值(码率上切阈值和码率下切阈值)作为码率切换的条件。除此之外,缓存区的状态也被分为累积状态和消耗状态,当缓存区处于累积状态中,客户端请求当前带宽下的最高码率,在此过程中,若客户端带宽下降,自适应策略不会立刻根据带宽预估值调整码率,而是观察当前缓存时长是否低于下切阈值,只有当缓存时长低于下切阈值时,客户端才会逐级切换至相应的码率,这避免了客户端因短暂的网络波动而频繁切换码率,在一定程度上保障了视频播放的稳定性。

在定义码率下切阈值之前,先对其进行分析,码率下切阈值处在缓存区的最小阈值与上切阈值之间,其主要作用为保障客户端可以逐级切换至带宽预估值下的最高码率,切换幅度可能是单级切换和多级切换,因此该值应随切换幅度的增大而增大,假设tar是要切换到的码率等级,cur是当前切片的码率等级,以带宽预估值逐级切换所用时间如式(6)所示:

在进行码率下切的过程中,若为多级切换,则必须考虑带宽呈逐渐下降的情况,若在切换途中带宽下降程度加剧,所耗费的时间必将大于计算出的时长,为避免发生上述情况,定义一个参数α来动态调整码率下切阈值的大小,码率切换的幅度越大,耗费的时间越多,码率上切阈值越高,α也就越大。α和码率下切阈值的定义如式(7)所示:

其中:Rcur是当前请求的码率,Rmax是最高码率。码率上切阈值应与当前请求分片的码率等级有关:若当前请求的码率等级较低,那么缓存上切阈值不宜太高;否则缓存累积时间变长。视频请求至最后一个切片时,缓存区处于累积状态,缓存的视频分片的码率较低,降低视频播放质量,影响用户QoE。码率上切阈值的定义如式(8)所示:

其中:Bmax是缓存最大值,cur是当前请求的码率等级,L是最高的码率等级,β是用于调整上切阈值的参数。如此设计的码率上切阈值可有效避免在视频请求完成后,缓存区累积大量低码率视频的情况,可有效提高带宽利用率,改善用户体验质量,经实验发现,β取0.85 时效果最好。

使用Bcurrent表示当前时刻客户端的缓存时长,Rmin表示最低码率,整个码率自适应过程的算法描述如下:

2 仿真与结果分析

2.1 仿真环境和参数

本文基于Windows Server 2008 R2 Enterprise 搭建了一个IIS(Internet Information Services)服务器作为视频服务器,使用python 语言编写不同的码率自适应算法并模拟客户端请求视频分片以及视频播放的过程,分别对本文算法、RSS 算法[13]和DASBS 算法[14]进行比较。

实验使用Big Buck Bunny(https://peach.blender.org/)作为视频数据集,视频时长共634 s,共159 个视频分片,每个视频分片时长为4 s,共有10 个码率等级,分别为{200,400,600,800,1 000,1 500,2 500,4 000,8 000,12 000}(单位为kb/s),其中4 000、8 000、12 000 的等级分别对应为720P、1080P 和2160P,通过对国内外视频网站的观察,发现它们的视频码率等级前后相差较大,主要原因在于分辨率的大小影响像素的数量,导致压缩后的视频文件大小相差也较大,因此基于这种特征来设置码率集合。客户端缓存时长设置为60 s,缓存区最小值qmin设置为8 s,波动系数θ设置为0.9,切片个数M设置为5,权重系数w设置为0.5,上切阈值调整系数β设置为0.85。

2.2 仿真结果分析

为测试本文算法、RSS 算法和DBSAS 算法的性能,本文设置了3 种网络状况:场景1 和场景2 分别设置带宽为恒定的5 Mb/s 和7 Mb/s;场景3 设置带宽呈阶梯上升或下降的变化规律,带宽变化从3 Mb/s 每隔100 s 增加2 Mb/s,带宽变化至9 Mb/s 后,每隔100 s 下降2 Mb/s 直至5 Mb/s;场景4 设置带宽被设定为从6 Mb/s 骤降至2 Mb/s,维持30 s 后再变化至6 Mb/s。

当模拟带宽处于场景1 时,三种算法的运行情况如图4所示,图4(a)为选择的分片码率随时间变化的曲线,图4(b)为缓存时长随时间变化的曲线。

图4 场景1下三种算法的比较Fig.4 Comparison of three algorithms in scenario 1

如图4(a)码率变化曲线所示,在带宽恒定为5 Mb/s 的情况下,本文BASBC 算法能够间歇性地请求高于当前带宽值的码率等级,结合图4(b)缓存时长变化曲线来看,当缓存时长累积至码率上切阈值后,BASBC 算法调高要请求的码率等级,消耗冗余的缓存时长,当缓存时长消耗至码率下切阈值后,逐级降低码率等级至当前带宽值下的最高码率,充分利用缓存资源,提高视频平均码率和带宽利用率;RSS 算法和DASBS 算法在进行码率决策时受到预估带宽值的限制,在这种情况下无法请求更高一级码率,缓存时长一直保持在最大值,未能充分利用缓存资源,具有较低的带宽利用率。

当模拟带宽处于场景2 时,三种算法的运行情况如图5所示,在此场景中,带宽被设定为7 Mb/s。如图5(a)码率变化曲线所示,三种算法都能够请求比当前带宽值高的码率等级,RSS 算法虽然在切换次数上要优于DASBS 算法,但会出现分片码率大幅度下降至最低码率的情况。结合图5(b)缓存变化曲线来看,RSS 算法在初始阶段逐步升高码率,进入稳定状态后,缓存时长一直在被消耗,当消耗至缓存区最小阈值时,码率等级骤降至最低码率,再次逐步升高码率并请求比当前带宽值高的码率等级,一段时间后再次骤降,周而复始;DASBS 算法依据当前带宽预估值和缓存百分比设置动态上切阈值和动态下切阈值,但两个阈值相差较小,码率切换次数较多;BASBC 算法利用当前码率等级设置码率上切阈值,结合预估带宽计算逐级切换至当前带宽下最佳码率所需的时间来设置码率下切阈值,两个阈值间相差较大,在提高带宽利用率的同时减少码率切换的次数,提高视频播放的稳定性。

图5 场景2下三种算法的比较Fig.5 Comparison of three algorithms in scenario 2

当模拟带宽处于场景3 时,带宽呈阶梯上升或下降,3 种算法的运行情况如图6 所示。码率变化曲线如图6(a)所示,BASBC 算法可以较快请求到高于当前带宽值的码率等级,但码率切换次数多于DASBS 算法和RSS 算法;RSS 算法请求高于当前带宽值的码率等级的时刻最晚,但码率切换次数最少,视频播放稳定性最好。结合图6(b)缓存时长变化曲线来看,BASBC 算法的缓存时长始终在码率上切阈值和码率下切阈值之间循环,而DASBS 算法和RSS 算法都有一段时间缓存达到上界,缓存利用得不够充分,在这种情况下,BASBC算法的带宽利用率以及平均码率要高于DASBS 算法和RSS算法。

图6 场景3下三种算法的比较Fig.6 Comparison of three algorithms in scenario 3

当带宽处于场景4 时,如图7 所示,客户端在第150 s 和第360 s 时带宽由6 Mb/s 骤降至2 Mb/s,此时,码率自适应算法首先应保证视频播放的连续性,即不应发生视频中断现象。其次,客户端应能够根据变化后的带宽平滑地切换至最佳码率,如图7(a)和图7(b)所示,BASBC 算法和DASBS 算法在进行码率决策时都留有足够的缓存时长来保证视频播放的连续性,在此基础上两种算法都能实现逐级切换,且BASBC 算法请求低码率分片的个数要少于DASBS 算法。如图7(c)所示,RSS 算法在码率骤降时码率切换的跨度比较大,不能实现逐级切换,码率切换的平滑性较差。

图7 场景4下三种算法的比较Fig.7 Comparison of three algorithms in scenario 4

表1 显示了三种自适应算法在四种场景中的平均码率与码率切换的次数。从表1 可以看出,BASBC 算法在4 种场景下的视频平均码率高于DASBS 算法,在场景1 和场景3中,BASBC 算法的码率切换次数要多于DASBS 算法,是因为消耗冗余的缓存时长来提高视频播放的平均码率;在场景2和场景4 中,BASBC 算法与DASBS 算法都采用消耗冗余缓存时长以提高视频播放的平均码率的策略,但BASBC 算法的切换次数更少,视频播放稳定性较好。在场景2 和场景4 中,RSS 算法的平均码率要高于BASBC 算法,但码率切换的次数更多,切换的幅度更大,视频播放的平滑性较差。

表1 不同带宽情况下的仿真结果统计Tab.1 Statistics of simulation results under different bandwidths

3 结语

本文算法设计了一种利用缓存补偿码率的算法,在保障视频播放不发生中断的前提下,充分利用缓存资源。通过消耗客户端请求低码率分片时所累积的缓存资源来延长视频分片的下载时间,使客户端周期性地在一段时间内播放高于当前带宽值的码率分片;同时以缓存阈值作为码率切换的条件,在一定程度上避免了因短暂网络波动而造成码率频繁切换,提高了视频播放的稳定性。实验结果表明,本文算法可有效提高视频播放的平均码率,充分利用缓存,提高带宽利用率,在带宽突然下降时,也能够逐级切换码率等级,提升码率切换的平滑性和稳定性,更好地满足用户的QoE。然而本文算法假设所有视频分片内容对于用户都有相同的观看体验,但实际上一个视频中有部分视频分片的内容更丰富,提高这些视频分片的码率会有更好地用户体验质量,未来在设计码率自适应切换算法时需要将此因素考虑在内,从而进一步提高用户QoE。

猜你喜欢
阈值客户端预估
“人民网+客户端”推出数据新闻
——稳就业、惠民生,“数”读十年成绩单
非平稳声信号下的小波变换去噪方法研究
土石坝坝体失稳破坏降水阈值的确定方法
非均匀光照下文本图像分割算法研究
利用迭代软阈值方法抑制恒时演化类核磁共振实验中的采样截断伪峰
虚拟专用网络访问保护机制研究
新华社推出新版客户端 打造移动互联新闻旗舰
浅析IEEE 802.1x及其客户端软件