SODP RBSP

  H.264 的功能分爲兩層:視頻編碼層(VCL, Video Coding Layer)和網絡提取層(NAL,Network Abstraction Layer)。VCL 數據即編碼處理的輸出,它表示被壓縮編碼後的視頻數據序列。

  VCL存在三種封裝形式:SODB, RBSP, EBSP.

SODB:數據比特串,即編碼後的最原始的數據;

RBSP:原始字節序列載荷,即在SODB的後面添加了trailing bits,即一個bit 1和若干個bit 0,以便字節對齊;

EBSP:擴展字節序列載荷,即在RBSP的基礎上添加了仿校驗字節0x03.----annexb

二、聯繫、區別與作用

SODB是編碼收的原始數據,經過封裝後爲RBSP,RBSP是NAL單元的數據部分的封裝格式。在NAL內部爲了防止與起始碼競爭,從而引入填充字節0x03,這樣便形成了EBSP。

1、RBSP的形成過程

如果SODB的內容是空的,那麼RBSP的內容也是空的;

否則,RBSP的第一個字節取自SODB的第1到第8個比特,RBSP字節內部按照從左到右從高到低的順序排列。以此類推,RBSP中的每個字節都直接取自SODP的相應比特。RBSP的最後一個字節包含SODB的最後幾個比特,以及trailing bits。其中,trailing bits的第一個比特爲1,其餘的比特爲0,保證字節對齊。最後,在結尾添加0x0000,即CABAC ZERO WORD,從而形成RBSP。

2、EBSP的形成過程

NALU數據+起始碼就形成了AnnexB格式,起始碼包括兩種,0x00000001和0x000001。爲了不讓NALU的主體與起始碼之間產生競爭,在對RBSP進行掃描時,如果遇到連續的兩個0x00字節,則在該兩個字節後面添加一個0x03字節。在解碼的時候將該0x03字節去掉,也成爲脫殼操作。

通過該種方式形成EBSP,這需要將近兩倍的整幀圖像碼流大小。爲了減少存儲器需求,在每個macroblock結束後,即檢查該macroblock的SODB的起始碼競爭問題,並保留SODB的最後兩個字節的零字節個數,以便與下一個macroblock的SODB的開始字節形成連續的起始碼競爭檢測。對一幀圖像的最後一個macroblock,先添加結尾停止bit,在檢查起始碼競爭。


注:起始碼包括兩種情況,即4字節和3字節。在SPS、PPS和Access Unit的第一個NALU使用4字節起始碼,其餘情況均使用3字節起始碼。


起始碼:如果NALU 對應的Slice 爲一幀的開始,則用4 字節表示,即0x00000001;否則用3 字節表示,0x000001。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章