H.264是ITU-T最新的視頻編碼通訊協定,被稱作ISO/IEC14496-10或MPEG-4 AVC,是由MPEG 格式(MPEG)和ITU的視頻編碼專家組共同 開發 的新產品。 H.264分兩層結構,包括視頻編碼層和網路適配層。視頻編碼層處理的是塊、宏塊和片的資料,並盡量做到與網路層獨立H.264是ITU-T最新的視頻編碼通訊協定,被稱作ISO/IEC14496-10或MPEG-4 AVC,是由MPEG 格式(MPEG)和ITU的視頻編碼專家組共同開發的新產品。
H.264分兩層結構,包括視頻編碼層和網路適配層。視頻編碼層處理的是塊、宏塊和片的資料,並盡量做到與網路層獨立,這是視頻編碼的核心,其中包含許多實現錯誤恢複的工具;網路適配層處理的是片結構以上的資料,使 H.264能夠在基於RTP/UDP/IP、H.323/M、MPEG-2傳輸和H.320協議的網路中使用。
IP網路對視頻壓縮的限制
1. H.264的應用場合
在討論基於IP的H.264之前,有必要先闡述一下H.264與IP網路有關的應用場合及其對傳輸和轉碼器的要求。下面介紹對話應用、下載服務和流媒體應用三種場合。
對話應用,比如像視頻電話和視頻會議,有嚴格的時延限制,要求端到端時延小於1s,最好小於100ms。轉碼器的參數能即時調整,錯誤恢複機制要根據實際網路變化而改變。編解碼的複雜度不能很高,比如雙向預測的模式就不能被採用。
下載服務,可使用可靠的傳輸協議如FTP和HTTP將資料全部傳輸。由於這種應用的非即時性,編碼器可以通過最佳化進行高效編碼,而且對時延和錯誤恢複機制沒有要求。
流媒體服務應用,對時延要求介於上面兩者之間,初始化時延是10s以內。與即時編碼相比對時延要求降低,編碼器可以進行最佳化實現高效編碼(比如雙向預測)。然而通常流媒體服務使用不可靠的傳輸協議,所以編碼時要進行差錯控制並進行通道錯誤修正編碼。
本文主要討論對話應用和流媒體應用,這兩種應用基於IP網路。IP網路又可分為三種類型:不可控IP網路(如Inte.net)、可控IP網路(廣域網路) 和無線IP網路(如3G網路)。這三種IP網路有不同的傳輸單元最大值尺寸(MTUsize)、位元出錯機率和TCP使用標記。傳輸單元最大值尺寸是網路層最大的分組長度,H.264編碼時要使片的長度小於MTU尺寸,這樣可避免在網路層再進行一次資料的分割。兩個IP節點之間的MTU尺寸是動態變化的,通常假定有線IP網路的MTU尺寸是1.5KB,無線網路的MTU尺寸是100位元組。可見要適用於無線網路的H.264必須採用資料分割技術使得片的長度小於MTU尺寸。TCP傳輸控制通訊協定能夠解決網路擁塞引起的分組丟失問題,而在無線網路中,分組丟失是由於鏈路層錯誤引起的,TCP並非很好的解決辦法,要採用差錯控制協議。
2. H.264使用的協議環境
對話應用和流媒體應用使用同一協議組,下面進行討論。
網路層協議:使用IP(網際協議)。每個IP分組單獨從發方出發,經過一系列的路由器到達收方。IP將大於MTU尺寸的分組進行資料分割、重組。每個分組的傳輸時間都有所不同。IP頭20個位元組由校正碼來保證,但資料沒有保護。IP分組最大值為64KB,但由於MTU尺寸的限制,一般沒有這麼大。
傳輸層協議:主要有兩個協議,TCP和UDP。TCP提供面向位元組的可靠傳輸服務,以重傳和逾時等機製作為差錯控制的基礎。由於對時延的不可預測,並不適用於即時通訊傳輸。UDP提供不可靠的資料報傳輸業務。UDP頭包含的校正數(8位元組)可以發現和去掉含有位元錯誤的分組。UDP允許分組傳輸過程中出現丟失、複製、改序等。使用UDP協議時,高層必須使用錯誤恢複協議。
應用程式層傳輸協議:使用RTP(即時傳輸協議)。該協議和IP/UDP結合使用,是面向會話的協議。每個RTP分組包含RTP頭標,載荷頭標(可選)和載荷本身。RTP頭標的內容見圖1,基本選項佔用12位元組,標記位標記有同一時間戳記的一組分組的結束。RTP協議使發送方將資料分為大小合理的分組,並將解碼方觀察到的網路特徵反饋給發送方,使發送方可以動態調整位元速率和抗誤碼機制。RTP分組和RTP載荷規範在第四部分討論。
應用程式層控制協議:有H.245協議、SIP和SDP,或RTSP。這些協議可以實現流媒體的控制,收發方的協商和控制動態會話層。
H.264的錯誤恢複工具
錯誤恢複的工具隨著視頻壓縮編碼技術的提高在不斷改進。舊的標準(H.261、H263、MPEG-2的第二部分)中,使用片和宏塊組的劃分、幀內編碼宏塊、幀內編碼片和幀內編碼映像來防止錯誤的擴散。之後改進的標準(H.263+、MPEG-4)中,使用多幀參考和資料分割技術來恢複錯誤。
H.264標準在以前的基礎上提出了三種關鍵技術:(1)參數集合,(2) 靈活的宏塊次序(FMO),(3)冗餘片(RS)來進行錯誤的恢複。
1. 幀內編碼
H.264中幀內編碼的技術和以前標準一樣,值得注意的是:
(1)H.264中的幀內預測性編碼宏塊的參考宏塊可以是幀間編碼宏塊,幀內預測宏塊並不像H.263中的幀內編碼一樣,而採用預測的幀內編碼比非預測的幀內編碼有更好的編碼效率,但減少了幀內編碼的重同步效能,可以通過設定限制幀內預測標記來恢複這一效能。
(2)只包含幀內宏塊的片有兩種,一種是幀內片(Islice),一種是立即重新整理片(IDRslice),立即重新整理片必存在於立即重新整理映像 (IDRpicture)中。與短期參考映像相比,立即重新整理映像有更強壯的重同步效能。
在無線IP網路環境下,為了提高幀內映像的重同步效能,要採用率失真最佳化編碼和設定限制幀內預測標記。
2. 映像的分割
H.264支援一幅映像劃分成片,片中宏塊的數目是任意的。在非FMO模式下,片中的宏塊次序是同光柵掃描順序,FMO模式下比較特殊。片的劃分可以適配不同的MTU尺寸,也可以用來交織分組打包。
3. 參考映像選擇
參考映像資料選擇,不論是基於宏塊、基於片,還是基於幀,都是錯誤恢複的有效工具。對於有反饋的系統,編碼器獲得傳輸中丟失映像地區的資訊後,參考映像可以選擇解碼已經正確接收的映像對應的原映像地區作參考。在沒有反饋的系統中,將會使用冗餘的編碼來增加錯誤恢複效能。
4. 資料的劃分
通常情況下,一個宏塊的資料是存放在一起而組成片的,資料劃分使得一個片中的宏塊資料重新組合,把宏塊語義相關的資料群組成一個劃分,由劃分來組裝片。
在H.264中有三種不同的資料劃分。
頭資訊劃分:包含片中宏塊的類型,量化參數和運動向量,是片中最重要的資訊。
幀內資訊劃分:包含幀內CBPs和幀內係數,幀內資訊可以阻止錯誤的蔓延。
幀間資訊劃分:包含幀間CBPs和幀間係數,通常比前兩個劃分要大得多。
幀內資訊劃分結合頭資訊解出幀內宏塊,幀間資訊劃分結合頭資訊解出幀間宏塊。幀間資訊劃分的重要性最低,對重同步沒有貢獻。當使用資料劃分時,片中的資料根據其類型被儲存到不同的緩衝,同時片的大小也要調整,使得片中最大的劃分小於MTU尺寸。
解碼端若獲得所有的劃分,就可以完整重構片;解碼端若發現幀內資訊或幀間資訊劃分丟失,可用的頭資訊仍然有很好的錯誤恢複效能。這是因為宏塊類型和宏塊的運動向量含有宏塊的基本特徵。
5. 參數集的使用
序列的參數集(SPS)包括了一個映像序列的所有資訊,映像的參數集(PPS)包括了一個映像所有片的資訊。多個不同的序列和映像參數集經排序存放在解碼器。編碼器參考序列參數集設定映像參數集,依據每一個已編碼片的標題的儲存地址選擇合適的映像參數集來使用。對序列的參數和映像的參數進行重點保護才能很好地增強H.264錯誤恢複效能。
在差錯通道中使用參數集的關鍵是保證參數集及時、可靠地到達解碼端。例如,在即時通道中,編碼器用可靠控制協議及早將他們以帶外傳輸的方式發送,使控制協議能夠在引用新參數的第一個片到達之前把它們發給解碼器;另外一個辦法就是使用應用程式層保護,重發多個備份檔案,確保至少有一個備份資料到達解碼端;第三個辦法就是在轉碼器的硬體中固化參數集設定。
6. 靈活的宏塊次序(FMO)
靈活的宏塊次序是H.264的一大特色,通過設定宏塊次序映射表(MBAmap)來任意地指配宏塊到不同的片組,FMO模式打亂了原宏塊順序,降低了編碼效率,增加了時延,但增強了抗誤碼效能。FMO模式劃分映像的模式各種各樣,重要的有棋盤模式、矩形模式等。當然FMO模式也可以使一幀中的宏塊順序分割,使得分割後的片的大小小於無線網路的MTU尺寸。經過FMO模式分割後的映像資料分開進行傳輸,以棋盤模式為例,當一個片組的資料丟失時可用另一個片組的資料(包含丟失宏塊的相鄰宏塊資訊)進行錯誤掩蓋。實驗資料顯示,當丟失率為(視頻會議應用時)10%時,經錯誤掩蓋後的映像仍然有很高的質
量。
7. 冗餘片方法
前邊提到了當使用無反饋的系統時,就不能使用參考幀選擇的方法來進行錯誤恢複,應該在編碼時增加冗餘的片來增強抗誤碼效能。要注意的是這些冗餘片的編碼參數與非冗餘片的編碼參數不同,也就是用一個模糊的冗餘片附加在一個清晰的片之後。在解碼時先解清晰的片,如果其可用就丟棄冗餘片;否則使用冗餘模糊片來重構映像。
H.264中即時傳輸協議(RTP)
1. RTP載荷規範
在第二部分已經對H.264的網路通訊協定環境作了闡述,這裡要詳細討論RTP的載荷規範和抗誤碼效能。RTP通過發送冗餘資訊來減少接收端的丟包率,會增加時延,與冗餘片不同的是它增加的冗餘資訊是個別重點資訊的備份,適合於應用程式層的非等重保護。下邊闡述與多媒體傳輸有關的3個規範。
(1)分組複製多次重發,發送端對最重要的位元資訊分組進行複製重發,使得保證接收端能至少正確接收到一次,同時接收端要丟棄已經正確接收的分組的多餘備份。
(2)基於分組的前向錯誤修正,對被保護的分組進行異或運算,將運算結果作為冗餘資訊發送到接收方。由於時延,不用於對話型應用,可用於流媒體。
(3)音頻冗餘編碼,可保護包括視頻在內的任何資料流。每個分組由頭標、載荷以及前一分組的載荷組成,H.264中可與資料分割一起使用。
2. H.264 NAL單元的概念
H.264 NAL單元對編碼資料進行打包,NAL單元由1位元組的頭,3個定長的欄位和一個位元組數不定的編碼段組成。
頭標的文法:NALU類型(5bit)、重要性指示位(2bit)、禁止位(1bit)。
NALU類型:1~12由H.264使用,24~31由H.264以外的應用使用。
重要性指示:標誌該NAL單元用於重建時的重要性,值越大,越重要。
禁止位:網路發現NAL單元有位元錯誤時可設定該位元為1,以便接收方丟掉該單元。
3. 分組打包的規則
(1)額外開銷要少,使MTU尺寸在100~64k位元組範圍都可以;
(2)不用對分組內的資料解碼就可以判別該分組的重要性;
(3)載荷規範應當保證不用解碼就可識別由於其他的位元丟失而造成的分組不可解碼;
(4)支援將NALU分割成多個RTP分組;
(5)支援將多個NALU彙集在一個RTP分組中。
RTP的頭標可以是NALU的頭標,並可以實現以上的打包規則。
4. 簡單打包
一個RTP分組裡放入一個NALU,將NALU(包括同時作為載荷頭標的NALU頭)放入RTP的載荷中,設定RTP頭標值。為了避免IP層對大分組的再一次分割,片分組的大小一般都要小於MTU尺寸。由於包傳送的路徑不同,解碼端要重新對片分組排序,RTP包含的次序資訊可以用來解決這一問 題。
5. NALU分割
對於預先已經編碼的內容,NALU可能大於MTU尺寸的限制。雖然IP層的分割可以使資料區塊小於64KB,但無法在應用程式層實現保護,從而降低了非等重保護方案的效果。由於UDP資料包小於64KB,而且一個片的長度對某些應用場合來說太小,所以應用程式層打包是RTP打包方案的一部分。
新的討論方案(IETF)應當符合以下特徵:
(1)NALU的分塊以按RTP序號升序傳輸;
(2)能夠標記第一個和最後一個NALU分塊;
(3)可以檢測丟失的分塊。
6. NALU合并
一些NALU如SEI、參數集等非常小,將它們合并在一起有利於減少頭標開銷。已有兩種集合分組:
(1)單一時間集合分組(STAP),按時間戳記進行組合;
(2)多時間集合分組(MTAP),不同時間戳記也可以組合。
本文重點講述了在IP網路的限制條件下H.264進行錯誤恢複的幾種有力工具,但在不同的IP網路中要組合使用各種工具才能實現高效率編碼和傳輸。因為目前無線網路對MTU尺寸和時延的限制,所以錯誤恢複工具可以結合使用映像的分割、資料的劃分和RTP分組技術,避免使用冗餘資訊和反饋來提高錯誤恢複效能;另外高效率的FMO編碼模式可以大大提高編碼的抗分組丟失效能
原文連結:http://www.ltesting.net/ceshi/ruanjianceshikaifajishu/rjcshjdj/wlfwq/2007/0713/132391.html