i帧与idr帧的区别

时间:2022-08-28 19:58:28

http://blog.csdn.net/zhaomax/article/details/52189344


http://blog.csdn.net/sphone89/article/details/8086071


http://blog.csdn.net/jammg/article/details/52357245



I帧 B帧 p帧 IDR帧的区别

原创  2012年10月18日 15:53:18
  • 11115

IDRInstantaneous Decoding Refresh--即时解码刷新。 

I:帧内编码帧是一种自带全部信息的独立帧,无需参考其它图像便可独立进行解码视频序列中的第一个帧始终都是I帧。 

   IIDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。 IDR帧的作用是立刻刷新,使错误不致传播,IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担。 IDR会导致DPBDecodedPictureBuffer 参考帧列表——这是关键所在)清空,而I不会IDR图像一定是I图像,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。一个序列中可以有很多的I图像,I图像之后的图象可以引用I图像之间的图像做运动参考。 

   对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I-帧来说,位于其之后的B-P-帧可以引用位于普通I-帧之前的I-帧。从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧 。

  收到 IDR 帧时,解码器另外需要做的工作就是:把所有的 PPS 和 SPS 参数进行更新。

  对IDR帧的处理(I帧的处理相同)(1) 进行帧内预测,决定所采用的帧内预测模式。(2) 像素值减去预测值,得到残差。(3) 对残差进行变换和量化。(4) 变长编码和算术编码。(5) 重构图像并滤波,得到的图像作为其它帧的参考帧。

  多参考帧情况下,  举个例子 :有如下帧序列: IPPPP P PPP ……。按照 3 个参考帧编码。

     因为“按照 3 个参考帧编码”,所以参考帧队列长度为 3 。

    遇到绿色的 I 时,并不清空参考帧队列,把这个 I 帧加入参考帧队列(当然 I 编码时不用参考帧。)。再检测到红色的 P 帧时,用到的就是 PPI 三帧做参考了。


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帧压缩才能达到2001的高压缩。

 B帧是以前面的IP帧和后面的P帧为参考帧,找出B某点的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中


H.264视频标准中普通I帧与IDR帧的区别

转载  2016年08月12日 10:25:21
  • 976

http://blog.csdn.net/openspirit/article/details/10005863


普通I帧与IDR(Instantaneous Decoding Refresh,瞬时解码刷新)帧为均采用帧内预测技术的视频帧,同属于I帧。

区别是:采用IDR帧编码,会导致DPB(Decoded Picture Buffer,直译为解码图像缓冲区,即指参考帧列表)完成一次清空处理,而普通I帧不会。

那么,这样带来的直接结果是怎样的呢?

即,当前IDR帧后面的帧不会将当前IDR帧之前已经编码的帧作为参考帧;而当前普通I帧之后的帧有可能将当前I帧之前的帧作为参考帧。

那么,这样带来的直接效果是怎样的呢?

即,播放视频的时候,可以直接从IDR帧开始播放,因为IDR帧之前的帧与当前IDR帧和之后的帧再也没有直接地关联;而普通I帧则不行。


可以看到,一般来讲,一段视频的第0帧(也即首帧)是I帧,那么它算不算是IDR帧呢?答:算。

所以,IDR帧一定是I帧,反之不成立。

在H.264标准参考软件(JM)下,通过IDRIntraEnable来设置是否支持IDR帧。


I/IDR帧后如果出现PTS比它还小的帧 则说明此流为开GOP


I和IDR帧都是使用帧内预测的。在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把首个I帧叫做IDR帧,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担。IDR会导致DPB(参考帧列表——这是关键所在)清空,而I帧不会。


       IDR图像一定是I图像,但是I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像课引用I图像之间的图像做运动参考。


        对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I帧来说,位于其之后的B和P帧可以引用位于普通I帧之前的I帧。从随机抽取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。 


        IDR图像的标识:idr_pic_id。不同的IDR图像有不同的idr_pic_id值。只有在作为IDR图像的I帧才有这个句法元素。在场模式下,IDR的两个场有相同的idr_pic_id值。idr_pic_id的取值范围是[0,65535],和frame_num类似,当它的值超过这个范围时,它会以循环的方式重新开始计数。

idr_pic_id 0 标识一个IDR图像。一个IDR图像的所有条带中的idr_pic_id 值应保持不变。当按解码顺序的两个连续访问单元都是IDR 访问单元时,第一个IDR 访问单元的条带的idr_pic_id 值应与第二个IDR 访问单元的idr_pic_id 值不同。idr_pic_id 的值应在0到65535的范围内(包括0和65535)。

IDR(Instantaneous Decoding Refresh)--即时解码刷新。

      I和IDR帧都是使用帧内预测的。它们都是同一个东西而已,在编码和解码中为了方便,要首个I帧和其他I帧区别开,所以才把第一个首个I帧叫IDR,这样就方便控制编码和解码流程。IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始,重新算一个新的序列开始编码。而I帧不具有随机访问的能力,这个功能是由IDR承担。IDR会导致DPB(DecodedPictureBuffer参考帧列表——这是关键所在)清空,而I不会IDR图像一定是I图像,但I图像不一定是IDR图像。一个序列中可以有很多的I图像,I图像之后的图像可以引用I图像之间的图像做运动参考。一个序列中可以有很多的I图像,I图像之后的图象可以引用I图像之间的图像做运动参考。
      对于IDR帧来说,在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容,与此相反,对于普通的I-帧来说,位于其之后的B-和P-帧可以引用位于普通I-帧之前的I-帧。从随机存取的视频流中,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。但是,不能在一个没有IDR帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧。

i帧与idr帧的区别

IDR: 在H.264中,图像以序列为单位进行组织一个序列的第一个图像叫做 IDR 图像(立即刷新图像),IDR 图像都是 I 帧图像。H.264 引入 IDR 图像是为了解码的重同步,当解码器解码到 IDR 图像时,立即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始一个新的序列。这样,如果前一个序列出现重大错误,在这里可以获得重新同步的机会。IDR图像之后的图像永远不会使用IDR之前的图像的数据来解码。      IDR 图像一定是 I 图像,但 I 图像不一定是 IDR 图像。I帧之后的图像有可能会使用I帧之前的图像做运动参考。


另外,一个或者多个图像参数集对应一个序列参数集。