天天看點

H265和H264的NALU頭部分析

與H.264/AVC類似,H.265/HEVC也采用視訊編碼層(VCL)和網絡适配層(NAL)的雙層架構。

下圖展示了視訊碼流的處理過程,h264或h265就用在視訊碼流資料階段。

H265和H264的NALU頭部分析

參考自:https://blog.csdn.net/leixiaohua1020/article/details/50534369

最近用到在nalu頭中擷取特定NAL_TYPE資訊,特此記錄。

NALU為壓縮視訊資料的基本機關,也是後續視訊傳輸的基本機關,它由一組對應于視訊編碼資料的 NALU頭資訊和一個原始位元組序列載荷(RBSP)組成。壓縮視訊比特流由一個個連續排列的NALU組成,如下圖所示。

H265和H264的NALU頭部分析

每個NALU之間通過起始碼進行分隔,起始碼分成兩種:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU對應的Slice為一幀的開始(即視訊流的首個NALU)就用0x00000001,否則就用0x000001。

nalu type在碼流中的欄位與類型定義

h265

h265的NALU頭由2位元組構成,分成4部分,具體如下圖所示:

H265和H264的NALU頭部分析

nal_unit_type為6比特,取值範圍是[0,63],用來辨別目前NALU載荷資訊的内容特性,計算方法如下。

int nalu_type = (buf[0] & 0x7E)>>1;
//or
int nalu_type = (buf[0] >> 1) & 0x3F;
           

其中,buf[0]為分隔符之後的第一個位元組。

下圖給出了NALU類型與載荷RBSP内容資訊的關系。

H265和H264的NALU頭部分析

注意:若nal_unit_type取值在48~63之間,表示其語義尚未明确,不會影響解碼過程。

h264

h265的NALU頭由1位元組構成,分成3部分,具體如下圖所示:

H265和H264的NALU頭部分析

nal_unit_type為5比特,取值範圍是[0,31],計算方法如下。

int nalu_type = buf[0] & 0x1F;
           

具體的NALU類型如下圖所示。

H265和H264的NALU頭部分析

繼續閱讀