H265和H264的NALU头部分析

与H.264/AVC类似,H.265/HEVC也采用视频编码层(VCL)和网络适配层(NAL)的双层架构。

下图展示了视频码流的处理过程,h264或h265就用在视频码流数据阶段。

H265和H264的NALU头部分析_第1张图片

参考自: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部分,具体如下图所示:

H265和H264的NALU头部分析_第2张图片

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头部分析_第3张图片

注意:若nal_unit_type取值在48~63之间,表示其语义尚未明确,不会影响解码过程。

h264

h265的NALU头由1字节构成,分成3部分,具体如下图所示:

H265和H264的NALU头部分析_第4张图片

nal_unit_type为5比特,取值范围是[0,31],计算方法如下。

int nalu_type = buf[0] & 0x1F;

具体的NALU类型如下图所示。

H265和H264的NALU头部分析_第5张图片

你可能感兴趣的:(视音频数据处理)