喻 欣,周 亮,楊曉秋,劉 蓓
(重慶有線電視網絡有限公司 規劃設計院,重慶 400051)
H.264是ISO與ITU-T于2003年聯合頒布的新一代低比特率視頻壓縮標準,其主要目的是提高壓縮效率和增加網絡友好性[1]。該標準雖獲得了很好的編碼效率,但也使得其抗誤碼能力更加脆弱,誤碼擴散會引起重構圖像質量的急劇下降。因此在H.264中,引入了一些新的抗誤碼差錯控制技術,如靈活宏塊重排(Flexible Macroblock Ordering,FMO)技術。目前國內外對FMO技術進行了一定的研究,文獻[2]研究了一種FMO模式下的優化技術;文獻[3]測試了FMO技術對幾個編碼參數的影響,并提出了一種FMO模式下提高錯誤隱藏效果方法;文獻[4]和文獻[5]針對FMO提出了非等差錯保護思想;文獻[6]提出了一種通過模式切換的方法提高容錯能力。這些文獻尚未對各種FMO模式的編解碼參數作出比較完整的分析,也沒有對采用各種FMO模式編碼后的碼流進行抗誤碼能力的測試。
筆者在分析FMO原理的基礎上,總結出FMO差錯控制思想及各種模式宏塊重排的特點。通過研究H.264官方測試代碼JM86基線檔次中FMO設置參數的含義,實現了一種合理的宏塊分配映射方式用于后續測試。最后,選取4種標準視頻測試序列和不同的模擬信道丟包模式,對各種FMO模式下的編解碼效率及抗誤碼能力進行了測試,并總結出了各種模式的應用場所。
FMO是通過宏塊分配映射技術,按照一定的方式將一類宏塊映射到1個片組中。如果只有2個片組,則對片組分開進行傳送,如果片組中還分為不同的片,則相同片組中的片分開傳送。由于整幅圖像中一些相鄰宏塊分布在不同的片中,丟失塊可充分利用周圍相鄰塊的相關信息進行錯誤隱藏,因此可以較好地恢復出錯誤圖像,提高抗誤碼能力[7-8]。H.264中定義了7種宏塊到片組的映射方式:
1)交織(Interleaved)模式(FMO0),不同片組交替出現,圖1a是三片組的交織模式。
2)分散(Dispersed)模式(FMO1),相鄰宏塊分散出現在不同的片組中,該模式下某個宏塊與其周圍的上下左右4個相鄰塊都不在同一片組中。兩片組分散模式如圖1b所示。
3)前后景(Fore-ground with left-over)模式(FMO2),將圖像按照不同特點分為1個或幾個矩形區域,把各區域的宏塊分配到不同的片組,兩片組前后景模式如圖1c所示。
4)環形掃描(Box-out)模式(FMO3),將圖像中心區域的宏塊定義為片組中較小的宏塊,以順時針或逆時針方向旋轉確定片組大小,中心區域以外的宏塊則定義為第2個片組。旋轉方向、宏塊數目由參數設定。圖1d是兩片組順時針方向掃描時的環形掃描模式。
5)光柵(Raster-scan)模式(FMO4),將圖像分為上下2個片組,可從左到右、從上到下,也可從右到左、從下到上進行掃描。片組宏塊數目由參數設置確定。圖1e是兩片組從左到右、從上到下掃描時的光柵模式。
6)擦拭掃描(Wipe)模式(FMO5),將圖像分為左右2個片組。從上到下、從左到右掃描的擦拭模式如圖1f所示。

