SPS:序列参数集,SPS中保存了一组编码视频序列(Coded video sequence)的全局参数。
PPS:图像参数集,对应的是一个序列中某一副图像或者某几副图像的参数。
I帧:帧内编码,可独立解码生成完整的图片
P帧:前向预测编码帧,需要参考其前⾯的⼀个I 或者B 来⽣成⼀张完整的图⽚。
B帧: 双向预测内插编码帧,则要参考其前⼀个I或者P帧及其后⾯的⼀个P帧来⽣成⼀张完整的图⽚。
IDR帧(即时转码刷新):一个系列的第一个图像,一般都是I帧,但I帧不一定都是IDR帧、IDR之后的图像永远不会使用IDR之前的图像来解码
GOP:两个I帧的距离
Reference(参考周期):两个P帧的距离
注:
发I帧之前至少发一次sps和pps
Nalu:network abstract layer unit,H.264原始码流(裸流)是由⼀个接⼀个NALU组成,它的功能分为两层,VCL(视频编码层)和 NAL(⽹络提取层)
VCL:包括核⼼压缩引擎和块,宏块和⽚的语法级别定义,设计⽬标是尽可能地独⽴于⽹络进⾏⾼效的编码。
NAL:负责将VCL产⽣的⽐特字符串适配到各种各样的⽹络和多元环境中,覆盖了所有⽚级以上的语法级别。
在VCL进⾏数据传输或存储之前,这些编码的VCL数据,被映射或封装进NAL单元。下面是一个NALU的组成:
⼀个NALU = ⼀组对应于视频编码的NALU头部信息 + ⼀个原始字节序列负荷(RBSP, Raw Byte Sequence Payload).
NALU解析:
H.264标准指出,当数据流是储存在介质上时,在每个NALU 前添加起始码:0x000001 或 0x00000001,⽤来指示⼀个NALU 的起始和终⽌位置:
在这样的机制下,在码流中检测起始码,作为⼀个NALU得起始标识,当检测到下⼀个起始码时,当前NALU结束。
3字节的0x000001只有⼀种场合下使⽤,就是⼀个完整的帧被编为多个slice(⽚)的时候,包含这些slice的NALU 使⽤3字节起始码。其余场合都是4字节0x00000001的。
type &0x1f==0x7是sps
type &0x1f==0x8是pps