劉國柱,王洪林
(青島科技大學 信息科學與技術(shù)學院,山東 青島 266061)
數(shù)字圖像壓縮技術(shù)就是通過一定的壓縮算法,將模擬信號轉(zhuǎn)換為數(shù)字信號,這樣能夠非常有效地降低圖像所占用的存儲空間[1]。目前,一些組織機構(gòu)已推出了不少的數(shù)字圖像壓縮標準,如 H.261、H.263、H.263+、MPEG-1、MPEG-2、MPEG-4 等[2]。 其中,MPEG-4 標準于1999年初正式成為國際標準,該標準注重多媒體系統(tǒng)的交互性和靈活性,是第一個使用戶可在接收端對畫面進行操作和交互訪問的編碼標準[3],被廣泛地應用于視頻監(jiān)控、視頻會議等領(lǐng)域中。在這些使用實時視頻編碼與傳輸?shù)念I(lǐng)域中,不僅涉及到了編碼標準,更重要的是涉及到了碼率控制。碼率控制就是在圖像壓縮編碼過程中,編碼器可以實時地根據(jù)網(wǎng)絡傳輸信道的情況來調(diào)整編碼參數(shù),以生成適合當前網(wǎng)絡傳輸?shù)囊曨l流[4]。這樣可以使視頻在通道內(nèi)傳輸時充分利用帶寬,也就是在帶寬已有條件下傳輸信號時,既不阻塞也不浪費帶寬。目前,基于MPEG-4標準的碼率控制算法有很多,其中比較經(jīng)典的碼率控制算法為VM8算法[5]。基于編碼器緩沖區(qū)水位從某些程度上表征了網(wǎng)絡傳輸信道的情況這一事實,該算法以編碼器緩沖區(qū)水位狀況來自適應調(diào)整編碼參數(shù)。圖1是典型的基于MPEG-4編碼標準和VM8算法的實時視頻編碼和傳輸架構(gòu)。
在實時視頻的傳輸過程中,由于涉及到了流媒體的發(fā)送和接收,所以必須采用流媒體傳輸協(xié)議對傳輸進行控制。RTP協(xié)議是流媒體傳輸常用的協(xié)議,但是由于RTP協(xié)議是建立在不進行任何擁塞控制的UDP協(xié)議基礎(chǔ)上[6],因此需要在應用層上加入擁塞控制算法。
圖1 MPEG-4和VM8算法的實時視頻編碼和傳輸架構(gòu)
RTP控制協(xié)議RTCP會向RTP會話中的成員周期性地發(fā)送丟包率等信息[7],這些反饋信息就是被用作擁塞控制的。近幾年來,越來越多的擁塞控制算法相繼被提出,其中行之有效的一些算法是:基于丟包率和雙丟包率閾值門限的[8-10]。其大體思想是:設定丟包率下閾值和上閾值,當丟包率沒有超過丟包率下閾值時,增加發(fā)送速率;當丟包率超過丟包率上閾值時,減少發(fā)送速率;當丟包率介于丟包率上、下閾值之間時,發(fā)送速率保持不變。此類算法的關(guān)鍵是如何設定速率變化的幅度,以減少流的抖動,提高流的平穩(wěn)特性。
本文對VM8碼率控制算法進行必要的剖析,然后在基于上述擁塞控制機制的基礎(chǔ)上對VM8機制進行改進。實驗證明,改進后的算法能夠使接收端的視頻播放更加的清晰流暢,視覺效果更好。
VM8碼率控制算法大體可分為4個階段[11]:初始化階段、預編碼階段、編碼階段和后處理階段。由于后兩個階段與本文主題沒有太大關(guān)聯(lián),本文僅對前兩個階段做詳細的分析。
在初始化階段,編碼器主要完成一些與碼率控制相關(guān)的準備工作:(1)采用初始量化參數(shù)(典型的Qt=15)編碼第1個I幀。(2)從總位數(shù)減去第1個 I幀的編碼位數(shù),得到這個視頻序列所剩余的位數(shù)P0。
(3)將編碼器緩沖區(qū)初始化到半滿狀態(tài)。
預編碼階段主要完成當前幀的目標位數(shù)的計算,并通過計算得到的目標位數(shù)來得到在編碼階段中會使用到的量化參數(shù)。
(1)對目標位數(shù)進行初步估計。設t+1時刻的P幀的目標位數(shù)的估計值為Bt1,則可通過下面的式子得到初步的估計值:
(2)為了使編碼器緩沖區(qū)的水位趨向于50%,對初步目標位數(shù)Bt1進行調(diào)整:
式中,F(xiàn)t是t時刻緩沖區(qū)的填充容量,γ是緩沖區(qū)容量。
(3)為了保證使每幀圖像獲得恒定的質(zhì)量,編碼器還必須保證每幀有1個最小的目標位數(shù)C(這個值是由C=得到的,P是所有 P幀的可用位數(shù),N是 P幀的個0數(shù)),所以通過下式進行判斷得到Bt3:
(4)最后的調(diào)整是查看Bt3對編碼器緩沖區(qū)飽和度的影響。為了避免緩沖區(qū)的上溢和下溢,為緩沖區(qū)設置一個安全邊界值m。如果Bt3+Ft>(1-m)×γ,那么為了避免緩沖區(qū)上溢,調(diào)整目標位數(shù)為 Bt4=(1-m)×γ-Ft;如果 Bt3+Ft-C (5)根據(jù)Bt5計算得到量化參數(shù)。 從對VM8算法的分析可以看出,在預編碼階段進行的目標位數(shù)的調(diào)整過程中,僅僅是考慮到了編碼器緩沖區(qū)的填充狀態(tài),但是緩沖區(qū)的填充狀態(tài)僅僅代表了當前和過去的網(wǎng)絡傳輸?shù)臓顟B(tài),無法預測未來的傳輸狀態(tài),這種缺乏預測性的做法,會影響到編碼的圖像質(zhì)量。下面將在基于丟包率和雙丟包率閾值門限的擁塞控制算法的基礎(chǔ)上,通過當前丟包率和丟包率閾值對未來的發(fā)送速率進行預測,在計算目標位數(shù)時,參考前面的預測結(jié)果,來調(diào)整目標位數(shù),以此來完成對VM8算法的改進。 通過當前丟包率(設為 Ploss),丟包率下閾值(設為Ploss_min)和丟包率上閾值(Ploss_max)對未來的發(fā)送速率的變化做出預測,分為3種狀態(tài)。 (1)Ploss 這種狀態(tài)下,傳輸信道可視為處于“輕載”狀態(tài),未來一段時間內(nèi),發(fā)送速率會持續(xù)增加。 (2)Ploss_min≤Ploss 這種狀態(tài)下,傳輸信道可視為處于“滿載”狀態(tài),未來一段時間內(nèi),發(fā)送速率將保持穩(wěn)定,不再發(fā)生變化。 (3)Ploss≥Ploss_max 這種狀態(tài)下,傳輸信道可視為處于“阻塞”狀態(tài),未來一段時間內(nèi),發(fā)送速率會持續(xù)下降。 基于上述的幾種情況對VM8算法在預編碼階段進行改進。改進的切入點是預編碼階段的第(2)步:即對Bt1得到Bt2的算法進行改進。 原算法在該步驟的做法是:固定地采用0.5作為緩沖區(qū)目標水位參數(shù)。而改進后的算法會根據(jù)2.2節(jié)分析得到的對未來發(fā)送速率預測的3種狀態(tài),動態(tài)地決定緩沖區(qū)目標水位參數(shù)。該步驟改進后的算法如下: (1)首先通過當前丟包率和丟包率閾值得出未來發(fā)送速率的屬于2.2節(jié)中的哪種狀態(tài)。 (2)由不同的狀態(tài)得到不同的水位參數(shù)。設第i種狀態(tài)對應的參數(shù)為 βi(i=1,2,3),下面對每種狀態(tài)對應的水位參數(shù)進行分析。 在狀態(tài)1下,發(fā)送速率將持續(xù)增加,編碼器緩沖區(qū)讀取速度會持續(xù)增長,不太可能發(fā)生緩沖區(qū)上溢,因此可以設定大于0.5的水位參數(shù)。 在狀態(tài)2下,由于發(fā)送速率不再變化,因此可設置等于0.5的水位參數(shù)。 在狀態(tài)3下,由于發(fā)送速率會下降,編碼器緩沖區(qū)讀取速度會持續(xù)降低,為了避免有可能發(fā)生的緩沖區(qū)上溢,因此有必要設置小于0.5的水位參數(shù)。 由上面的分析得出:1>β1>0.5=β2>β3>0。 (3)根據(jù)水位參數(shù)進行目標位數(shù)的調(diào)整,使目標位數(shù)向水位參數(shù)表示的水位處趨近。一共可分為3種情況: ①若 Bt1+Ft>βi×γ,則 Bt2=Bt1-θR(Bt1+Ft-βi×γ); ②若 Bt1+Ft=βi×γ,則 Bt2=Bt1; ③若 Bt1+Ft<βi×γ,則 Bt2=Bt1+θA(Bt1+Ft-βi×γ)。 其中,F(xiàn)t是 t時刻緩沖區(qū)的填充容量,γ是緩沖區(qū)容量,θR是增長因子,θA縮小因子。本文中,θR和 θA均取值為 1/2,水位參數(shù) β1、β2、β3分別取值:0.6、0.5、0.4。 通過上面的算法調(diào)整,可以清楚地看出:當預測發(fā)送速率會增長的時候,算法將不再會以0.5作為緩沖區(qū)目標水位參數(shù),而是取大于0.5的值作為緩沖區(qū)目標水位參數(shù)。這樣,當前幀將獲得更多的位數(shù)用來存放編碼信息,圖像質(zhì)量自然地得到了提高。當預測發(fā)送速率會持續(xù)降低的時候,取小于0.5的值作為緩沖區(qū)目標水位參數(shù)。這樣,能夠有效地避免由于發(fā)送速率下降造成的緩沖區(qū)水位上升,乃至臨迫近上安全邊界,這樣可以避免VM8算法在預編碼階段第(4)步中對目標位數(shù)的削減,從而避免了圖像質(zhì)量的下降。 為了驗證改進后的VM8碼率控制算法能夠提高圖像的質(zhì)量,通過一些實驗來進行測試。使用2臺電腦進行實驗:1臺是作為發(fā)送端,負責視頻的編碼和發(fā)送;另1臺作為接收端,負責視頻的接收和回放。2臺電腦的網(wǎng)絡帶寬均為1 Mb/s。為了使實驗有可重復性,視頻源不采用動態(tài)采集方式,而是采用已經(jīng)采集好的視頻文件來模擬視頻采集,視頻長度是 2 min,包含 3 482個 VOP。視頻傳輸擁塞控制機制采用參考文獻[8]提出的算法,算法中的丟包率下閾值采用2%,丟包率上閾值采用3%。此外,VM8原始算法和改進的算法在初始化階段中的初始量化參數(shù)均取典型值Qt=15。設定不同的編碼器緩沖區(qū)大小,多次實驗后結(jié)果如表1所示。 表1 實驗結(jié)果比較 表中的“目標位數(shù)的削減次數(shù)”指的是在預編碼階段由于當前幀臨迫近上安全邊界,為了避免緩沖區(qū)溢出而對目標位數(shù)做出消減的次數(shù),此操作會降低編碼后的圖像質(zhì)量。 從實驗結(jié)果可以看出,編碼區(qū)緩沖區(qū)越小,改進后的VM8算法效果越明顯。 本文介紹了基于MPEG-4編碼標準和VM8算法的實時視頻編碼和傳輸架構(gòu),對VM8碼率控制算法作了必要的剖析,并針對該機制僅僅基于編碼區(qū)緩沖,缺乏對未來傳輸狀態(tài)進行預測的缺點,做了相應的改進。最后通過實驗證明,改進后的VM8算法能夠提高編碼后的圖像質(zhì)量。由于本文改進的算法是建立在基于丟包率和雙丟包率閾值門限的擁塞控制算法地基礎(chǔ)上的,因此不可避免地有一定的局限性。今后將就如何突破不同擁塞控制算法的局限進行研究,得到應用更加廣泛的碼率控制算法。 [1]周慧燦.數(shù)字視頻的網(wǎng)絡傳輸關(guān)鍵技術(shù)研究[D].長沙:湖南大學,2004. [2]張靜,張春田.視頻傳輸中的碼率控制技術(shù)[J].電路與系統(tǒng)學報,2005,10(3):104. [3]畢厚杰.新一代視頻壓縮編碼標準-H.264/AVC[M].北京:人民郵電出版社,2006. [4]高奎.實時流媒體系統(tǒng)若干關(guān)鍵技術(shù)的研究[D].北京:中國科學院研究生院,2005. [5]MA, S, WEN G, YAN L.Rate-distortion analysis for H.264/AVC video coding and its application to rate control[J].Circuits and Systems for Video Technology,IEEE Transactions on,2005,15(12):1533. [6]STEVENSW R.TCP/IP詳解,卷 1[M].北京:機械工業(yè)出版社,2006:107. [7]SCHULZRINNE H, CASNER S.RTP:A transport protocol for real-time applications[EB/OL].[2009-08-15].http://www.ietf.org/rfc/rfc1889.txt. [8]高東日,魏海平,姜東.網(wǎng)絡自適應傳輸控制策略研究[J].計算機工程,2006,32(22):141-143. [9]王繼先.視頻傳輸控制方法的研究(基于 RTP)[D].北京:電子科技大學,2004:24-25 [10]嚴德汗.城域網(wǎng)數(shù)字視頻監(jiān)控系統(tǒng)設計實現(xiàn)及其自適應傳輸控制策略研究[D].武漢:華中科技大學,2004:29-34. [11]孫哲.基于MPEG-4的運動估計和碼率控制技術(shù)的研究[D].北京:電子科技大學,2005:35-39.2 VM8碼率控制機制的改進
2.1 問題的提出
2.2 發(fā)送速率變化的預測
2.3 算法改進
3 實驗驗證