发明名称 基于DASH的多客户端码率自适应及震荡补偿方法
摘要 本发明提供一种基于DASH的多客户端码率自适应及震荡补偿方法,基于缓存的码率自适应算法,利用对数模型估算码率,加入动态变化的平滑函数调整码率估算稳定性。同时,针对多客户端竞争带宽问题加入震荡补偿机制,通过检测客户端码率震荡情况,做出补偿策略以进一步稳定多客户竞争带宽引起的码率波动。本技术方案共分三个步骤:第一步,基于缓存的码率估算,即利用对数模型根据缓存区内容量估算码率;第二步,基于逻辑斯谛方程模型的平滑因子模型,即根据缓存区状态动态的调整平滑因子使平滑函数的作用更加准确稳定;第三步,实时检测码率震荡情况,采取补偿机制抚平震荡,针对多种不同的缓存状态将补偿方式分高、中、低三种,使补偿时期的码率更加合理。
申请公布号 CN106028085A 申请公布日期 2016.10.12
申请号 CN201610427101.6 申请日期 2016.06.14
申请人 浙江工业大学 发明人 熊丽荣;金鑫
分类号 H04N21/2662(2011.01)I;H04N21/24(2011.01)I;H04N21/238(2011.01)I 主分类号 H04N21/2662(2011.01)I
代理机构 杭州天正专利事务所有限公司 33201 代理人 王兵;黄美娟
主权项 基于DASH的多客户端码率自适应及震荡补偿方法,具体步骤如下:步骤1.基于缓存的码率估算;基于缓存模型的自适应算法使用缓存区内的数据量百分比来估算视频码率,从而避开了网络带宽的直接影响,有利于提高视频码率的稳定性。考虑到对数函数模型变化趋势相对比较平缓,能够实现码率估算的平稳增长和减少。因此本发明采用基于缓存的对数模型自适应算法,将缓存分区和对数模型结合,根据缓存区容量的百分比计算所要切换的视频码率;同时将缓存分为三个区间,分别为缓存上溢区间、缓存均衡区间、缓存下溢区间。该对数模型为:ξ<sub>k</sub>=a×log<sub>b</sub>(δ<sub>k</sub>×c)    (1)式(1)ξ<sub>k</sub>中为第k段所要切换的码率,δ<sub>k</sub>为第k段时刻缓存区内数据量填充的百分比,a为该MPD文件中最大码率的值,c为缓存下溢阀值,b为缓存上溢阀值;设定为c=5,b=4则缓存下溢区间为0‑20%、缓存均衡区间为20%‑80%、缓存上溢区间为80%‑100%;步骤2.基于逻辑斯谛方程模型的平滑处理;网络的不稳定性,会导致缓存区内的数据量出现一定程度的波动,从而使式(1)计算出来的码率可能出现震荡现象。针对该问题,在平滑处理基础上,设计基于逻辑斯谛(Logistic)方程的平滑因子模型,随缓存状态变化动态调整平滑因子;该公式为:BR<sub>k</sub>=(1‑P)×ξ<sub>k</sub>+P×ξ<sub>k‑1</sub>    (2)式(2)中,BR<sub>k</sub>为平滑后的第k段码率,P为平滑因子;平滑因子计算公式为:<maths num="0001"><math><![CDATA[<mrow><mi>P</mi><mo>=</mo><mfrac><mn>1</mn><mrow><mn>1</mn><mo>+</mo><msup><mi>e</mi><mrow><mo>-</mo><mi>m</mi><mrow><mo>(</mo><msub><mi>&delta;</mi><mi>k</mi></msub><mo>-</mo><msub><mi>&beta;</mi><mn>0</mn></msub><mo>)</mo></mrow></mrow></msup></mrow></mfrac><mrow><mo>(</mo><mn>1</mn><mo>-</mo><msub><mi>&beta;</mi><mn>0</mn></msub><mo>&CenterDot;</mo><msub><mi>&delta;</mi><mi>k</mi></msub><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>3</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001018212530000011.GIF" wi="1075" he="126" /></maths>式(3)中:m为逻辑斯谛方程的陡峭参数(设定m=12),β<sub>0</sub>为逻辑斯谛方程的中心值(设定β<sub>0</sub>=0.3);平滑因子P曲线分三个阶段:(1)当缓存区内数据量低的时候,P的权重低,更加依赖于实际估算的码率,有利于缓存的上升,脱离视频播放停顿问题。(2)当缓存区开始逐步上升之后,P的权重迅速增长;因为有了一定量的缓存储备,平滑函数可以更好地处理码率估算波动问题,实现码率切换的稳定;(3)我们对逻辑斯谛方程后面添加一个限制参数的优化,主要体现在第三阶段。基于下面两个方面考虑:当网络带宽突变上升时,会导致缓存区内的数据量加速上升,此时δ<sub>k</sub>变大,如果仅仅依靠逻辑斯谛方程来估算P,则P会大幅度增大,平滑步骤中对历史片段的权重增大。这就会导致平滑过度,使缓存区内的容量急剧上升;另一方面当网络带宽突变下降,情况就会以上面提到的相反,平滑过渡使缓存区内容量急剧下降;而缓存区内数据量的波动会直接影响步骤1的码率估算;因此,在逻辑斯谛方程后面加入了一个限制参数,可以根据δ<sub>k</sub>的变化而动态的改变限制程度,从而避免了上述平滑过渡的情形;步骤3.震荡检测及补偿;针对多客户端竞争带宽问题,采用震荡因子,实时检测视频播放过程中出现的震荡情况。在监测到码率剧烈震荡后,码率决策进入补偿状态以避免码率震荡的持续;在补偿机制上,提出根据不同的缓存区状态采用高、中、低三种码率去平滑该时刻码率的震荡问题。同时优化了进入补偿的条件,针对不同的缓存状态下的震荡情况直接选择相应的补偿策略;3.1震荡检测相关参数及震荡因子计算;在实施震荡补偿之前,需要对视频播放的过程进行震荡检测。设定了一个滑动窗口机制(窗口大小设定为10s),在视频片段的切换过程中滑动窗口随之一起移动;当码率发生切换则计一次数,再对码率上切计正数下切计负数,然后在滑动窗口中统计这两种计数;通过这两个不同的计数方式结合平均码率计算方差。当码率稳定正常切换时两个方差的值是相同的,如果出现码率震荡,则这两个值就会出现差异,由此就可以计算出震荡因子。码率切换次数Γ<sub>k</sub>,码率上下切次数φ<sub>k</sub>,质量转换方差σ<sub>i,j</sub>,震荡方差ω<sub>i,j</sub>,震荡因子ρ<sub>i,j</sub>公式如下。<maths num="0002"><math><![CDATA[<mrow><msub><mi>&Gamma;</mi><mi>k</mi></msub><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mrow><msub><mi>if&xi;</mi><mi>k</mi></msub><mo>&NotEqual;</mo><msub><mi>&xi;</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub></mrow></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001018212530000021.GIF" wi="1030" he="126" /></maths><maths num="0003"><math><![CDATA[<mrow><msub><mi>&phi;</mi><mi>k</mi></msub><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mn>1</mn></mtd><mtd><mrow><msub><mi>if&xi;</mi><mi>k</mi></msub><mo>&gt;</mo><msub><mi>&xi;</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub></mrow></mtd></mtr><mtr><mtd><mrow><mo>-</mo><mn>1</mn></mrow></mtd><mtd><mrow><msub><mi>if&xi;</mi><mi>k</mi></msub><mo>&lt;</mo><msub><mi>&xi;</mi><mrow><mi>k</mi><mo>-</mo><mn>1</mn></mrow></msub></mrow></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001018212530000022.GIF" wi="1046" he="197" /></maths><maths num="0004"><math><![CDATA[<mrow><msubsup><mi>&sigma;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mn>2</mn></msubsup><mo>=</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>j</mi></msubsup><msub><mi>&Gamma;</mi><mi>k</mi></msub><mo>&times;</mo><msup><mrow><mo>(</mo><msub><mi>&xi;</mi><mi>k</mi></msub><mo>&times;</mo><msub><mi>t</mi><mi>k</mi></msub><mo>-</mo><msub><mi>&mu;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&times;</mo><msub><mi>t</mi><mi>k</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></mrow><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mi>i</mi></mrow><mi>j</mi></msubsup><msub><mi>t</mi><mi>k</mi></msub></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>6</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001018212530000023.GIF" wi="1230" he="167" /></maths><maths num="0005"><math><![CDATA[<mrow><msubsup><mi>&omega;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow><mn>2</mn></msubsup><mo>=</mo><mfrac><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mi>i</mi><mo>+</mo><mn>1</mn></mrow><mi>j</mi></msubsup><msub><mi>&phi;</mi><mi>k</mi></msub><mo>&times;</mo><msup><mrow><mo>(</mo><msub><mi>&xi;</mi><mi>k</mi></msub><mo>&times;</mo><msub><mi>t</mi><mi>k</mi></msub><mo>-</mo><msub><mi>&mu;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&times;</mo><msub><mi>t</mi><mi>k</mi></msub><mo>)</mo></mrow><mn>2</mn></msup></mrow><mrow><msubsup><mi>&Sigma;</mi><mrow><mi>k</mi><mo>=</mo><mi>i</mi></mrow><mi>j</mi></msubsup><msub><mi>t</mi><mi>k</mi></msub></mrow></mfrac><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>7</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001018212530000024.GIF" wi="1246" he="167" /></maths><maths num="0006"><math><![CDATA[<mrow><msub><mi>&rho;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>=</mo><mfenced open = "{" close = ""><mtable><mtr><mtd><mrow><mn>1</mn><mo>-</mo><mfrac><msub><mi>&omega;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><msub><mi>&sigma;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub></mfrac></mrow></mtd><mtd><mrow><msub><mi>if&sigma;</mi><mrow><mi>i</mi><mo>,</mo><mi>j</mi></mrow></msub><mo>&gt;</mo><mn>0</mn></mrow></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mrow><mi>o</mi><mi>t</mi><mi>h</mi><mi>e</mi><mi>r</mi><mi>w</mi><mi>i</mi><mi>s</mi><mi>e</mi></mrow></mtd></mtr></mtable></mfenced><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>8</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0001018212530000025.GIF" wi="1118" he="239" /></maths>其中ξ<sub>k</sub>表示第k段的码率,t<sub>k</sub>表示第k段的段持续时间,μ<sub>i,j</sub>表示第i段到第j段的平均码率,Γ<sub>k</sub>表示码率切换次数统计,φ<sub>k</sub>表示上下切次数统计;3.2震荡检测与补偿过程;根据震荡因子ρ<sub>i,j</sub>来判断是否进入补偿状态,一旦ρ<sub>i,j</sub>超过预先设置的阀值(设定阈值为0.7)码率决策就会进入补偿状态。考虑缓存区状态对码率决策影响的重要性及视频播放过程中缓存区状态的多样性,提出震荡补偿算法,它能够根据不同的缓存区情况进行三种不同级别的补偿,确保在补偿操作后缓存区仍然处于一个较为均衡的状态;(S1)是否进入补偿状态的判断。当震荡因子ρ<sub>i,j</sub>超过阈值并且当前不是补偿状态,则开始进入补偿状态。初始化相关参数:滑动窗口内历史数据中的最大缓存百分比maxbuffer,最小缓存百分比minbuffer,其中的最大码率high_quality,最小码率low_quality,以及折中的平均码率mid_quality,初始化补偿次数backoff,例如初始化backoff=3;(S2)低补偿状态。进入补偿状态后先判断是否需要进入低补偿状态,如果当前的缓存区容量小于minbuffer则进入低补偿状态,选择最小码率low_quality进行补偿,直到补偿次数backoff减少为0。如果期间缓存区容量大于minbuffer则终止低码率补偿;(S3)高补偿状态。如果没有进入低补偿状态,则判断是否需要进入高补偿状态,如果当前的缓存区容量大于maxbuffer则进入高补偿状态,选择最大码率high_quality进行补偿,直到补偿次数backoff减少为0。如果期间缓存区容量小于maxbuffer则终止补偿;(S4)折中补偿状态。如果没有进入以上两种补偿状态,则表示当前缓存区状态比较健康选择折中补偿状态,选择平均码率mid_quality进行补偿,直到补偿次数backoff减少为0。
地址 310014 浙江省杭州市潮王路18号浙江工业大学