7)顯示控制(Explicit)模式(FMO6),由用戶指明每個宏塊屬于哪個片組,可在配置文件為每個宏塊設置其所屬的片組,設置順序為光柵掃描順序。
FMO0,FMO2與 FMO6需要使用 sg0/2/6cong.cfg配置文件,把一幅圖像中的宏塊在其模式下按照一定的方式分配到片組中。其他模式有固定的片組分配方式,不需要進行配置。片組分配完成后,再做片設置,完成片組到片的分配過程。
在JM86基線檔次的配置文件enconder_baseline.cfg中,FMO配置參數含義如下:
SliceMode(參數1):對是否分片及分片方式進行設置。0為不分片;1為以固定宏塊數分片;2為以固定比特數分片。
SliceArgument(參數2):對不同的分片方式下片的大小進行設置。0表示SliceArgument無效;1表示以宏塊為單位進行分片,每個片有SliceArgument個宏塊;2表示以字節為單位進行分片,每個片有SliceArgument個字節。
num_slice_groups_minus1(參數 3):是否使用 FMO 及片組數目設置。0表示不使用FMO;1表示設置兩個片組,2表示設置3個片組。
slice_group_map_type (參數 4):0~6 分別表示設置FMO0~FMO6模式。
slice_group_change_direction_flag(參數 5):設置值為0或1,對環形掃描,光柵掃描,擦式掃描模式中的掃描方向進行設置。
slice_group_change_rate_minus1(參數 6):對環形掃描,光柵掃描,擦式掃描模式每個片組的宏塊個數進行設置。
SliceGroupConfigFileName(參數 7):設置值為“sg0conf.cfg”/“sg2conf.cfg”/“sg6conf.cfg”, 對 FMO0,FMO2,FMO6模式下片組區域進行設置。
第7種模式為自定義模式,筆者對H.264的前6種FMO模式及無FMO模式進行測試,對基線檔次的FMO參數設置如表1所示,表中的“/”表示在該模式下此參數無效。
這里對前6種FMO模式和無FMO模式進行測試和比較。由于前6種FMO模式中有的模式只能分為2個片組,所以本文將所有模式都分為2個片組。此外為使得各模式下片分配方式有較大差異,片大小設置為30。圖2a~2g為各種設置參數下的片組及片分配示例。

表1 不同FMO模式參數設置
測試所用的計算機配置為:AMD Turion 64×2 Mobile Technology TL-602.00 GHz,1.87 Gbyte;采用 H.264官方測試平臺JM86;基本參數設置為基線檔次,編碼100幀,IPPPP 格式,幀率為 30 f/s(幀/秒),CAVLC 熵編碼方式,RTP輸出格式,量化步長為28,率失真(rd-optimized mode)設置為 1。
采用 news,foreman,silent和 carphone 4 種不同特點的QCIF格式的標準視頻測試序列。

圖3a~3e分別為對100幀4種不同特點、IPPPP格式的視頻序列進行測試后,得到P幀的運動估計時間、編碼時間、編碼輸出比特率、解碼圖像的亮度峰值信噪比(PSNRY)、解碼時間的測試結果。
通過對測試結果的分析,可得到如下結論:
1)運動估計時間:運動估計時間不會因為FMO模式的不同而有較大的變化。因為對P幀的每個宏塊做運動估計是通過重構幀來進行的,與P幀中宏塊本身的排列順序無關。
2)編碼時間:FMO1模式的編碼時間最少,FMO0模式次之,其他模式編碼時間相差不大。這是因為在I幀中,對某一個片中的宏塊作幀內預測時,FMO1沒有可用預測的相鄰塊,因此不作幀內預測。FMO0模式只使用上側的宏塊進行預測,而其他模式下可用于預測的相鄰塊較多,預測的范圍越大,預測時間越多。
3)編碼輸出比特率:FMO1模式的輸出比特率最高,原因是該模式不作幀內預測,直接進行幀內編碼。FMO0模式只使用上側相鄰塊進行預測,預測精度不高,殘差值較大,輸出碼流較大。其他模式下片內相鄰宏塊較多,預測較準確,殘差值較小,輸出比特率也相對較小。
4)PSNRY:不同FMO模式下解碼圖像的PSNRY變化不大。圖像的重構質量主要取決于量化精度,量化精度一樣,則重構質量幾乎相同。
目前,我國大部分中小型企業都以成本精細化管理來提高自身的綜合發展實力。醫院實行成本精細化管理不僅可以提高醫院的綜合實力,還能更好地處理與患者之間微妙的關系。
5)解碼時間:在不同FMO模式下解碼時間變化不大。FMO只是對宏塊順序進行重排,解碼端只需對順序進行恢復,因此沒有增加解碼端的復雜度。
模擬信道丟包程序Mobile IP有3類錯誤模式,即18681.3、18681.4和wcdma。經過18681.3丟包后的碼流丟失率約為30%~40%,18681.4約為10%~20%,而wcdma有多個文件分別模擬不同信道的特點,這里選取的是wcdma_64kb_3kph_5e-04.bin文件,這種錯誤模式下I幀不作丟失,碼流的丟失率大約在5%以下。對不同FMO模式編碼后的碼流在不同錯誤模式下進行丟包后解碼,得到其解碼幀數如圖4a~4c所示。
由圖4a~4c可看出,丟失率越小,解碼成功的機會越大。但在wcdma文件下,即使I幀不丟失,碼流仍然可能不解碼。這是因為碼流中的一些頭信息丟失,導致不能正常解碼。


