H.264编码原理以及I帧B帧P帧

H.264编码原理以及I帧B帧P帧
前言
-----------------------
H264是新一代的编码标准 , 以高压缩高质量和支持多种网络的流媒体传输著称 , 在编码方面 , 我理解的他的理论依据是:参照一段时间内图像的统计结果表明 , 在相邻几幅图像画面中 , 一般有差别的像素只有10%以内的点,亮度差值变化不超过2% , 而色度差值的变化只有1%以内 。所以对于一段变化不大图像画面 , 我们可以先编码出一个完整的图像帧A , 随后的B帧就不编码全部图像 , 只写入与A帧的差别 , 这样B帧的大小就只有完整帧的1/10或更小!B帧之后的C帧如果变化不大 , 我们可以继续以参考B的方式编码C帧 , 这样循环下去 。这段图像我们称为一个序列(序列就是有相同特点的一段数据) , 当某个图像与之前的图像变化很大 , 无法参考前面的帧来生成 , 那我们就结束上一个序列 , 开始下一段序列 , 也就是对这个图像生成一个完整帧A1 , 随后的图像就参考A1生成 , 只写入与A1的差别内容 。
在H264协议里定义了三种帧 , 完整编码的帧叫I帧 , 参考之前的I帧生成的只包含差异部分编码的帧叫P帧 , 还有一种参考前后的帧编码的帧叫B帧 。
H264采用的核心算法是帧内压缩和帧间压缩 , 帧内压缩是生成I帧的算法 , 帧间压缩是生成B帧和P帧的算法 。
 
----------------------
序列的说明
----------------------
在H264中图像以序列为单位进行组织 , 一个序列是一段图像编码后的数据流 , 以I帧开始 , 到下一个I帧结束 。
一个序列的第一个图像叫做 IDR 图像(立即刷新图像) , IDR 图像都是 I 帧图像 。H.264 引入 IDR 图像是为了解码的重同步 , 当解码器解码到 IDR 图像时 , 立即将参考帧队列清空 , 将已解码的数据全部输出或抛弃 , 重新查找参数集 , 开始一个新的序列 。


    推荐阅读