H264、H265 NALU结构、组帧

H264

H264数据结构:

在H264结构中,一个视频图像编码后的数据为一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏组成,一个宏块由16*16的YUV数据组成。宏块作为H264编码的基本单元。

1.VCL video coding layer 视频编码层。

2.NAL network abstraction lay 网络抽象层。

VCL是对狠心算法引擎,块,宏块及片的语法级别的定义,它最终输出编码完的数据。

NAL层定义片以上的语法级别(序列参数集和图像参数集,针对网络传输)

H264网络传输的结构:

H264子网络传输的是NALU,NALU的结构是NAL头+RBSP(视频编码数据),实际传输中的数据如图:

NALU头结构

长度1 BYTE

forbidden_bit(1bit):金志伟,初始值为0,当网络发现NAL单元比特错误时可设置该比特为1,以便接受方纠错或丢弃该单元。

nal_reference_bit(2bit):NAL重要性知识,标志NAL单元的重要性,值越大越重要,解码器在解码处理不过来的时候,可以丢掉重要性为0的NALU。

nal_unit_type(5bit):知识NALU的类型,需要关注的类型 5 IDR , 6 视频序列解码的增强信息 7 SEI

序列参数集(SPS) 8图像参数集(PPS)

 切片结构:

 几种分包格式:

STAP(STAP-A/B)一个RTP包中携带多个NALU单元,这些NALU的时间戳都一直。

MTAP一个RTP包中携带多个NALU单元,这些NALU的时间戳都不一直。

FU(FU-A/B)一个NALU由多个RTP包携带。

FU-A封包

分包目的:图像经过编码器产生NALU后,其数据很可能大于UDP所能携带的最大负载长度(受MTU大小限制),所以一个NALU会被分到多个RTP包中携带。

 FU indicator结构:

F: 指示NALU是否有错误

NRI:指示该NALU的正确性

TYPE:指示该NALU的分包模式,FU-A值为28.

FU header结构:

S标识开始,E标识结束,TYPE标识NALU类型。

 H265

nal_uint_header(){

        forbidden_zero_bit:1

        nal_unit_type:u(6)

        nuh_layer_id:u(6)

        nuh_temporal_id_plus1:u(3)

}

NALU的类型,主要关注的类型:VPS32,SPS 33, PPS 34 IDR_W_RADL 19

·关注码流的顺序: VPS SPS PPS IDR(IDR_W_RADL)

FU-A

 FU NAL HDR

结构等同于NALU header的,但是type字段与H264 FU indicator的type字段一样,指示的是封包方式FU-A 49 STAP 48

FU HEADER = H264

猜你喜欢

转载自blog.csdn.net/Doubao93/article/details/122444913