h.264碼流打包分析

 
H264碼流打包分析

SODB 數據比特串-->最原始的編碼數據

RBSP 原始字節序列載荷-->在SODB的後面填加了結尾比特(RBSP trailing bits 一個bit“1”若干比特“0”,以便字節對齊。

EBSP 擴展字節序列載荷-- >在RBSP基礎上填加了仿校驗字節(0X03)它的原因是: 在NALU加到Annexb上時,需要填加每組NALU之前的開始碼 StartCodePrefix,如果該NALU對應的slice爲一幀的開始則用4位字節表示,ox00000001,否則用3位字節表示 ox000001.爲了使NALU主體中不包括與開始碼相沖突的,在編碼時,每遇到兩個字節連續爲0,就插入一個字節的0x03。解碼時將0x03去掉。 也稱爲脫殼操作。

h264的功能分爲兩層,視頻編碼層(VCL)和網絡提取層(NAL)

        VCL數據即被壓縮編碼後的視頻數據序列。在VCL數據要封裝到NAL單元中之後,纔可以用來傳輸或存儲。NAL單元格式如下圖:
   
Nal頭
EBSP
Nal頭
EBSP
Nal頭
EBSP

NAL單元
    每個NAL單元是一個一定語法元素的可變長字節字符串,包括包含一個字節的頭信息(用來表示數據類型),以及若干整數字節的負荷數據。一個NAL單元可以攜帶一個編碼片、A/B/C型數據分割或一個序列或圖像參數集。

  NAL單元按RTP序列號按序傳送。其中,T爲負荷數據類型,佔5bit;R爲重要性指示位,佔2個bit;最後的F爲禁止位,佔1bit。具體如下:

  (1)NALU類型位

  可以表示NALU的32種不同類型特徵,類型1~12是H.264定義的,類型24~31是用於H.264以外的,RTP負荷規範使用這其中的一些值來定義包聚合和分裂,其他值爲H.264保留。

  (2)重要性指示位

  用於在重構過程中標記一個NAL單元的重要性,值越大,越重要。值爲0表示這個NAL單元沒有用於預測,因此可被解碼器拋棄而不會有錯誤擴散;值高於0表示此NAL單元要用於無漂移重構,且值越高,對此NAL單元丟失的影響越大。

  (3)禁止位

  編碼中默認值爲0,當網絡識別此單元中存在比特錯誤時,可將其設爲1,以便接收方丟掉該單元,主要 用於適應不同種類的網絡環境(比如有線無線相結合的環境)。例如對於從無線到有線的網關,一邊是無線的非IP環境,一邊是有線網絡的無比特錯誤的環境。假 設一個NAL單元到達無線那邊時,校驗和檢測失敗,網關可以選擇從NAL流中去掉這個NAL單元,也可以把已知被破壞的NAL單元前傳給接收端。在這種情 況下,智能的解碼器將嘗試重構這個NAL單元(已知它可能包含比特錯誤)。而非智能的解碼器將簡單地拋棄這個NAL單元。NAL單元結構規定了用於面向分 組或用於流的傳輸子系統的通用格式。在H.320和MPEG-2系統中,NAL單元的流應該在NAL單元邊界內,每個NAL單元前加一個3字節的起始前綴 碼。在分組傳輸系統中,NAL單元由系統的傳輸規程確定幀界,因此不需要上述的起始前綴碼。一組NAL單元被稱爲一個接入單元,定界後加上定時信息 (SEI),形成基本編碼圖像。該基本編碼圖像(PCP)由一組已編碼的NAL單元組成,其後是冗餘編碼圖像(RCP),它是PCP同一視頻圖像的冗餘表 示,用於解碼中PCP丟失情況下恢復信息。如果該編碼視頻圖像是編碼視頻序列的最後一幅圖像,應出現序列NAL單元的end,表示該序列結束。一個圖像序 列只有一個序列參數組,並被獨立解碼。如果該編碼圖像是整個NAL單元流的最後一幅圖像,則應出現流的end。 

  H.264採用上述嚴格的接入單元,不僅使H.264可自適應於多種網絡,而且進一步提高其抗誤碼能力。序列號的設置可發現丟的是哪一個VCL單元,冗餘編碼圖像使得即使基本編碼圖像丟失,仍可得到較“粗糙”的圖像。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章