一 NALU頭部解析
F: 必須為0,為1表示語法錯誤。整包將被丟棄
NalType:nalu包的類型,其中VCL NAL和non-VCL NAL各有32類。0-31是vcl nal單元;32-63,是非vcl nal單元。VCL是指攜帶編碼數據的數據流,而non-VCL則是控制數據流.
LayerId:表示NAL所在的Access unit所屬的層,該字段是為了HEVC的繼續擴展設置。也就是目前都是0,以后的擴展可能會用到。
TID:
此字段指定nal單元加1的時間標識符。時間id的值等於tid-1,tid的值為0是非法的,以確保nal單元報頭中至少只有一個比特等於1,以便能夠在nal單元頭和nal單元有效負載數據中獨立考慮啟動代碼仿真。
當head為40 01 ====》0100 0000 0000 0001時,解析如下
F | 0 | |
NalType | 100 0000 | 32/VPS |
LayerId | 0 0000 0 | 0 |
TID | 001 | 1 |
二 NALU type 解析nalu type的計算方式
在每一幀的起始碼(00 00 00 01)之后取到nalu頭部code 兩個字節
用該公式計算nalutype :int type = (code & 0x7E)>>1;Nalu type
val nal
non-vcl nalu
常用nalu type
語義為視頻參數集 VPS
HEVC_NAL_VPS 32
語義為序列參數集 SPS
HEVC_NAL_SPS 33
語義為圖像參數集 PPS
HEVC_NAL_PPS 34
語義為補充增強信息 SEI
HEVC_NAL_SEI_PREFIX 39HEVC_NAL_SEI_SUFFIX 40
視頻幀數據流IDR ------ 下列均為視頻幀,若要區分I B P 需要進一步分析
HEVC_NAL_TRAIL_N 0
HEVC_NAL_TRAIL_R 1
HEVC_NAL_TSA_N 2
HEVC_NAL_TSA_R 3
HEVC_NAL_STSA_N 4
HEVC_NAL_STSA_R 5
HEVC_NAL_BLA_W_LP 16
HEVC_NAL_BLA_W_RADL 17
HEVC_NAL_BLA_N_LP 18
HEVC_NAL_IDR_W_RADL 19
HEVC_NAL_IDR_N_LP 20
HEVC_NAL_CRA_NUT 21
HEVC_NAL_RADL_N 6
HEVC_NAL_RADL_R 7
HEVC_NAL_RASL_N 8
HEVC_NAL_RASL_R 9
SPS PPS和VPS的關系
三 參考代碼
h265nalu頭部的解析可參考ffmpeg代碼
hevc_parser.c的parse_nal_units函數