I帧 P帧 B帧 IDR帧

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

       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帧的视频中从任意点开始播放,因为后面的帧总是会引用前面的帧 。

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

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

IDR帧与GOP区间

I帧中,有一类特殊的I帧,叫做IDR帧。IDR帧的性质是,比如第1000帧是IDR帧,那么这一帧相当于一个分水岭,

从1001帧开始,所有的帧都不能再参照1000帧之前的帧。在closed GOP规定下(x264设置中可以指定,并且vcb-s一直指定),0~999帧也不允许参照这个IDR帧以及之后的帧。这个性质在播放的时候额外有用:如果我直接从第1000帧开始播放,我可以毫无问题的播放下去,因为我不需要参照1000帧之前的内容完成解码。我从开头播放,直到999帧的时候,我都不需要参照1000帧及它后面的东西;1000帧之后的数据都损坏了,0~999帧也能正常播放。

视频开头的I帧一定是IDR帧。

在我们拖动进度条的时候,为啥有时候会卡顿,或者拖不准呢?其实是播放器干了这些事:

1. 计算你拖动进度条的时间,找出它应该是哪一帧,假设为N

2. 通过搜索视频索引信息,找出N帧前面最近的一个IDR帧,假设为M(M<=N)。很显然,M和N同属于一个GOP区间,

这个区间开头的帧是M

3. 如果你的播放器设置了快速索引,视频将直接从M帧开始播放,因为M帧是IDR,它不需要参照任何帧,所以立刻

可以开始播放。这是为啥你会发现开始的地方总是在之前一点。

4. 否则,如果你的播放器设置了精确索引,解码器会从M帧一直开始解码,解码到N帧,然后显示N帧的画面,并继续播放。

 

当N-M比较大的时候,播放器可能需要先解码几百甚至上千帧,才能继续播放。如果视频允许很长的GOP区间,

这个视频在播放的时候,拖动进度条就特容易卡顿。

 

在x264中,如果设置了--min-keyint 1,那么所有I帧都是IDR帧(vcb-s也一直在用)。而GOP区间最大的范围是

通过--keyint指定的。这些在后续x264参数教程中再讨论。

 

两个IDR帧之间的区间,从一个IDR帧开始,到下一个IDR前的帧结束,叫做IDR区间,又叫做GOP区间。GOP区间

可以看做是独立的一段视频:它里面的所有帧,都不需要参照任何区间之外的东西,只要一个GOP区间是齐全的,

区间里面所有的帧都能被解码。我们平时看的视频就是多段GOP区间连接起来的。

2、P帧

 P帧又称帧间预测编码帧,需要参考前面的I帧才能进行编码。表示的是当前帧画面与前一帧(前一帧可能是I帧也可能是P帧)的差别。解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。与I帧相比,P帧通常占用更少的数据位,但不足是,由于P帧对前面的P和I参考帧有着复杂的依耐性,因此对传输错误非常敏感。


3、B帧

B帧又称双向预测编码帧,也就是B帧记录的是本帧与前后帧的差别。也就是说要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是对解码性能要求较高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值