筆者將同一模式下的解碼成功次數進行了統計,數據比較如圖5所示。FMO0與FMO1具有較好的抗誤碼能力,即使在丟包率較高的情況下也可能正確解碼。無FMO與FMO4模式的抗誤碼性能也不錯,在保證I幀正確接收的情況下也能正確解碼。FMO5模式比剩余其他模式的抗誤碼性能要好,最差的是FMO3。

宏塊分配映射方式不同,片與片之間的相關性不同,丟失塊與其相鄰塊所屬的片組不同,這些都會導致解碼時對差錯處理的能力不同。例如在解碼當前宏塊時找不到運動矢量時,可選擇相鄰宏塊中的運動矢量,如果相鄰塊全部丟失,則不做解碼。在FMO0與FMO1模式下,丟失塊的相鄰塊更可能正確接收,因而可以很好地處理誤碼的情況。無FMO與FMO4的宏塊映射方式類似,因此抗誤碼性能相同。其他模式下相鄰塊丟失的可能性更大,處理差錯的性能下降,因此抗誤碼能力較弱。
通過對不同FMO模式下的編解碼效率及抗誤碼性能進行分析,可確定各種FMO模式的適用范圍及應用場合。
FMO0與FMO1模式下編碼后碼流總比特率較高,需更大帶寬,但其編碼時間短,抗誤碼能力相對較強。因此,在帶寬允許的情況下可選擇這兩種模式用于實時視頻通信。此外,兩種模式片與片之間的宏塊具有更好的相關性,可提高錯誤隱藏性能,恢復出更好的視頻質量。因此,這兩種模式可應用于視頻通信和高清廣播電視中。
FMO2與FMO3兩種模式下編碼后碼流的抗誤碼能力下降,比特率略低于無FMO模式。但是從這兩種模式下片組的映射過程可知,可以通過對圖像內容劃分后進行片組映射,進一步提高圖像壓縮效率,從而降低總比特率。此外,通過對重要內容進行保護后,也可提高其碼流的容錯能力。因此這兩種模式可以應用于帶寬較低,實時性要求較低的流媒體服務中。
FMO4與FMO5兩種模式下編碼后的碼流無論是在抗誤碼能力還是編碼時間與比特率上均劣于無FMO模式下的碼流,并且片組分配映射方式不夠靈活,因此,筆者認為,FMO4與FMO5并沒有更多的實際應用價值。
合理利用H.264中的FMO抗誤碼技術可以有效提高其碼流的容錯能力。筆者對其編解碼效率、抗誤碼能力進行了測試,通過對測試結果的比較可見,片內宏塊的相關性導致了不同FMO模式預測范圍的變化、預測殘差值的變化,因此編碼時間和輸出比特率也不同。片與片之間的相關性不同也導致了抗誤碼能力的不同。通過分析,總結了各FMO模式下的性能特點及適用范圍。
[1]WIEGAND T,SULIVAN G J,BJONTEGAARD G,et al.Overview of the H.264/AVC video coding standard[J].IEEE Trans.Circuits Systems for Video Technology,2003,13(7):560-576.
[2]謝治平,鄭更生,賀貴明.一種基于FMO的H.264容錯編碼[J].計算機工程與應用,2006,42(31):200-202.
[3]萬里晴,李學明.H.264的差錯控制與錯誤隱藏技術研究[J].計算機工程與應用,2007,43(16):53-57.
[4]HANNUKSELA M M,WANG Y K,GABBOUJ M.Isolated regions in video coding[J].IEEE Trans.Multimedia, 2004,6(2):259-267.
[5]IM S K,PEARMAIN A J.Unequal error protection with the H.264 flexible macroblock ordering[C]//Proc.SPIE VCIP 2005.Beijing:[s.n.],2005:1033-1040.
[6]毛樸澄,何小海,滕奇志.基于H.264的一種新型自適應FMO選擇策略[J].電視技術,2009,33(12):14-17.
[7]王俊生.視頻編碼新標準H.264中抗誤碼技術的研究[J].中國有線電視,2004,19(20):15-18.
[8]楊華,楊松岸,余松煌.H.264的幾種抗誤碼方法的分析與比較[J].通信技術,2003(10):1-3.