概念
容錯編碼(error resilient coding)與
信源編碼端純粹追求編碼效率不同,容錯編碼是在編碼過程中加入一部分冗餘信息來增強抗誤碼能力,力求以最少量的冗餘來獲得最大的增益,其抗誤碼性能是以犧牲編碼效率為代價的。
根據處理差錯擴散的類型和方式的不同,容錯編碼技術主要有:插入同步標記(RM)、數據分割(DP)、可逆變長編碼(RVLC)、參數集、幀內編碼更新技術、分層編碼(LC)技術、相關子數據流傳輸的多描述編碼(MDC)等。
工作原理
插入同步標記
在使用
VLC時,一個比特的錯誤就可能導致解碼器失去同步。為解決這個問題,一個簡單有效的方法就是周期性地插入同步標誌。同步標誌區別於普通碼字,解碼器很容易將它們和普通碼字區分開來。當解碼器檢測到同步標誌後,就可以恢復正確解碼。
顯而易見,插入同步標誌會降低編碼效率。同步標誌長度越長,使用越頻繁,開銷也越大。但對解碼器來說,頻繁使用同步標誌有利於解碼器快速恢復同步,減小誤碼影響範圍。
數據分割
在壓縮後的視頻碼流中,每個宏塊的頭信息和變換係數的編碼是排列在一起的。在發生差錯的情況下,兩部分信息會同時丟失。而實際上,頭信息遠比變化係數重要;頭信息(圖像格式和量化步長)影響整片、整幀甚至整個視頻序列,而變換係數僅僅影響部分圖像區域或者個別採樣值。因此,數據分割技術利用視頻碼流中各語法元素的重要性不同的特點,在丟包網路中傳輸時對不同部分的數據區別對待,以保護更重要的數據,提高圖像解碼質量。當解碼器發現誤碼時,僅丟棄不可解碼的邏輯單元,對其他邏輯單元照常解碼。
數據分割的好處在於:容易確定誤碼位置及其性質,從而採取合適的掩蓋技術或其他對策,便於分級保護數據,加強重要數據的傳輸保護。但在一定程度上也降低了運動預測的精度和範圍,降低了編碼效率。
可逆變長編碼
除了插入同步標誌方法外,改進VLC編碼方法同樣可以達到減少誤碼影響範圍的目的,如可逆變長編碼。可逆變長編碼是一系列特殊的VLC編碼,具有一些特定的前/後綴特性,使其在正向和逆向均能得到唯一的解碼。當差錯發生後,解碼器可分別由兩個重同步點開始進行前向和逆向解碼,從而更精確地確定差錯發生的位置並恢復部分數據。
常規的VLC只能進行前向解碼,而可逆變長編碼則具備逆向解碼的特性,在恢復丟失的數據的時候,這一特性十分有用。例如:在使用VLC時,當檢測到比特流中的錯誤,解碼器往往會跳到下一個同步標記;如果使用可逆變長編碼,解碼器並不會丟失從錯誤位到下一個再同步標記之間的數據,而是從下一同步標誌開始逆向解碼,直到下一個已被確定的錯誤處,這樣就可以恢復部分數據,而不是全部丟棄,從而更多地利用正確碼流。
參數集
一些重要信息的丟失,如序列和圖像的頭信息,會造成解碼的嚴重錯誤。在H.264中將這些關鍵信息分離出來,憑藉參數集的設計,確保在易出錯的傳輸環境中能正確傳輸它們。具體說來,這樣的碼流結構在頭信息中只攜帶參數集的標號,而參數集可以通過以下方式來傳輸或處理:(1)帶外傳輸參數集,通過可靠的協定,在首個片到達之前傳輸到解碼器;(2)帶外傳輸,採用傳送複製分組來保證至少有一個拷貝到達解碼端;(3)在編碼器和解碼器中採用硬體來處理。多個不同的序列和圖像參數集貯存在解碼器中,解碼器通過每個單元標識的參數集ID來選擇合適的參數集。
幀內編碼更新
周期性插入幀內編碼幀/塊是阻止誤碼在時域擴散的一種方法。通常,I幀的編碼長度遠大於P幀和B幀,插入I幀會導致輸出碼率的顯著起伏波動。幀內編碼更新不依賴時域的預測信息,能有效地阻止視頻差錯在時域的誤差累積。但相對於幀間編碼,幀內編碼的複雜性顯著增加。如果採用整幀更新,將導致編碼碼率急增或由於信道頻寬的局限而導致延遲過大,在實時套用中較難套用。因此,通常會對一幀中的部分塊進行幀內更新。但過多的幀內更新MB也會增大比特流,因此在比特率受限的條件下,如何確定幀內MB的位置和數量是問題的關鍵。
分層編碼
分層編碼是指將視頻信號編碼成一個基本層和多個增強層。其中,基本層包含視頻信號的基本信息,提供最低限度的質量保證;增強層包含視頻信號的細節信息,以基本層作為預測基礎,進一步提高視頻質量。解碼器能根據不同的頻寬條件或解碼能力選擇不同質量的視頻。
分層解碼具有一定的抗誤碼性能,因為編碼後的碼流中仍然存在著一定的冗餘信息。這是因為:一是為了避免誤碼擴散,增強層的Key picture往往採用幀內編碼的方式進行編碼;二是每層都需要相同的附加信息。