美文网首页
H265,264码流结构差异

H265,264码流结构差异

作者: 六两 | 来源:发表于2022-01-22 11:00 被阅读0次

    原文地址
    https://blog.csdn.net/u011003120/article/details/83411445

    H264

    在H264中,每一个前缀码后面跟随的第一个字节即为NALU的语法元素,主要有三部分组成:
    forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)

    所以,在H264中,我们如果需要获取NALU的类型,则可以通过以下方式进行解析:

    nalu_type = first_byte_in_nal & 0x1F
    

    nalu_type如下所示:

    image.png

    H265

    而在H265中,每一个前缀码后面跟随的前两个字节为NALU的语法元素,主要有四部分组成:

    forbidden_zero_bit(1):nal_unit_type(6):nuh_layer_id(6):nuh_temporal_id_plus1(3)
    

    在文档中定义如下:


    image.png

    可以看到,NALU的语法元素由H264的一个字节变为两个字节,而nal_unit_type则为NALU的类型,因此我们可以通过以下获取NALU的类型:

    int type = (code & 0x7E)>>1;
    

    type的定义值如下:


    image.png
    image.png

    上图,即为H265的NALU的TYPE,这里可以将上面的type简单的理解为如下我们需要的类型:
    VPS=32 SPS=33 PPS=34 IDR=19 P=1 B=0

    实例分析

    如下,为265的头部信息


    image.png

    如上我们看到了四个NALU包,每个NALU的头部信息为:

    ① 00 00 00 01 40 01  ---> (0x40 & 0x7E)>>1 = 32 ---> VPS
    ② 00 00 00 01 42 01  ---> (0x42 & 0x7E)>>1 = 33 ---> SPS
    ③ 00 00 00 01 44 01  ---> (0x44 & 0x7E)>>1 = 34 ---> PPS
    ④ 00 00 00 01 26 01  ---> (0x26 & 0x7E)>>1 = 19 ---> IDR
    

    通过以上头结构也可以看到,NALU的与语法元素中,forbidden_zero_bit通常为0,nuh_layer_id通常为0,nuh_temporal_id_plus1通常为1

    相关文章

      网友评论

          本文标题:H265,264码流结构差异

          本文链接:https://www.haomeiwen.com/subject/apsuhrtx.html