一、引言
傳統上,抗誤碼的機制分為三類:在編碼器和通道編碼中引入冗餘,使編碼流對傳輸錯誤具有更強的抗干擾能力;解碼器根據錯誤檢測的結果對錯誤進行隱藏;通過編碼器、傳輸通道和解碼器之間進行互動,編碼器根據檢測到的錯誤資訊調整自身的操作。在本文中,我們將它們統稱為錯誤恢復技術。
二、錯誤恢復技術綜述
1.編碼器中的錯誤恢復編碼
魯棒熵編碼是一種簡單有效的提高編碼流魯棒性的方法,就是在編碼流中週期地插入重同步標記,這樣,解碼器可以在檢測到重同步標記之後繼續進行正確的解碼。反向變長編碼(rvlc)是另一種常用方法,它通過提供重同步前的反向解碼功能,以及前向解碼器和後向解碼器之間的交叉檢查功能,減少了有效資料的丟棄,僅適度地增加了運算複雜度。
編碼流對傳輸錯誤敏感的乙個主要原因就是使用了時間**和空間**。一旦有誤碼發生,在解碼器上重構的幀將會與原影象有較大差別,這樣會導致使用這一幀作為參考幀的後續幀重構時產生錯誤。阻止時域錯誤擴散的乙個方法是週期的插入幀內編碼的幀或巨集塊,對於實時應用,使用足夠數量的幀內編碼的巨集塊是乙個有效的錯誤恢復工具。對於幀內編碼巨集塊的數量和位置的確定,目前所知最好的方法是使用基於丟包率的率失真優化方案。另乙個限制錯誤擴散的方法就是將資料分成多個段,僅在同一段內部進行時間和空間**,即獨立的段**。
2.解碼器中的錯誤隱藏技術
解碼器錯誤隱藏是指對傳輸錯誤導致的丟失資訊的恢復和估計。在基於塊的混合編碼範例中,損壞的mb有三類資訊需要估計:紋理資訊,包括原始影象塊和**錯誤塊的畫素或dct係數的值;運動資訊,包括p模式或b模式編碼的mb中的mv;巨集塊的編碼模式。眾所周知,影象的能量主要集中在低頻分量,即空間和時間相鄰的畫素點的色度值的變化很平滑,除了在區域的邊緣。所有的用於恢復紋理資訊的技術都是基於上述特性進行某種空間、時間內插。mv域也採取同樣的方法,對於編碼模式,傾向於採用啟發式的方法。
對於紋理資訊的恢復,有四種方法:運動補償時間**;空間內插;基於重構影象平滑度的空間和時間內插;使用pocs技術的空間內插。運動補償時間**就是根據巨集塊的mv複製前一幀中相應的巨集塊。空間內插是根據相鄰的正確接收的塊中畫素點內插估計損壞的塊中畫素點,通常只使用相鄰塊中的邊緣畫素點用於內插估計。為保證重構的影象足夠平滑,在進行時間內插和空間內插時,根據正確接收的dct係數,對內插的畫素點進行調整。此外還有乙個空間內插方法是使用pocs,但由於它通過迭代的過程進行,不適合實時應用,故不多加討論。
3.編解碼器之間的互動錯誤控制
通過編碼器和解碼器的互動進行錯誤控制是乙個有效的方法。當在編碼器和解碼器之間建立乙個反饋通道時,解碼器可以通知編碼器哪塊資料損壞,這樣編碼器可相應調整操作來抑制甚至消除錯誤造成的影響。
如果網路的時延允許,在實時互動應用中可以採取arq機制,重傳損壞的資訊,只要這些重傳資料在解碼器使用之前到達,就能部分地消除錯誤影響。在使用這種方法時,考慮到實時應用的需求,重傳的資訊應是重要的,且資料量須相對較小。例如arq機制可以與lc相結合,只重傳影象的基本層。
另一種有效利用反饋通道的途徑就是參考幀的選擇(rps)。如果編碼器通過反饋了解某個編碼幀n受到損壞,那麼它可以決定下乙個p幀不使用幀n作為參考幀,而使用更前一幀(已經被解碼器正確接收)。這要求編碼器和解碼器儲存多個過去的解碼幀,使用rps的方法相對於直接使用i幀,效率更高。除了使用更早的幀作為參考幀外,編碼器還可以跟蹤第n幀中損壞的區域對其後d幀的影響,並採取下列某種方法:(1)將幀n+d中將要使用幀n+d-1中的損壞畫素點進行**的區域使用i模式;(2)避免使用幀n+d-1中的損壞區域來**幀n+d;(3)對幀n+1到n+d-1進行與解碼器相同的錯誤隱藏,這樣編碼器中的參考幀在進行幀n+d編碼時將與解碼器一致。
三、h.264中的網路適配層設計和新的錯誤恢復技術
(1)包含對每個片解碼時所需要的引數資料;
(2)防止了起始碼衝突;
(3)對附加增強資訊(sei)的支援;
(4)將編碼片的位元字串在基於位元流的網路上進行傳送的實現框架。
1.h.264中的錯誤恢復工具
h.264對幀內編碼模式內插的改進主要體現在,對何時使用、使用哪種級別、使用多少數量、在什麼位置使用等問題的確定上。h.264使用rdo(率失真優化)的方法確定上述要素,經實驗驗證,這種方法取得了很好的效果。對於rps,h.264的可選擇範圍更廣,並可以使用前向或後向的參考幀,且數量可多達15幀。
在h.264中,使用了三種不同型別的資料分割:(1)幀頭資訊,包括巨集塊型別、量化引數和運動向量,這種分割型別最重要,叫a型分割;(2)幀內分割,又稱b型分割,包括幀內編碼塊模式和幀內係數,該型資料分割要求給定分片的a型分割有效,相對於幀間資訊,幀內資訊能更好地阻止漂移效應,因此它比幀間分割更為重要;(3)幀間分割,即c型分割,它僅包括幀間編碼塊模式和幀間係數,一般情況下它是編碼分片的最大分割槽,幀間分割是最不重要的,它同樣要求給定分片的a型分割有效。當使用資料分割時,源編碼器把不同型別的分割安排在三個不同的緩衝器中,同時分片的尺寸必須進行調整以保證小於網路的mtu(最大傳輸單元)長度,由編碼器而不是nal來實現資料分割。在解碼器上,所有分割用於資訊重建,儘管如此,如果幀內或幀間資訊丟失了,有效的幀頭資訊仍能用於錯誤隱藏,即當巨集塊型別和運動向量有效時,仍可獲得乙個較高的影象重構質量,而僅僅丟失了細節資訊。
h.264中的最後乙個工具是冗餘分片。冗餘分片允許編碼器對同乙個mb採用不同編碼引數進行多次編碼,產生乙個主片和多個冗餘片,其中主片使用較低的qp(因此質量較好)來編碼,而冗餘片使用乙個高qp的方式來編碼,這樣質量粗糙一些但位元速率更低。主片和冗餘片在nal層被封裝到不同的包進行傳輸。解碼器在重構時,首先使用主片,如果它可用就拋棄冗餘片;當主片丟失(比如因為包的丟失)時冗餘片也能被用於重構。rs主要用於更好支援高誤碼的移動環境。
2.nal單元(nalu)
作為nal層的基本處理單元,乙個nalu是乙個包含一定語法元素的可變長位元組字串,它可以攜帶乙個編碼片,a、b、c型資料分割,或者乙個序列或影象引數集。每個nalu由乙個位元組的頭和乙個包含可變長編碼符號的位元組組成。頭部含三個定長比特區,參見圖2:nalu型別(t),nal-reference-idc(r)和隱藏位元位(f)。nalu型別用5bit來代表nalu的32種不同型別,型別1~12是h.264定義的基本型別,型別24~31用於標誌在rtp封裝中nalu的聚合和拆分,其他值保留。r位元用於標誌在重構過程中的重要性,值為0表示沒有用於**參考,值越大,用於**參考的次數越多。f位元預設為0,當網路檢測到nalu中存在位元錯誤(在無線網路環境易出現)時,可將其置為1,主要適用於異質網路環境(如有線無線相結合的環境)。
3.包封裝機制
在h.264中,rtp封裝規範有如下幾個設計原則:
(1)應該低負載,以便小於mtu長度(從100位元組或更少到64千位元組);
(2)應易於區分rtp包的重要性,而不需對包內資料進行解碼;
(3)應能檢測到資料的型別,而不需解碼整個資料流,並能根據編碼流之間的相關性丟棄無用資料,如閘道器應能檢測a型分割的丟失,並能丟棄相應的b型和c型分割;
(4)應支援將乙個nalu拆分為若干個rtp包;
(5)應支援nalu單元聚合,即在乙個rtp包中傳輸超過乙個nalu。h.264的nal概念主要設計用於ip網路,一般直接將nalu頭作為rtp頭,這個功能滿足上述設計原則的1、2、3項。為支援4和5,使用了nalu頭中的型別用於標誌拆分和聚合,這樣所有的拆分和聚合功能都直接基於nalu頭位元組資訊進行,不需對流進行解析就可以完成拆分、聚合和它們各自的逆功能。
h.264中nalu的rtp封裝方案稱為「簡單包」方案,即直接將乙個nalu放進乙個rtp包。一般情況下,vcl不會產生超過mtu尺寸的nal單元。在接收端,解碼器通過rtp序列資訊識別並丟棄應用層的複製包,取出有效rtp包裡的nal單元。基本檔次和擴充套件檔次允許片的無序解碼,這樣在抖動快取中就不必對包進行重新排序;在使用主檔次時,要通過rtp序列資訊來對包進行重新排序。
當網路支援非平衡保護方案時,資料分割是提高錯誤恢復能力而不增加更多開銷的有效方法,通過對資料分割在資訊重構中的重要性來實行分級保護,對a型分割使用最好的保護,而c型分割是盡力而為。當a型分割丟失後,b、c型都不可用,因此乙個rtp接收器可以拋棄那些僅包含b或c型分割的rtp包,這在具體的媒介閘道器中非常有效,即當乙個閘道器判斷a型分割被丟失後,它將拋棄那些屬於同乙個片的b和c型分割,因此可降低網路擁塞。
而當編碼器進行內容預編碼時,由於它不了解底層網路的mtu大小,將產生一些大於mtu尺寸的nalu,同時由於udp資料報不能大於64千位元組,這個限制不適合類似數位相機的應用,所以應用層的拆分方案是rtp封裝方案的必需部分。目前的拆分方案正在ietf的調整之中,下面的功能有望成為rfc標準的一部分:(1)拆分的nalu包按rtp序列增序傳輸;(2)有標示機制用於表明nalu拆分的第乙個和最後乙個拆分塊;(3)存在乙個機制用於檢測在nalu邊界內丟失的拆分塊。一些nalu,如sei nalu或引數集nalu,通常都非常小,最多幾個位元組。將它們和其他的nalu聚合到乙個rtp包,可以減少ip/udp/rtp協議棧的頭開銷,因此包聚合方案是必需的。聚合包存在兩種基本型別:單時戳的聚合包(stap),僅包含乙個時間戳的多個nalu;多時戳的聚合包(mtap),包含多個時間戳的nalu。stap一般用於低時延環境,mtap一般用於高時延環境,比如流應用。
四、結束語
網際網路洩密問題
最近很多網際網路公司和企業相繼被爆出賬號洩密問題。昨天大清早的,我們居然也收到了某 熱心 爆出的我們某產品的 的安全漏洞問題。這個漏洞說白了就是最基礎的sql注入問題,某頁面被sql注入之後能獲得更大的許可權。這種問題大多就是在接受http get或post引數之後,直接拼sql去運算元據庫,沒有對...
網際網路之父 網際網路有兩個與生俱來的問題
開發四年只會寫業務 分布式高併發都不會還做程式設計師?網際網路有著與生俱來的缺陷。但是,如果不是這樣的話,網際網路就可能不會成長為乙個世界級的現象。而這,也正是 網際網路之父 vint cerf 現為google副總裁兼首席網際網路顧問 的看法。cerf 在最近接受 business insider...
什麼在阻擋網際網路應用「稱王」
關於3g發展 終端為王 還是 內容為王 的討論猶在耳邊,現實市場已經給出了答案。智慧型終端迅速發展壯大,終端製造商甚至在一定程度上把控了產業鏈。他們用終端攏住客戶,以應用商店平台招徠開發者,甚至可以從運營商那裡 虎口奪食 反觀移動網際網路應用的發展,不僅沒有出現期望中的 殺手級 應用,而且還受到同質...