天天看點

H.264/H265的NAL解析1、H.264的NAL解析

1、H.264的NAL解析

    在有序位元組流格式的H.264碼流中,我們可以根據字首起始碼0x 00 00 01或0x 00 00 01擷取到一個完整的NAL Unit所包含的的位元組資料。H.264碼流中的每一個NAL Unit的作用并不是相同的,而是根據不同的類型起不同的作用。是以将H.264的碼流解析為NAL Unit之後,下一步将是對NAL Unit中的資料進行解析。

NAL Unit結構

H.264标準中規定的一個NAL Unit的結構如下圖:

H.264/H265的NAL解析1、H.264的NAL解析

一個NAL Unit都是由一個NAL Header和一個NAL Body組成。對于基本版本的H.264标準(不考慮SVC和MVC擴充),一個NAL Header的長度固定為1,即8bit。這8bit的含義分别為:

forbidden_zero_bit:每一個NAL Header的第一個bit,規定必須為0;

nal_ref_idc:第2和3位,主要表示NAL的優先級。當該值為正時,表示目前NAL Unit中包含了SPS、PPS和作為參考幀的Slice等重要資料。

nal_unit_type:表示NAL Unit的類型,包括VCL層和非VCL層的多種資料類型。常見的nal_unit_type取值有:7表示SPS,8表示PPS,5表示IDR幀,1表示非IDR幀等。

2、H.265的NAL解析

首先來介紹下h265(HEVC)nal單元頭,與h264的nal層相比,h265的nal unit header有兩個位元組構成

H.264/H265的NAL解析1、H.264的NAL解析

從圖中可以看出hHEVC的nal包結構與h264有明顯的不同,hevc加入了nal所在的時間層的ID,取去除了nal_ref_idc,此資訊合并到了naltype中,

通常情況下F為0,layerid為0,  TID為1。

H265 幀類型判斷:和H264的&0x1f不同。H265是 :int type = (code & 0x7E)>>1;

#define HEVC_VPS  0x40

#define HEVC_SPS  0x42

#define HEVC_PPS  0x44

#define HEVC_SEI  0x4E

#define HEVC_IDR  0x26

#define HEVC_PSLICE  0x02

繼續閱讀