與H.264/AVC類似,H.265/HEVC也采用視訊編碼層(VCL)和網絡适配層(NAL)的雙層架構。
下圖展示了視訊碼流的處理過程,h264或h265就用在視訊碼流資料階段。
參考自:https://blog.csdn.net/leixiaohua1020/article/details/50534369
最近用到在nalu頭中擷取特定NAL_TYPE資訊,特此記錄。
NALU為壓縮視訊資料的基本機關,也是後續視訊傳輸的基本機關,它由一組對應于視訊編碼資料的 NALU頭資訊和一個原始位元組序列載荷(RBSP)組成。壓縮視訊比特流由一個個連續排列的NALU組成,如下圖所示。
每個NALU之間通過起始碼進行分隔,起始碼分成兩種:0x000001(3Byte)或者0x00000001(4Byte)。如果NALU對應的Slice為一幀的開始(即視訊流的首個NALU)就用0x00000001,否則就用0x000001。
nalu type在碼流中的欄位與類型定義
h265
h265的NALU頭由2位元組構成,分成4部分,具體如下圖所示:
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内容資訊的關系。
注意:若nal_unit_type取值在48~63之間,表示其語義尚未明确,不會影響解碼過程。
h264
h265的NALU頭由1位元組構成,分成3部分,具體如下圖所示:
nal_unit_type為5比特,取值範圍是[0,31],計算方法如下。
int nalu_type = buf[0] & 0x1F;
具體的NALU類型如下圖所示。