天天看點

H264協定簡介

本文簡單介紹一下H264協定内容,都是項目中具體使用的,太詳細的不必介紹了,需要詳讀協定。

首先需要明确H264可以分為兩層:

1.VCL  video codinglayer       視訊編碼層

2.NAL  network abstraction layer  網絡提取層

對于VCL具體的編解碼算法這裡就不介紹了,隻介紹常用的NAL層,即網絡提取層,在demux的時候常用。這裡面包含了該視訊的一些metadata詳細資訊,是解碼的基礎。

首先每一幀的NAL單元的區分有兩種方式:

1.通過位元組區分,前四個位元組為size,後面緊跟資料,以此類推,過完size數後的四個位元組是下一個NAL單元的size,後面緊跟資料。

2.通過特殊字元确認,00 00 01(一般情況)或者00 00 00 01(NAL單元是一幀的開始)來區分NAL單元。

官方文檔解析NAL單元的表格如下:

H264協定簡介

比如一幀的開始是00 00 00 01 67,那麼00 00 00 01作為區分NAL單元的一個區分位,可以去掉。正式的NAL type是後面的67(16進制),二進制為:0110 0111 

其中第一位是:Forbidden_zero_bit=0;

之後兩位是:Nal_ref_idc:表示NAL的優先級。0~3,取值越大,表示目前NAL越重要,需要優先受到保護。如果目前NAL是屬于參考幀的片,或是序列參數集,或是圖像參數集這些重要的機關時,本句法元素必需大于0。

後五位是:Nal_unit_type:目前NAL 單元的類型,參照上面表格中來确認類型。其中6和7比較重要,也就是所謂的PPS,SPS,包含了詳細的metadata資訊,是解碼的基礎。

繼續閱讀