HEVC码流解析
程序员文章站
2022-03-22 20:51:46
...
根据《T-REC-H.265-201504-I!!PDF-E》协议描述。
一,HEVC的码流格式定义
字节流格式由字节流NAL 单元语法结构序列构成。每一字节流NAL 单元语法结构包含有一个起始编码前缀,后面跟随一个nal_unit(NumBytesInNALunit)语法结构。它可能(一定情况下,它应该)包含一个额外的zero_byte 语法元素。它也可能包含一个或多个额外的trailing_zero_8bits 语法元素。当为第一个字节流NAL 单元时,也可能包含一个或多个额外的leading_zero_8bits语法元素。
二,NAL_TYPE定义
/**
* Table 7-1: NAL unit type codes
*/
enum HEVCNALUnitType {
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_RADL_N = 6,
HEVC_NAL_RADL_R = 7,
HEVC_NAL_RASL_N = 8,
HEVC_NAL_RASL_R = 9,
HEVC_NAL_VCL_N10 = 10,
HEVC_NAL_VCL_R11 = 11,
HEVC_NAL_VCL_N12 = 12,
HEVC_NAL_VCL_R13 = 13,
HEVC_NAL_VCL_N14 = 14,
HEVC_NAL_VCL_R15 = 15,
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_IRAP_VCL22 = 22,
HEVC_NAL_IRAP_VCL23 = 23,
HEVC_NAL_RSV_VCL24 = 24,
HEVC_NAL_RSV_VCL25 = 25,
HEVC_NAL_RSV_VCL26 = 26,
HEVC_NAL_RSV_VCL27 = 27,
HEVC_NAL_RSV_VCL28 = 28,
HEVC_NAL_RSV_VCL29 = 29,
HEVC_NAL_RSV_VCL30 = 30,
HEVC_NAL_RSV_VCL31 = 31,
HEVC_NAL_VPS = 32,
HEVC_NAL_SPS = 33,
HEVC_NAL_PPS = 34,
HEVC_NAL_AUD = 35,
HEVC_NAL_EOS_NUT = 36,
HEVC_NAL_EOB_NUT = 37,
HEVC_NAL_FD_NUT = 38,
HEVC_NAL_SEI_PREFIX = 39,
HEVC_NAL_SEI_SUFFIX = 40,
};
三,实例分析
1,截取一段HEVC视频码流
2,elecard对应该段码流的分析结果。
3,具体分析说明:
第一个NALU:0x00000001 NAL起始码 0x40>>1,0x20,十进制32,为NAL_VPS(Video Parameter Set视频参数集)。
第二个NALU:0x00000001 NAL起始码 0x42>>1,0x21,十进制33,为NAL_SPS(Sequence Parameter Set序列参数集)。
第三个NALU:0x00000001 NAL起始码 0x44 >> 1,0x22,十进制34,为NAL_PPS(Picture Parameter Set图像参数集)。
第四个NALU:0x00000001 NAL起始码 0x4E >> 1,0x27,十进制39,为NAL_SEI_PREFIX(Supplemental enhancement information)
第五个NALU:0x00000001 NAL起始码 0x26 >> 1,0x13,十进制19, 为NAL_IDR_W_RADL(Instantaneous decoding refresh)