视频的传输,如果是传输全部的图像帧,即按照无损压缩的方式传输,其数据量之巨大对于网络和存储都是难以支撑的。通过对视频进行压缩,可以节约很多带宽和存储空间,达到高效发送的目的。于是,H.264等视频压缩标准应运而生了。
H.264是指视频的压缩标准,是一个需要许可证才能使用的开放标准。利用H.264编码技术,可以实现视频在高清晰度的基础上,减少体积,进而减少上行带宽传输的压力。
究竟在保证视频质量的基础上,是如何做到减少视频数据量的呢?H.264视频压缩标准采用“差分编码”技术减少视频数据量。在差分编码中,会将一个帧与参考帧(即前面的I帧或P帧)进行对比,只对那些相对于参考帧来说发生了变化的像素进行编码。
如下图,使用差分编码,只有第一个图像(I帧)是将全帧图像信息进行编码,第二、三幅图像,只对变化的部分进行编码。
这就是H.264差分编码的基本原理,可以高效发送数据。基于这种原理,产生了I帧、P帧和B帧。
H.264中,视频图像以序列为单位进行传输,一个序列是一段内容差别不大的图像编码后生成的一串数据流,以I帧开始,到下一个I帧结束。
IDR帧:一个序列的第一帧图像叫做IDR帧,它也是I帧,只是因为要求一个序列的首个I帧必须和其它I帧区别开,所以才把第一个I帧叫IDR帧,方便控制编码和解码流程。从IDR帧开始,重新定义一个新的序列。
I帧:称为帧内编码帧,是关键帧。它完整保存了一帧画面的全部数据。解码时,只需要本帧数据就可以完成,无需参考其它帧。
P帧:称为前向预测编码帧,它根据这一帧与相邻的前一帧(I帧或P帧)的差别来压缩本帧数据。解码时,需要用之前帧缓存的画面叠加上本帧定义的差值,生成最终画面。
B帧:称为双向预测内插编码帧,是双向差别帧,也就是B帧记录本帧与前面的I或P帧和后面的P帧的差值。要解码B帧,不仅要取得之前帧的缓存画面,还要解码之后帧的画面,通过前后帧画面与本帧数据的叠加取得最终的画面。