H264标准中的基本概念和常识:

1I帧、B帧、P帧、IDR

I帧(关键帧),I帧仅仅进行帧内编码,因此I帧可以无需其他参考帧就可以解码出来。视频序列中第一帧都是I帧。I帧用来作为P帧和B帧的参考帧,因此I帧码流出现问题,可以造成一个GOP组的P帧和B帧解码出错。I帧可以用来快进快退以及其他的随机访问操作,I帧另外一个作用就是帮助场景切换时,重置画面质量,当场景进行切换时,可以切换I帧从而更加高效的压缩P帧和B帧(当然这要求编码器要有场景切换检测功能)。由于I帧仅仅进行帧内预测,没有进行运动估计等帧间预测,因此编码I帧码率比较高。

P帧(预测帧),P帧需要以前面的I帧或者P帧作为参考进行帧间预测,注意P帧仅仅参考它前面的最靠近它的I帧或者P帧进行帧间预测。编码端在参考帧中找到P帧某点的预测值以及运动矢量,相减获取预测差值,将差值和运动矢量进行编码后传输。在H.264基本配置中仅仅存在I帧和P帧,不存在B帧。

B帧(双向预测帧)需要参考前面和后面的I帧或者P帧进行帧间预测编码(如下图所示);

 

IDR帧实质也是I帧,在H.264中规定了两种类型的I帧:normal I framesIDR frames。对于IDR帧,所有位于IDR帧后的B帧和P帧都不能参考IDR帧以前的帧。而普通I帧,I帧后的B帧和P帧仍然可以参考I帧之前的其他帧。I帧的随机访问功能是由IDR帧来承担,一个新的IDR帧开始,可以算是一个新的视频序列开始(IDR帧会导致DPB(参考帧列表)清空),因此我们常常将一个序列的第一个I帧作为IDR帧。在视频中插入IDR帧,是媒体互动(随机访问)成为可能,对于一个视频中没有IDR帧,这个视频视频是不能随机访问的。

2H.264中量化参数QP和量化步长QStep的关系

         对于亮度编码而言,量化步长QStep总共有52个值,而量化参数QP就是QStep的序号(0-51)。

3I帧、B帧、P帧的编码流程:

摘自网络(http://www.cppblog.com/elva/archive/2010/03/19/110082.html),正确性有待考证。

I 帧编码的基本流程为:

(1) 进行帧内预测,决定所采用的帧内预测模式。

(2) 像素值减去预测值,得到残差。

(3) 对残差进行变换和量化。

(4) 变长编码和算术编码。

(5) 重构图像并滤波,得到的图像作为其它帧的参考帧。

 

P 帧和 B 帧编码的基本流程为:

(1) 进行运动估计,计算采用帧间编码流程编码模式的率失真函数()值。P

只参考前面的帧,B 帧可参考后面的帧。

*(2) 进行帧内预测,选取率失真函数值最小的帧内模式与帧间模式比较,确定

采用哪种编码模式。

(3) 计算实际值和预测值的差值。

(4) 对残差进行变换和量化。

(5) 熵编码,如果是帧间编码模式,编码运动矢量

你可能感兴趣的:(网络,2010,h.264)