H264碼流分析

  1. 編碼器編碼出的H264碼流格式默認為字節(jié)流AnnexB格式,如下圖所示每一個NALU單元前都有一個起始碼,起始碼對于一幀的首個NALU為0x00 00 00 01,其余的為0x 00 00 01。
  • image.png

2.一個NALU單元,其由NALU Header 和EBSP組成。NALU Header占位1Byte

SODB:數(shù)據(jù)比特串,h264最原始的編碼數(shù)據(jù)

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

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

image.png
image.png
  • NALU Header說明
字段名 字段大小 字段說明
forbidden_bit 1bit 如果有語法沖突,則為 1。當網(wǎng)絡識別此單元存在比特錯誤時,可將其設為 1,以便接收方丟掉該單元
nal_reference_bit 2bit 用來指示該NALU 的重要性等級。值越大,表示當前NALU越重要。具體大于0 時取何值,沒有具體規(guī)定。
nal_unit_type 5bit
image.png
  • 常用nalu_type:
NALU類型 重要程度 nalu_type
0x67 (0 11 00111) SPS 非常重要 type = 7
0x68 (0 11 01000) PPS 非常重要 type = 8
0x65 (0 11 00101) IDR幀 關鍵幀 非常重要 type = 5
0x61 (0 11 00001) I幀 重要 type=1 非IDR的I幀不大常見
0x41 (0 10 00001) P幀 重要 type = 1
0x01 (0 00 00001) B幀 不重要 type = 1
0x06 (0 00 00110) SEI 不重要 type = 6
image.png

從前面的分析我們知道,VCL層出來的是編碼完的視頻幀數(shù)據(jù),這些幀可能是I、B、P幀,而且這些幀可能屬于不同的序列,再者同一個序列還有相對應的一套序列參數(shù)集和圖片參數(shù)集等等,所以要完成視頻的解碼,不僅需要傳輸VCL層編碼出來的視頻幀數(shù)據(jù),還需要傳輸序列參數(shù)集、圖像參數(shù)集等數(shù)據(jù)。

參數(shù)集:包括序列參數(shù)集 SPS 和圖像參數(shù)集 PPS

  • SPS 包含的是針對一連續(xù)編碼視頻序列的參數(shù),如標識符 seq_parameter_set_id、幀數(shù)及 POC 的約束、參考幀數(shù)目、解碼圖像尺寸和幀場編碼模式選擇標識等等。
  • PPS對應的是一個序列中某一幅圖像或者某幾幅圖像,其參數(shù)如標識符 pic_parameter_set_id、可選的 seq_parameter_set_id、熵編碼模式選擇標識、片組數(shù)目、初始量化參數(shù)和去方塊濾波系數(shù)調(diào)整標識等等。
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容