H264是一种针对视频的压缩编码方式。
一、压缩方法
H264主要基于以下几种方法,将数据进行压缩:
1.帧内预测压缩:解决空间域数据冗余的问题
2.帧间预测压缩:(运动估计与补偿)解决时间域数据冗余的问题
3.整数离散余弦变换(DCT):将空间上的相关性转换为频域上的无关性,然后量化
二、压缩后数据
压缩后,H264文件由I帧、B帧、P帧和GOP图像序列组成。
I帧:关键帧,由帧内压缩得到
B帧:双向预测帧,由帧间压缩得到,压缩时既考虑前面的帧,又考虑后边的帧
P帧:前向预测帧,由帧间压缩得到,压缩时只考虑前面处理的帧
GOP图像序列:由一个关键帧(I 帧)和后续的若干预测帧(P 帧和 B 帧)组成
三、H264组成
H264由网络提取层 + 视讯编码层这两层组成。
1.网络提取层(NAL):网络编码后产生的数据流。通过NAL的第一个字节可以判断帧的类型
2.视讯编码层(VCL):是一个过程的汇总,由数据通过压缩编码得到NAL的过程,称为VCL
四、码流结构
视频数据序列被压缩后形成VCL数据,VCL数据要封装在NAL单元中才可以传输。
SPS:序列参数集,作用于一系列连续的编码图像
PSS:图像参数集,作用于编码视频序列中一个或多个独立图像
上图中的NALU可以分为两种:VCL类型 和 非VCL类型
五、IDR帧
IDR帧,一种特殊的I帧。
一般由于B和P帧都需要参考前后帧进行压缩,因此缓冲区中总保存着前后帧的信息。当解码器接收到当前是IDR帧时,会清空当前缓冲区,找到第一个IDR帧,并重新解码。
每一个GOP的第一个帧就是IDR帧。(当图像差异过大时,会出现IDR帧)