洪煌輝,袁清珂
(廣東工業(yè)大學 機電工程學院,廣東 廣州 510006)
隨著流媒體技術的飛速發(fā)展,流媒體數據量的不斷增大使得傳統(tǒng)的基于RTP/RTSP的流媒體技術不能滿足高質量的流媒體需求[1],導致影響用戶觀看體驗,并制約多媒體技術進一步的發(fā)展[2]。許多文獻提出數據傳輸應具有動態(tài)網絡的自適應性。其中包括根據當前的網絡情況(例如可用帶寬)動態(tài)地調整視頻碼率,從而生成合適于當前網絡的視頻流[3,4]。采用探測的方式,判斷吞吐量或網絡帶寬等情況來調整碼率,以生成合適的視頻流[5-7]。文獻[8]通過計算當前吞吐量,從而決策是否調節(jié)視頻碼率。文獻[9]介紹了一種采用“探測”的方法估算實時帶寬,但該算法需要發(fā)送大量的探測數據包,在網絡擁塞時會進一步加重網絡的負載。因此,以上方法仍然存在一定程度的缺陷,還不能直接應用于實際。本文將立足于已有的視頻網絡傳輸控制方法,并根據上述所提及的問題,提出一種自適應網絡帶寬的H.264碼率控制策略。建立帶寬預測模型檢測網絡情況,再評價源端的視頻傳輸質量,自適應地調整量化參數和最高碼率值。該算法可以解決傳統(tǒng)碼率控制算法的缺陷,精確檢測網絡情況,提高視頻傳輸質量,碼率控制誤差更小。
目前,帶寬測量技術根據是否發(fā)送探測包可分為被動測量技術和主動測量技術。被動測量技術通過結合軟件和硬件監(jiān)聽網絡分組流來推測網絡帶寬。因存在需要額外的專用設備、權限以及成本的限制,使其難以簡單方便地應用于實際。主動測量則是通過發(fā)送網絡探測包并根據包中所攜帶的信息來計算網絡帶寬。較為成熟的測量機制分為基于速率模型和基于報文間隔模型。
上述的測量機制都可以得到網絡中的可用帶寬,但它們都是通過在網絡中不斷地發(fā)送測量數據包,這無疑是增加了網絡的負載,特別是在網絡擁塞的情況下使得擁塞更加嚴重。而且測量過程需要一定的時間作為代價,故不適合實時性要求較高的場合。針對上述的缺點,參考文獻[10]中提到的帶寬預測算法,此算法在網絡擁塞的時候仍存在不足,在計算上一個時刻的可用帶寬時存在滯后性,所以會導致下一個時刻的預測帶寬范圍也有一定程度的延時,故不能直接應用于實際。本文將在此算法的基礎上做進一步的優(yōu)化,使其適用于H.264編碼技術且有效地應用于實際。即在不影響數據傳輸的情況下測量上一個時刻的網絡可用帶寬,并且構建基于高斯分布的預測算法,預測下一個時刻的網絡可用帶寬。
1.1.1 前一刻可用帶寬
發(fā)送端對視頻幀進行數據封裝后作為計算可用帶寬的“標記幀”,并設置超時計時器。在不影響網絡負載的情況下,統(tǒng)計接收端接收若干個“標記幀”所需的時間,計算出這時間段的可用帶寬,具體過程如下:
(1)初始化超時計時器。
(2)對一組視頻幀進行標記,并發(fā)送。
(3)當發(fā)送第一個“標記幀”時,啟動計時器,并繼續(xù)視頻幀的發(fā)送。
(4)在預定時間T內,若收到接收端發(fā)來的接收時間信息,則復位計時器,并在下一次發(fā)送第一個“標記幀”時啟動;若在時間T內未收到可用帶寬的回復包,則做超時計數,并復位超時計時器,返回步驟(2)。
(5)接收端接收到視頻幀后,首先對標志位進行判斷,記錄有標記的視頻幀的數據大小。
(6)若視頻幀沒有開始標志位,則無需動作,繼續(xù)執(zhí)行步驟(5);否則,若出現開始標志位,則記錄起始時間為time_start并記錄接收到當前視頻幀的數據大小size1,并繼續(xù)執(zhí)行步驟(5)。直至接收到結束標志的視頻幀時,記錄結束時間為time_stop,并記錄數據大小為sizen。計算接收這組幀的時間間隔
time_gop=time_stop-time_start
(1)
根據記錄的每個視頻幀的大小,有
size=size1+size2+…+sizei+…+sizen
(2)
根據式(1)和式(2),有
Bti=size/time_gop
(3)
式中:Bti則為可用帶寬的數值。
(7)接收端將計算出來的可用帶寬值發(fā)送至發(fā)送端。
1.1.2 預測帶寬
為了檢驗網絡的可用帶寬確實服從正態(tài)分布,本文通過利用Python語言及其相應的庫,結合反復取樣的可用帶寬值,對可用帶寬的正態(tài)性進行檢驗,得出網絡的可用帶寬近似服從一個數學期望為μ、標準方差為σ2的正態(tài)分布,記為X~N(μ,σ2)。其概率密度函數如式(4)所示
(4)
通過k次前一刻可用帶寬的計算,得到k個可用帶寬值(Bt1、Bt2、……、Btk),并利用可用帶寬具有正態(tài)分布的特性,推算出數學期望和標準方差,將其帶入式(4)中,即可得到一個關于可用帶寬的概率密度函數,并得可用帶寬的預測區(qū)間分布概率,見表1。
表1 不同區(qū)間的分布概率
首先計算前N個時段的網絡帶寬作為參考值,獲得正態(tài)分布的參數μ和σ,從而獲得帶寬的概率密度函數。然后按實際需求確定帶寬可能出現的范圍,如當帶寬區(qū)間為(μk-2.58σk,μk+2.58σk)時,其出現的概率為99%。之后每獲取一次網絡帶寬值則更新一次密度函數的μ和σ值,但考慮到網絡的突變等特性,所以需加入一些限制條件。具體過程如圖1所示。
圖1 預測可用帶寬流程
從流程圖可知,在具有N個帶寬值的前提下,計算出概率密度函數并獲得預測區(qū)間。每次計算網絡帶寬都會與前一次的預測范圍做對比。若如果連續(xù)超過D次帶寬值在預測范圍之外,則將N個參考值歸零,并重新計算N個帶寬值;否則,將用該帶寬值更新原有的參數μ和σ。
根據上述的帶寬概率密度函數,本文提出一種按需計算可用帶寬區(qū)間且加入源端實際幀率作為補償因子的幀層碼率控制算法。通過補償因子的引入,可有效地避免了碼率切換太頻繁或因臨界點的問題導致錯誤切換的問題。
TCP是一種面向連接的、可靠的、字節(jié)流的傳輸協(xié)議,許多視頻傳輸的應用傳輸協(xié)議都是基于TCP協(xié)議,如HTTP協(xié)議。在傳輸層中存在發(fā)送和接收緩沖區(qū),應用層使用套接字接口時,把數據放入傳輸層相應的緩沖區(qū)中,而如何發(fā)送和接收則取決于協(xié)議的傳輸算法。本文在源端以阻塞方式使用套接字,在網絡良好且接收端應用層處理接收緩存的速度足夠快的時候,源端基本能按照默認的幀率進行視頻流的傳輸。但在網絡擁塞時,由于發(fā)送緩沖的數據未能及時發(fā)送到接收端,緩沖區(qū)剩余的長度不足夠存放新的數據,從而導致源端阻塞等待直至緩沖區(qū)剩余的大小大于需要存放的數據大小。所以在網絡不良時,源端發(fā)送視頻幀的速率(文后或稱其為實際幀率)會減小。通過計算默認幀率與實際幀率的差值,可以反映出當前網絡環(huán)境的狀態(tài)。
設在某段時間S秒內,源端發(fā)送了X幀的視頻數據,則在S秒內的平均發(fā)送視頻幀的速率Y為
Y=X/S
(5)
設默認幀率為Z,則默認幀率和實際幀率的差值為
DIF=Z-Y
(6)
本文提出的碼率控制策略引入了默認幀率和實際幀率之間的差值與預測的可用帶寬區(qū)間這兩個因子,通過對這兩個因子的限制,對幀層獲得的QP值與最高碼率值進行再次調整,達到控制碼率的作用,以獲得適合當前網絡環(huán)境的碼率。
具體的控制策略闡述如下:若連續(xù)出現P次默認幀率和實際幀率之間的差值大于M值(M值為判斷視頻流暢度的一個閾值)與當前實際碼率大于預測區(qū)間的中間值band_mid,則表明每秒發(fā)送的幀數過少且網絡帶寬不足,接收端未能取到足夠的視頻幀進行播放。此時上調當前幀的QP值和限制最高碼率值以減少輸出碼率的大小。當默認幀率與實際幀率的差值不大于M值,此時進入區(qū)間判斷的過程。若當前碼率處于預測區(qū)間范圍內時,表明當前碼率可以適用于當前可用帶寬且實際幀率足以讓接收端流暢播放視頻,故不進行碼率調整。若當前碼率小于預測區(qū)間的左邊界并且默認幀率與實際幀率的差值不大于M值,表明有足夠的可用帶寬,此時下調當前幀的QP值和增加最高碼率值以增加輸出碼率的大小,使得視頻播放質量更好。
碼率控制策略的實現過程如下:
(1)通過上述預測可用帶寬的算法,可獲得下一個時刻可用帶寬的預測區(qū)間[band_left,band_right]。并且根據已編碼的視頻幀,得到一個有關當前幀的輸出碼率real_bit,從而可計算當前碼率處于預測區(qū)間的位置。
(2)通過源端實際幀率計算方法,獲得當前實際的幀率real_FPS。再通過獲得默認的幀率def_FPS,并計算出默認幀率和當前實際幀率的差值diff_FPS。且碼率調整的具體流程如圖2所示。
測試環(huán)境的總體方案如圖3所示,圖中的網絡攝像機(IP Camera)采用的是華為海思的系統(tǒng)級芯片Hi3518V200,其集成了新一代的H.264編碼器,并且可通過有線或無線網絡進行視頻幀的傳輸。一臺PC通過4G無線路由器接入中國聯(lián)通無線網絡從而接入Internet;IPC則通過有線接入本地局域網并將其IP映射到外網,從而接入Internet,并把視頻數據傳輸到具有4G網絡的PC上進行播放。
首先IPC的VENC模塊從外存中讀取原始圖像后,運行本文所提出的碼率控制策略。根據計算的結果,使用碼率控制器對編碼參數進行調整,再經過編碼器(Encoder)進行H.264編碼處理,并把編碼后的視頻幀通過網絡傳輸到PC端。測試時,使用另一臺PC接入IPC所在的局域網,并通過掛載網絡文件系統(tǒng)(NFS)的方式獲得所需的測試數據,并將其繪制成圖表。兩臺IPC設置相同的編碼參數,如表2所示列舉了幾個重要的編碼參數。
在傳統(tǒng)的根據帶寬情況調整碼率的視頻傳輸控制策略中,大多通過探測的方式獲取當前帶寬情況,再根據探測情況來調整碼率[3]。當帶寬充足時,提高視頻碼率;當帶寬不足時,則減小視頻碼率。因有不同的方式調整視頻碼率,為了更準確地測試出二者的區(qū)別,本文統(tǒng)一采用調整QP值的方式調整碼率。同時,為了便于觀察碼率切換的情況,設置15個切換等級,每個等級對應一個QP值和對應一個最高碼率值,如初始等級為0對應的初始QP值為22以及最高碼率值為2048,等級為1對應的QP值為23和最高碼率值為1800,以此類推。
實驗時,將兩臺用做對比的IPC盡量朝向同一區(qū)域(區(qū)域內放置一個勻速擺動的搖擺器),并盡可能設置在相同的網絡環(huán)境中。同時,利用軟件對兩臺IPC實施網絡限速,使得視頻發(fā)送的帶寬發(fā)生變化。經多次重復測試的結果表明,兩臺IPC在網絡帶寬充足的情況下,沒有明顯的區(qū)別;但在網絡情況一般和較差的情況下,使用本文算法的IPC所傳輸到PC中顯示的播放畫面流暢度具有明顯的優(yōu)勢。以下通過限制網速的方式,使得碼率出現的上調、下降和不變的情況,從而獲得需要對比的數據。
3.2.1 向上切換
首先各分配相同且足夠的帶寬給兩臺IPC,使其可以平穩(wěn)地進行數據傳輸。然后降低相同大小的網絡帶寬,使其不能滿足當前的視頻碼率,從而發(fā)生碼率下降。如圖4所示為兩種方法對帶寬減少的處理過程,在t1時刻降低網絡帶寬時,本文方法判斷默認幀率與當前幀率之差大于M,并且碼率值大于預測區(qū)間的中間值,所以下降一級碼率。在下降后又經判斷,差值仍然過大且碼率值大于預測區(qū)間,故繼續(xù)下降一級碼率,在t5時刻停在i2處,碼率基本滿足當前網絡帶寬情況。而在采用傳統(tǒng)方法時,t2時刻檢測到當前的帶寬下降后,進行碼率的下降。但在t3時刻時,出現切換等級下降然后在t4時刻又繼續(xù)上升的現象,最后在t6時刻停留在i1,并且比本文方法增加了約39.8%的切換時間,而且播放畫面有一定程度的卡頓現象。在多次測試的過程中,還會出現另一種現象:兩種方法經過碼率調整后都可以流暢播放,但此時傳統(tǒng)方法的碼率值低于本文方法的碼率值,造成帶寬的浪費。
3.2.2 向下切換
使兩臺IPC處于較低的帶寬環(huán)境并調試至其都在同一個切換等級且能穩(wěn)定傳輸時,上升相同大小的帶寬值,使得視頻傳輸可用的帶寬變大。如圖5所示,本文方法從t1時刻至t3時刻快速流暢的切換至合適當前帶寬的碼率值。而傳統(tǒng)方式的切換在t2時刻依然出現來回切換的問題,并且最后穩(wěn)定在i1上。
3.2.3 碼率變化情況及分析
圖4 向上切換的等級與幀率差值比較
圖5 向下切換的等級與幀率差值比較
在幾個不同時刻同時增加或減少兩臺IPC的網絡帶寬,觀察其碼率變化并將具體的碼率值繪制曲線圖,如圖6所示。在t1和t2時刻左右同時下降同樣數值的帶寬,并在15 s和45 s左右同時上升同樣數值的帶寬。通過觀察可得,本文方法快速流暢地下降或上升到合適當前帶寬的碼率值,帶寬利用率提高約22.7%,并且能進行流暢的數據傳輸;而傳統(tǒng)的方法則在下降和上升帶寬的時間間隔里還未完成合適的碼率切換,并且在切換中碼率出現了來回切換的現象。
通過上述測試情景的比較分析,本文方法在相似網絡環(huán)境、相同時間內,不僅能快速流暢地將碼率切換至合適當前帶寬的數值而且能充分利用當前可用帶寬,并且實際幀率變化小,視頻播放流暢。
本文提出了一種基于預測可用網絡帶寬的自適應流媒體傳輸策略,在不增加網絡負載的前提下準確地計算出下一個時刻可用帶寬的范圍,并計算默認幀率與實際幀率之間的差值來反應目前視頻幀的傳輸情況。通過這兩個因子設計出碼率調整策略,從而判斷何時需要上調或下調視頻碼率,最終實現視頻碼率隨網絡帶寬的波動而自適應地進行調整。實驗結果表明,該控制策略能充分地利用當前的網絡帶寬,在保證視頻傳輸流暢性基礎上,提供更加清晰的播放效果。