转自:http://blog.csdn.net/sphone89/article/details/8086071算法
IDR(Instantaneous Decoding Refresh)--即时解码刷新。 编码
I帧:帧内编码帧是一种自带所有信息的独立帧,无需参考其它图像即可独立进行解码,视频序列中的第一个帧始终都是I帧。 spa
I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其余I帧区别开,因此才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。 IDR帧的做用是马上刷新,使错误不致传播,从IDR帧开始,从新算一个新的序列开始编码。而I帧不具备随机访问的能力,这个功能是由IDR承担。 IDR会致使DPB(DecodedPictureBuffer 参考帧列表——这是关键所在)清空,而I不会。IDR图像必定是I图像,但I图像不必定是IDR图像。一个序列中能够有不少的I图像,I图像以后的图像能够引用I图像之间的图像作运动参考。一个序列中能够有不少的I图像,I图像以后的图象能够引用I图像之间的图像作运动参考。 .net
对于IDR帧来讲,在IDR帧以后的全部帧都不能引用任何IDR帧以前的帧的内容,与此相反,对于普通的I-帧来讲,位于其以后的B-和P-帧能够引用位于普通I-帧以前的I-帧。从随机存取的视频流中,播放器永远能够从一个IDR帧播放,由于在它以后没有任何帧引用以前的帧。可是,不能在一个没有IDR帧的视频中从任意点开始播放,由于后面的帧老是会引用前面的帧 。code
收到 IDR 帧时,解码器另外须要作的工做就是:把全部的 PPS 和 SPS 参数进行更新。视频
对IDR帧的处理(与I帧的处理相同):(1) 进行帧内预测,决定所采用的帧内预测模式。(2) 像素值减去预测值,获得残差。(3) 对残差进行变换和量化。(4) 变长编码和算术编码。(5) 重构图像并滤波,获得的图像做为其它帧的参考帧。blog
多参考帧状况下, 举个例子 :有以下帧序列: IPPPP I P PPP ……。按照 3 个参考帧编码。队列
由于“按照 3 个参考帧编码”,因此参考帧队列长度为 3 。重构
遇到绿色的 I 时,并不清空参考帧队列,把这个 I 帧加入参考帧队列(固然 I 编码时不用参考帧。)。再检测到红色的 P 帧时,用到的就是 PPI 三帧作参考了。coding
P帧:前向预测编码帧
在针对连续动态图像编码时,将连续若干幅图像分红P,B,I三种类型,P帧由在它前面的P帧或者I帧预测而来,它比较与它前面的P帧或者I帧之间的相同信息或数据,也即考虑运动的特性进行帧间压缩。P帧法是根据本帧与相邻的前一帧(I帧或P帧)的不一样点来压缩本帧数据。采起P帧和I帧联合压缩的方法可达到更高的压缩且无明显的压缩痕迹。
P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”预测值和运动矢量,取预测差值和运动矢量一块儿传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以获得P帧某点样值,从而可获得完整的P帧。
有的视频序列比较简单,就没有B帧,
B帧:双向预测内插编码帧
B帧的预测与重构
B帧法是双向预测的帧间压缩算法。当把一帧压缩成B帧时,它根据相邻的前一帧、本帧以及后一帧数据的不一样点来压缩本帧,也即仅记录本帧与先后帧的差值。只有采用B帧压缩才能达到200:1的高压缩。
B帧是之前面的I或P帧和后面的P帧为参考帧,找出B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中。