吉愛(ài)國(guó),欒云哲
(青島理工大學(xué)信息與控制工程學(xué)院,山東青島 266520)
隨著互聯(lián)網(wǎng)技術(shù)的不斷發(fā)展,以音視頻為主的多媒體內(nèi)容在網(wǎng)絡(luò)傳輸流量中占據(jù)的比重越來(lái)越大。根據(jù)第44 次中國(guó)互聯(lián)網(wǎng)統(tǒng)計(jì)報(bào)告[1]顯示,目前音視頻類的流量占互聯(lián)網(wǎng)流量的比重已達(dá)到80%,思科公司的報(bào)告[2]指出,到2021 年全世界網(wǎng)絡(luò)流量將有80%為視頻流量。
采用超文本傳輸協(xié)議(Hyper Text Transfer Protocol,HTTP)的流媒體傳輸技術(shù),基于傳輸控制協(xié)議(Transmission Control Protocol,TCP),以其高可靠性、強(qiáng)防火墻穿透能力和系統(tǒng)配置簡(jiǎn)單等特點(diǎn),成為近年來(lái)流媒體傳輸?shù)闹髁骷夹g(shù),面對(duì)用戶對(duì)高體驗(yàn)質(zhì)量(Quality of Experience,QoE)的需求[3],基于HTTP 的動(dòng)態(tài)自適應(yīng)流(Dynamic Adaptive Streaming over HTTP,DASH)媒體技術(shù)作為一種有前途的解決方案,已經(jīng)受到視頻服務(wù)提供商和學(xué)術(shù)研究的重視[4]。
DASH 技術(shù)的核心在于部署在視頻客戶端的碼率自適應(yīng)(Adaptive Bit-Rate)切換算法,通過(guò)定義良好的碼率自適應(yīng)邏輯來(lái)提高視頻播放質(zhì)量,進(jìn)而提高用戶QoE,因此,如何設(shè)計(jì)高效的碼率自適應(yīng)算法成為DASH 技術(shù)的研究熱點(diǎn)。
目前碼率自適應(yīng)算法的研究方向主要分為三大類:基于帶寬的碼率自適應(yīng)算法、基于緩存的碼率自適應(yīng)算法和基于帶寬和緩存混合控制的碼率自適應(yīng)算法。
1)基于帶寬的碼率自適應(yīng)算法[5-6]。如:文獻(xiàn)[5]中利用股市預(yù)測(cè)中的常用指標(biāo),異同移動(dòng)平均(Moving Average Convergence and Divergence,MACD)線來(lái)預(yù)估下一時(shí)刻的可用帶寬并適配碼率;文獻(xiàn)[6]中通過(guò)“探測(cè)和適應(yīng)”的機(jī)制預(yù)測(cè)客戶端TCP 吞吐量,根據(jù)預(yù)測(cè)結(jié)果選擇合適的碼率分片。
2)基于緩存的碼率自適應(yīng)算法[7-8]。如:文獻(xiàn)[7]中通過(guò)對(duì)緩存區(qū)分級(jí)設(shè)置不同的倍增系數(shù),根據(jù)緩存占用率與歷史分片下載速率共同決定下一分片的下載碼率;文獻(xiàn)[8]中提出了一種基于模糊邏輯的碼率自適應(yīng)算法,該算法將當(dāng)前緩存時(shí)長(zhǎng)與緩存變化差值進(jìn)行模糊化處理后,利用模糊判決規(guī)則對(duì)處理后的數(shù)據(jù)進(jìn)行分析,最后去模糊化決策出下一分片的碼率。以上兩類算法在進(jìn)行碼率決策時(shí)考慮單一因素具有高效表現(xiàn),在網(wǎng)絡(luò)劇烈波動(dòng)時(shí),基于帶寬的碼率自適應(yīng)算法對(duì)帶寬預(yù)估的準(zhǔn)確度會(huì)下降,碼率可能會(huì)頻繁切換,影響視頻播放的流暢性,基于緩存的碼率自適應(yīng)算法在網(wǎng)絡(luò)驟降時(shí)會(huì)大幅度消耗緩存資源,存在視頻播放中斷的風(fēng)險(xiǎn)。
3)基于帶寬和緩存混合控制的碼率自適應(yīng)算法[9-14],在預(yù)估可用帶寬的基礎(chǔ)上,結(jié)合當(dāng)前緩存區(qū)狀態(tài)聯(lián)合決策下一時(shí)刻的碼率等級(jí)。如:文獻(xiàn)[9]中取最近一段時(shí)間內(nèi)的分片下載速率均值和方差感知網(wǎng)絡(luò)變化,再觀察當(dāng)前緩存時(shí)長(zhǎng)決策下一分片的碼率等級(jí);文獻(xiàn)[11]中采用狀態(tài)機(jī)的設(shè)計(jì)思想,通過(guò)檢測(cè)QoE 影響因素的數(shù)值變化,充分利用影響因素與各個(gè)碼率狀態(tài)間的聯(lián)系控制碼率切換;文獻(xiàn)[12]中優(yōu)先考慮客戶端緩存狀態(tài),再根據(jù)預(yù)估帶寬決策碼率是否切換;文獻(xiàn)[13]中提出一種基于DASH 標(biāo)準(zhǔn)的碼率平滑切換(Rate Smooth Switching,RSS)算法,根據(jù)最近幾個(gè)分片的下載速率定義帶寬偏移系數(shù)感知網(wǎng)絡(luò)變化方向,結(jié)合緩存區(qū)切換閾值來(lái)判定是否切換碼率;文獻(xiàn)[14]中提出一種動(dòng)態(tài)自適應(yīng)的HTTP 流碼率漸進(jìn)切換(Dynamic Adaptive Step-wise Bitrate Switching,DASBS)算法,該算法先對(duì)最近幾個(gè)分片的下載速率采用指數(shù)加權(quán)方法預(yù)估帶寬,再依據(jù)帶寬波動(dòng)程度和緩存時(shí)長(zhǎng)對(duì)帶寬進(jìn)行矯正,最大可矯正到預(yù)估帶寬的1.5 倍,在緩存時(shí)長(zhǎng)充足的情況下可以請(qǐng)求到比當(dāng)前帶寬高的碼率等級(jí),有效提高了視頻的平均碼率。上述算法結(jié)合了帶寬和緩存聯(lián)合決策碼率切換,有效避免了視頻播放中斷現(xiàn)象,保證了視頻播放的流暢性;但碼率切換幅度較大,碼率切換平滑性較差,在部分網(wǎng)絡(luò)情況下,緩存時(shí)長(zhǎng)會(huì)持續(xù)累積至最大值迫使碼率決策模塊采取“休眠”策略,降低了視頻的平均碼率和帶寬利用率,影響用戶QoE。
針對(duì)上述問(wèn)題,本文提出了一種DASH 標(biāo)準(zhǔn)的基于緩存補(bǔ)償?shù)拇a率切換(Bitrate Adaptive Switching based on Buffer Compensation,BASBC)算法,通過(guò)在緩存區(qū)設(shè)置碼率上切閾值和碼率下切閾值,構(gòu)造緩存累積-消耗的狀態(tài)循環(huán),避免發(fā)生緩存持續(xù)累積的情況,在保證視頻播放流暢性和平滑性的基礎(chǔ)上,利用冗余緩存延長(zhǎng)視頻切片下載時(shí)間,調(diào)整碼率切換至更高等級(jí),在緩存消耗至碼率下切閾值時(shí),確保視頻能夠逐級(jí)切換至合適的碼率等級(jí),充分利用緩存,提高帶寬利用率和視頻平均碼率,有效改善用戶觀看視頻的QoE。
DASH 技術(shù)的系統(tǒng)由視頻服務(wù)器與客戶端播放器組成,視頻原文件在視頻服務(wù)器經(jīng)編碼后得到多個(gè)碼率等級(jí)的視頻壓縮文件,這些壓縮文件又被分割為多個(gè)視頻分片,每段分片包含幾秒的視頻,可以保證多種碼率的視頻分片在時(shí)間線上相互對(duì)齊,使客戶端在切換碼率時(shí)可以平穩(wěn)進(jìn)行。在視頻分片完成時(shí),服務(wù)器還會(huì)生成一個(gè)用于描述這些視頻分片信息的媒體描述文件(Media Presentation Description,MPD),這個(gè)文件包含視頻分片的播放時(shí)長(zhǎng)、碼率等級(jí)和視頻分片的統(tǒng)一資源定位符(Uniform Resource Locator,URL)等信息[15]。在客戶端接收到并解析MPD 文件后,會(huì)調(diào)用碼率自適應(yīng)算法決策出合適的碼率分片并下載到本地進(jìn)行播放,整個(gè)DASH 技術(shù)的系統(tǒng)架構(gòu)如圖1 所示。
圖1 DASH技術(shù)的系統(tǒng)架構(gòu)Fig.1 System architecture of DASH technology
碼率自適應(yīng)的目的是為了使客戶端在有限的網(wǎng)絡(luò)帶寬下、網(wǎng)絡(luò)波動(dòng)頻繁的環(huán)境中選擇最佳碼率的視頻分片,通常較高的碼率意味著視頻經(jīng)編碼壓縮后的文件所占空間較大,意味著在客戶端可以解碼更多的比特來(lái)還原視頻的諸多細(xì)節(jié)。一般情況下,相同分辨率的視頻,其碼率越高,視頻清晰度也就越高,因此碼率可作為衡量視頻質(zhì)量高低的一個(gè)標(biāo)準(zhǔn),客戶端播放的視頻分片,其碼率越高,用戶QoE 也就越好。除了視頻碼率外,還有其他一些影響用戶QoE 的因素,如視頻播放的卡頓次數(shù)和碼率切換的次數(shù)等,因此,提高視頻的播放質(zhì)量,最大化用戶QoE,可以從以下幾個(gè)方面入手:
1)盡可能提高視頻播放的平均碼率。
2)視頻播放過(guò)程中不能出現(xiàn)卡頓現(xiàn)象。
3)碼率切換次數(shù)要少,保證視頻播放的穩(wěn)定性。
4)碼率切換要實(shí)現(xiàn)逐級(jí)切換,避免出現(xiàn)碼率突然大幅下降的現(xiàn)象。
5)視頻啟動(dòng)要迅速,最小化視頻啟動(dòng)時(shí)延。
為了更好地實(shí)現(xiàn)這幾個(gè)目標(biāo),本文提出一種基于緩存補(bǔ)償碼率的自適應(yīng)算法。
首先,對(duì)DASH 技術(shù)的視頻傳輸過(guò)程進(jìn)行分析。簡(jiǎn)單來(lái)說(shuō),客戶端先向服務(wù)器請(qǐng)求MPD 文件并將之下載到本地解析和獲取服務(wù)器視頻分片的具體信息,再調(diào)用客戶端的碼率自適應(yīng)算法決策出應(yīng)請(qǐng)求的碼率等級(jí)。為保證用戶觀看視頻的流暢性,所請(qǐng)求視頻分片的碼率應(yīng)始終低于客戶端的當(dāng)前帶寬值,客戶端持續(xù)向服務(wù)器請(qǐng)求視頻分片直到緩存上溢,請(qǐng)求分片的碼率若持續(xù)低于客戶端帶寬值,緩存區(qū)將快速累積,為防止緩存上溢,部分算法采取“休眠”策略,等待緩存消耗再恢復(fù)請(qǐng)求。
視頻緩存累積是因?yàn)橐曨l分片的下載時(shí)間低于分片播放時(shí)長(zhǎng),隨著視頻播放,視頻緩存區(qū)有了足夠的緩存時(shí)長(zhǎng)保證當(dāng)前播放不會(huì)發(fā)生中斷,此時(shí)認(rèn)為可以將請(qǐng)求分片的碼率調(diào)整到高于當(dāng)前帶寬值的等級(jí),也就是使視頻分片的下載時(shí)長(zhǎng)大于視頻分片的播放時(shí)長(zhǎng),達(dá)到消耗緩存時(shí)長(zhǎng)的目的,既能避免緩存區(qū)發(fā)生上溢,又可以提高視頻播放的平均碼率。只有客戶端網(wǎng)絡(luò)狀況良好、客戶端能穩(wěn)定請(qǐng)求碼率最高級(jí)別的視頻分片,且在緩存區(qū)即將上溢時(shí),客戶端才被允許采取“休眠”策略來(lái)避免緩存區(qū)上溢。
本文算法在客戶端緩存區(qū)設(shè)置碼率上切閾值和碼率下切閾值,客戶端在初始階段采取快啟動(dòng)策略,即從低向高逐級(jí)切換至當(dāng)前帶寬值下的最高碼率等級(jí),此過(guò)程緩存處于累積狀態(tài)。隨時(shí)間推移,視頻緩存時(shí)長(zhǎng)將逐漸累積至碼率上切閾值,此時(shí)緩存進(jìn)入消耗狀態(tài),碼率決策模塊將請(qǐng)求高于當(dāng)前帶寬值的碼率等級(jí),并維持到視頻緩存時(shí)長(zhǎng)低于碼率下切閾值時(shí),再逐級(jí)切換到低于當(dāng)前帶寬值的最高碼率等級(jí),使緩存再次進(jìn)入累積狀態(tài)并向上切閾值運(yùn)動(dòng),形成一個(gè)從下切閾值向上切閾值累積,再?gòu)纳锨虚撝迪蛳虑虚撝迪牡难h(huán),客戶端可充分利用緩存資源來(lái)提高視頻的播放質(zhì)量。傳輸速率恒定為6 Mb/s 時(shí),本文算法的視頻碼率變化和客戶端緩存變化如圖2 所示。
圖2 恒定速率下的客戶端碼率緩存變化比較Fig.2 Comparison of client bitrate and cache changes at constant rate
在圖2 中,客戶端處于穩(wěn)定的網(wǎng)絡(luò)環(huán)境中:在初始階段,客戶端始終請(qǐng)求低于當(dāng)前帶寬值的碼率等級(jí);在一段時(shí)間后,視頻緩存時(shí)長(zhǎng)累積至上切閾值,碼率決策模塊請(qǐng)求高于當(dāng)前帶寬值的碼率級(jí)別;隨時(shí)間推移,緩存時(shí)長(zhǎng)消耗至下切閾值以下,碼率決策模塊逐級(jí)切換碼率等級(jí)并重新累積緩存時(shí)長(zhǎng)。
基于上述策略,進(jìn)一步劃分客戶端緩存閾值,如圖3 所示,其中:qmin是保障視頻播放流暢性的最低閾值,低于這個(gè)閾值,客戶端請(qǐng)求最低碼率的視頻分片以快速累積緩存時(shí)長(zhǎng),避免視頻發(fā)生中斷,但由于請(qǐng)求的視頻碼率是最低等級(jí),對(duì)用戶體驗(yàn)質(zhì)量影響極差,因此,在視頻播放過(guò)程中應(yīng)極力避免緩存時(shí)長(zhǎng)低于這個(gè)值;qup是動(dòng)態(tài)上切閾值,緩存時(shí)長(zhǎng)累積至這個(gè)值后,客戶端將請(qǐng)求高于當(dāng)前帶寬值的碼率等級(jí),緩存進(jìn)入消耗狀態(tài)并向動(dòng)態(tài)下切閾值qdown運(yùn)動(dòng),當(dāng)緩存時(shí)長(zhǎng)低于qdown時(shí),碼率決策模塊將逐級(jí)切換至當(dāng)前帶寬下的最高碼率,緩存再次進(jìn)入累積狀態(tài)。緩存處于消耗狀態(tài)時(shí),客戶端請(qǐng)求高碼率視頻分片的行為可看作是對(duì)前一個(gè)累積狀態(tài)時(shí)視頻碼率偏低的補(bǔ)償,能夠有效提高視頻播放的平均碼率,提高用戶QoE。
圖3 視頻緩存區(qū)閾值設(shè)置Fig.3 Video buffer threshold setting
客戶端網(wǎng)絡(luò)狀況不可能一直保持穩(wěn)定狀態(tài),在網(wǎng)絡(luò)帶寬頻繁波動(dòng)的環(huán)境下,采用這種策略可能會(huì)因帶寬的突然下降而增加分片下載時(shí)間,導(dǎo)致緩存時(shí)長(zhǎng)低于qmin,通過(guò)設(shè)計(jì)合理的碼率緩存閾值可以有效避免這種情況的發(fā)生。
本文所提出的碼率自適應(yīng)算法分為帶寬預(yù)估模塊和碼率決策模塊兩個(gè)主要模塊:帶寬預(yù)估模塊根據(jù)最近幾個(gè)已下載的視頻分片的下載速率預(yù)估下一時(shí)刻可用帶寬;碼率決策模塊依據(jù)帶寬預(yù)估值定義碼率動(dòng)態(tài)切換閾值,根據(jù)視頻緩存時(shí)長(zhǎng)和碼率動(dòng)態(tài)切換閾值來(lái)決策是否進(jìn)行碼率切換。
1)帶寬預(yù)估模塊。
在進(jìn)行帶寬預(yù)估之前,先對(duì)帶寬可能發(fā)生的變化進(jìn)行分析,在復(fù)雜網(wǎng)絡(luò)環(huán)境中,下一時(shí)刻帶寬變化不是上升就是下降,只是變化程度有高有低。
對(duì)于上升的網(wǎng)絡(luò)狀況,可以取最近M個(gè)分片的下載速率均值作為下一時(shí)刻的預(yù)估帶寬值,如式(1)所示:
其中:k為下一分片的下載序號(hào),bk-i表示最近第i個(gè)分片的下載速率。為保證用戶觀看視頻不會(huì)發(fā)生中斷現(xiàn)象,自適應(yīng)策略應(yīng)對(duì)帶寬變化呈突然下降的情況敏感,因此設(shè)置一個(gè)波動(dòng)系數(shù)θ感知帶寬衰減的程度,若衰減程度高則以當(dāng)前分片的下載速率作為下一時(shí)刻的預(yù)估帶寬值,如式(2)所示:
其中:bk-1是當(dāng)前分片的下載速率表示除去當(dāng)前切片的最近M-1 個(gè)視頻分片的下載速率均值。若當(dāng)前分片下載速率小于均值,并且當(dāng)前分片下載速率小于bdown時(shí),則說(shuō)明帶寬衰減程度較大,以當(dāng)前分片下載速率作為下一時(shí)刻的預(yù)估帶寬值;若當(dāng)前分片下載速率處于與bdown之間,表明帶寬衰減程度不高,采用指數(shù)加權(quán)平均的方式來(lái)計(jì)算帶寬預(yù)估值。
首先計(jì)算最近M個(gè)視頻分片的權(quán)值,如式(3)所示:
其中:wk-i表示第k-i個(gè)下載分片的權(quán)重值,w是權(quán)重系數(shù)。從式(3)中可以看出,i取值越小,與當(dāng)前分片序號(hào)越近的歷史分片所占權(quán)重值越大,下一時(shí)刻帶寬預(yù)估值為:
綜上所述,將下一時(shí)刻的帶寬預(yù)估值定義為:
2)碼率決策模塊。
碼率切換模塊是本文算法的設(shè)計(jì)重點(diǎn)。如1.3 節(jié)所述,本文算法嘗試在視頻播放過(guò)程中形成一種緩存狀態(tài)循環(huán),并在緩存區(qū)定義了兩個(gè)動(dòng)態(tài)閾值(碼率上切閾值和碼率下切閾值)作為碼率切換的條件。除此之外,緩存區(qū)的狀態(tài)也被分為累積狀態(tài)和消耗狀態(tài),當(dāng)緩存區(qū)處于累積狀態(tài)中,客戶端請(qǐng)求當(dāng)前帶寬下的最高碼率,在此過(guò)程中,若客戶端帶寬下降,自適應(yīng)策略不會(huì)立刻根據(jù)帶寬預(yù)估值調(diào)整碼率,而是觀察當(dāng)前緩存時(shí)長(zhǎng)是否低于下切閾值,只有當(dāng)緩存時(shí)長(zhǎng)低于下切閾值時(shí),客戶端才會(huì)逐級(jí)切換至相應(yīng)的碼率,這避免了客戶端因短暫的網(wǎng)絡(luò)波動(dòng)而頻繁切換碼率,在一定程度上保障了視頻播放的穩(wěn)定性。
在定義碼率下切閾值之前,先對(duì)其進(jìn)行分析,碼率下切閾值處在緩存區(qū)的最小閾值與上切閾值之間,其主要作用為保障客戶端可以逐級(jí)切換至帶寬預(yù)估值下的最高碼率,切換幅度可能是單級(jí)切換和多級(jí)切換,因此該值應(yīng)隨切換幅度的增大而增大,假設(shè)tar是要切換到的碼率等級(jí),cur是當(dāng)前切片的碼率等級(jí),以帶寬預(yù)估值逐級(jí)切換所用時(shí)間如式(6)所示:
在進(jìn)行碼率下切的過(guò)程中,若為多級(jí)切換,則必須考慮帶寬呈逐漸下降的情況,若在切換途中帶寬下降程度加劇,所耗費(fèi)的時(shí)間必將大于計(jì)算出的時(shí)長(zhǎng),為避免發(fā)生上述情況,定義一個(gè)參數(shù)α來(lái)動(dòng)態(tài)調(diào)整碼率下切閾值的大小,碼率切換的幅度越大,耗費(fèi)的時(shí)間越多,碼率上切閾值越高,α也就越大。α和碼率下切閾值的定義如式(7)所示:
其中:Rcur是當(dāng)前請(qǐng)求的碼率,Rmax是最高碼率。碼率上切閾值應(yīng)與當(dāng)前請(qǐng)求分片的碼率等級(jí)有關(guān):若當(dāng)前請(qǐng)求的碼率等級(jí)較低,那么緩存上切閾值不宜太高;否則緩存累積時(shí)間變長(zhǎng)。視頻請(qǐng)求至最后一個(gè)切片時(shí),緩存區(qū)處于累積狀態(tài),緩存的視頻分片的碼率較低,降低視頻播放質(zhì)量,影響用戶QoE。碼率上切閾值的定義如式(8)所示:
其中:Bmax是緩存最大值,cur是當(dāng)前請(qǐng)求的碼率等級(jí),L是最高的碼率等級(jí),β是用于調(diào)整上切閾值的參數(shù)。如此設(shè)計(jì)的碼率上切閾值可有效避免在視頻請(qǐng)求完成后,緩存區(qū)累積大量低碼率視頻的情況,可有效提高帶寬利用率,改善用戶體驗(yàn)質(zhì)量,經(jīng)實(shí)驗(yàn)發(fā)現(xiàn),β取0.85 時(shí)效果最好。
使用Bcurrent表示當(dāng)前時(shí)刻客戶端的緩存時(shí)長(zhǎng),Rmin表示最低碼率,整個(gè)碼率自適應(yīng)過(guò)程的算法描述如下:
本文基于Windows Server 2008 R2 Enterprise 搭建了一個(gè)IIS(Internet Information Services)服務(wù)器作為視頻服務(wù)器,使用python 語(yǔ)言編寫(xiě)不同的碼率自適應(yīng)算法并模擬客戶端請(qǐng)求視頻分片以及視頻播放的過(guò)程,分別對(duì)本文算法、RSS 算法[13]和DASBS 算法[14]進(jìn)行比較。
實(shí)驗(yàn)使用Big Buck Bunny(https://peach.blender.org/)作為視頻數(shù)據(jù)集,視頻時(shí)長(zhǎng)共634 s,共159 個(gè)視頻分片,每個(gè)視頻分片時(shí)長(zhǎng)為4 s,共有10 個(gè)碼率等級(jí),分別為{200,400,600,800,1 000,1 500,2 500,4 000,8 000,12 000}(單位為kb/s),其中4 000、8 000、12 000 的等級(jí)分別對(duì)應(yīng)為720P、1080P 和2160P,通過(guò)對(duì)國(guó)內(nèi)外視頻網(wǎng)站的觀察,發(fā)現(xiàn)它們的視頻碼率等級(jí)前后相差較大,主要原因在于分辨率的大小影響像素的數(shù)量,導(dǎo)致壓縮后的視頻文件大小相差也較大,因此基于這種特征來(lái)設(shè)置碼率集合??蛻舳司彺鏁r(shí)長(zhǎng)設(shè)置為60 s,緩存區(qū)最小值qmin設(shè)置為8 s,波動(dòng)系數(shù)θ設(shè)置為0.9,切片個(gè)數(shù)M設(shè)置為5,權(quán)重系數(shù)w設(shè)置為0.5,上切閾值調(diào)整系數(shù)β設(shè)置為0.85。
為測(cè)試本文算法、RSS 算法和DBSAS 算法的性能,本文設(shè)置了3 種網(wǎng)絡(luò)狀況:場(chǎng)景1 和場(chǎng)景2 分別設(shè)置帶寬為恒定的5 Mb/s 和7 Mb/s;場(chǎng)景3 設(shè)置帶寬呈階梯上升或下降的變化規(guī)律,帶寬變化從3 Mb/s 每隔100 s 增加2 Mb/s,帶寬變化至9 Mb/s 后,每隔100 s 下降2 Mb/s 直至5 Mb/s;場(chǎng)景4 設(shè)置帶寬被設(shè)定為從6 Mb/s 驟降至2 Mb/s,維持30 s 后再變化至6 Mb/s。
當(dāng)模擬帶寬處于場(chǎng)景1 時(shí),三種算法的運(yùn)行情況如圖4所示,圖4(a)為選擇的分片碼率隨時(shí)間變化的曲線,圖4(b)為緩存時(shí)長(zhǎng)隨時(shí)間變化的曲線。
圖4 場(chǎng)景1下三種算法的比較Fig.4 Comparison of three algorithms in scenario 1
如圖4(a)碼率變化曲線所示,在帶寬恒定為5 Mb/s 的情況下,本文BASBC 算法能夠間歇性地請(qǐng)求高于當(dāng)前帶寬值的碼率等級(jí),結(jié)合圖4(b)緩存時(shí)長(zhǎng)變化曲線來(lái)看,當(dāng)緩存時(shí)長(zhǎng)累積至碼率上切閾值后,BASBC 算法調(diào)高要請(qǐng)求的碼率等級(jí),消耗冗余的緩存時(shí)長(zhǎng),當(dāng)緩存時(shí)長(zhǎng)消耗至碼率下切閾值后,逐級(jí)降低碼率等級(jí)至當(dāng)前帶寬值下的最高碼率,充分利用緩存資源,提高視頻平均碼率和帶寬利用率;RSS 算法和DASBS 算法在進(jìn)行碼率決策時(shí)受到預(yù)估帶寬值的限制,在這種情況下無(wú)法請(qǐng)求更高一級(jí)碼率,緩存時(shí)長(zhǎng)一直保持在最大值,未能充分利用緩存資源,具有較低的帶寬利用率。
當(dāng)模擬帶寬處于場(chǎng)景2 時(shí),三種算法的運(yùn)行情況如圖5所示,在此場(chǎng)景中,帶寬被設(shè)定為7 Mb/s。如圖5(a)碼率變化曲線所示,三種算法都能夠請(qǐng)求比當(dāng)前帶寬值高的碼率等級(jí),RSS 算法雖然在切換次數(shù)上要優(yōu)于DASBS 算法,但會(huì)出現(xiàn)分片碼率大幅度下降至最低碼率的情況。結(jié)合圖5(b)緩存變化曲線來(lái)看,RSS 算法在初始階段逐步升高碼率,進(jìn)入穩(wěn)定狀態(tài)后,緩存時(shí)長(zhǎng)一直在被消耗,當(dāng)消耗至緩存區(qū)最小閾值時(shí),碼率等級(jí)驟降至最低碼率,再次逐步升高碼率并請(qǐng)求比當(dāng)前帶寬值高的碼率等級(jí),一段時(shí)間后再次驟降,周而復(fù)始;DASBS 算法依據(jù)當(dāng)前帶寬預(yù)估值和緩存百分比設(shè)置動(dòng)態(tài)上切閾值和動(dòng)態(tài)下切閾值,但兩個(gè)閾值相差較小,碼率切換次數(shù)較多;BASBC 算法利用當(dāng)前碼率等級(jí)設(shè)置碼率上切閾值,結(jié)合預(yù)估帶寬計(jì)算逐級(jí)切換至當(dāng)前帶寬下最佳碼率所需的時(shí)間來(lái)設(shè)置碼率下切閾值,兩個(gè)閾值間相差較大,在提高帶寬利用率的同時(shí)減少碼率切換的次數(shù),提高視頻播放的穩(wěn)定性。
圖5 場(chǎng)景2下三種算法的比較Fig.5 Comparison of three algorithms in scenario 2
當(dāng)模擬帶寬處于場(chǎng)景3 時(shí),帶寬呈階梯上升或下降,3 種算法的運(yùn)行情況如圖6 所示。碼率變化曲線如圖6(a)所示,BASBC 算法可以較快請(qǐng)求到高于當(dāng)前帶寬值的碼率等級(jí),但碼率切換次數(shù)多于DASBS 算法和RSS 算法;RSS 算法請(qǐng)求高于當(dāng)前帶寬值的碼率等級(jí)的時(shí)刻最晚,但碼率切換次數(shù)最少,視頻播放穩(wěn)定性最好。結(jié)合圖6(b)緩存時(shí)長(zhǎng)變化曲線來(lái)看,BASBC 算法的緩存時(shí)長(zhǎng)始終在碼率上切閾值和碼率下切閾值之間循環(huán),而DASBS 算法和RSS 算法都有一段時(shí)間緩存達(dá)到上界,緩存利用得不夠充分,在這種情況下,BASBC算法的帶寬利用率以及平均碼率要高于DASBS 算法和RSS算法。
圖6 場(chǎng)景3下三種算法的比較Fig.6 Comparison of three algorithms in scenario 3
當(dāng)帶寬處于場(chǎng)景4 時(shí),如圖7 所示,客戶端在第150 s 和第360 s 時(shí)帶寬由6 Mb/s 驟降至2 Mb/s,此時(shí),碼率自適應(yīng)算法首先應(yīng)保證視頻播放的連續(xù)性,即不應(yīng)發(fā)生視頻中斷現(xiàn)象。其次,客戶端應(yīng)能夠根據(jù)變化后的帶寬平滑地切換至最佳碼率,如圖7(a)和圖7(b)所示,BASBC 算法和DASBS 算法在進(jìn)行碼率決策時(shí)都留有足夠的緩存時(shí)長(zhǎng)來(lái)保證視頻播放的連續(xù)性,在此基礎(chǔ)上兩種算法都能實(shí)現(xiàn)逐級(jí)切換,且BASBC 算法請(qǐng)求低碼率分片的個(gè)數(shù)要少于DASBS 算法。如圖7(c)所示,RSS 算法在碼率驟降時(shí)碼率切換的跨度比較大,不能實(shí)現(xiàn)逐級(jí)切換,碼率切換的平滑性較差。
圖7 場(chǎng)景4下三種算法的比較Fig.7 Comparison of three algorithms in scenario 4
表1 顯示了三種自適應(yīng)算法在四種場(chǎng)景中的平均碼率與碼率切換的次數(shù)。從表1 可以看出,BASBC 算法在4 種場(chǎng)景下的視頻平均碼率高于DASBS 算法,在場(chǎng)景1 和場(chǎng)景3中,BASBC 算法的碼率切換次數(shù)要多于DASBS 算法,是因?yàn)橄娜哂嗟木彺鏁r(shí)長(zhǎng)來(lái)提高視頻播放的平均碼率;在場(chǎng)景2和場(chǎng)景4 中,BASBC 算法與DASBS 算法都采用消耗冗余緩存時(shí)長(zhǎng)以提高視頻播放的平均碼率的策略,但BASBC 算法的切換次數(shù)更少,視頻播放穩(wěn)定性較好。在場(chǎng)景2 和場(chǎng)景4 中,RSS 算法的平均碼率要高于BASBC 算法,但碼率切換的次數(shù)更多,切換的幅度更大,視頻播放的平滑性較差。
表1 不同帶寬情況下的仿真結(jié)果統(tǒng)計(jì)Tab.1 Statistics of simulation results under different bandwidths
本文算法設(shè)計(jì)了一種利用緩存補(bǔ)償碼率的算法,在保障視頻播放不發(fā)生中斷的前提下,充分利用緩存資源。通過(guò)消耗客戶端請(qǐng)求低碼率分片時(shí)所累積的緩存資源來(lái)延長(zhǎng)視頻分片的下載時(shí)間,使客戶端周期性地在一段時(shí)間內(nèi)播放高于當(dāng)前帶寬值的碼率分片;同時(shí)以緩存閾值作為碼率切換的條件,在一定程度上避免了因短暫網(wǎng)絡(luò)波動(dòng)而造成碼率頻繁切換,提高了視頻播放的穩(wěn)定性。實(shí)驗(yàn)結(jié)果表明,本文算法可有效提高視頻播放的平均碼率,充分利用緩存,提高帶寬利用率,在帶寬突然下降時(shí),也能夠逐級(jí)切換碼率等級(jí),提升碼率切換的平滑性和穩(wěn)定性,更好地滿足用戶的QoE。然而本文算法假設(shè)所有視頻分片內(nèi)容對(duì)于用戶都有相同的觀看體驗(yàn),但實(shí)際上一個(gè)視頻中有部分視頻分片的內(nèi)容更豐富,提高這些視頻分片的碼率會(huì)有更好地用戶體驗(yàn)質(zhì)量,未來(lái)在設(shè)計(jì)碼率自適應(yīng)切換算法時(shí)需要將此因素考慮在內(nèi),從而進(jìn)一步提高用戶QoE。