分层
NAL 层(网络抽象层)用于网络传输的层
纠错、乱序、知道包的起始和结束
VCL层(视屏数据编码层)
视屏帧序列
一般一个图像一个slice, 但也可以一张图像可以分很多slice,方便传输。涉及到很多编码的东西。
一个视频有很多帧组成,帧是压缩后的图像。每个帧是由一个或多个slice组成,每个slice有多个宏块组成。
码流的基本概念
SODB 原始数据流,长度不一定是8的整数倍
RBSP 字节对齐流,SODB 字节流不对齐(8的整数倍)补1或补多个0
NALU
NAL Header(1B)+RBSP
Annexb 格式: 保存为文件格式,可以播放,startcode 每个NAL单元标志
RTP 格式:网络传输
总结:
1:一个NAL单元最多就一个slice(片),因为还有其他类型的NAL,
比如nal_unit_type字段的值为7时是表示sps序列参数集,
值为8时是表示PPS 图形参数集。
2、
H264的编码方式有两种:帧编码(Frame)和场编码(Interlace)
其中,帧编码一般一个NAL单元就一个图像Slice,场编码则由顶场和底场构成,
每个NAL单元可能包含多个图像SLICE片,也有可能就一个,但只有同一个Frame_Num的顶场和底场,
才能构成一幅完整图像。
因此,一帧不一定就是一个NAL单元,一帧可能有多个NAL单元组成。
一帧里面可能有多个NAL单元(也就是slice)。
3、NAL单元的头信息中的nal_unit_type字段我们能知道当前类型是sps,pps和IDR类型。
4、slice 片的头部信息可以判断帧类型
5、判断IDR、I、P、B的类型,就是通过SLICE_HEADER的信息来看,看它的SLICE_TYPE是哪种
6、对于H.264来说1个AVPacket的data通常对应一个NAL。