首页 > 代码库 > I,P,B帧和PTS,DTS的关系
I,P,B帧和PTS,DTS的关系
基本概念:
I frame :帧内编码帧 又称intra picture,I 帧一般是每一个 GOP(MPEG 所使用的一种视频压缩技术)的第一个帧,经过适度地压缩,做为随机訪问的參考点,能够当成图象。I帧能够看成是一个图像经过压缩后的产物。
P frame: 前向预測编码帧 又称predictive-frame,通过充分将低于图像序列中前面已编码帧的时间冗余信息来压缩数据传输量的编码图像,也叫预測帧;
B frame: 双向预測内插编码帧 又称bi-directional interpolated prediction frame,既考虑与源图像序列前面已编码帧,也顾及源图像序列后面已编码帧之间的时间冗余信息来压缩数据传输量的编码图像。也叫双向预測帧。
PTS:Presentation Time Stamp。
PTS主要用于度量解码后的视频帧什么时候被显示出来
DTS:Decode Time Stamp。DTS主要是标识读入内存中的bit流在什么时候開始送入解码器中进行解码。
在没有B帧存在的情况下DTS的顺序和PTS的顺序应该是一样的。
IPB帧的不同:
I frame:自身能够通过视频解压算法解压成一张单独的完整的图片。
P frame:须要參考其前面的一个I frame 或者B frame来生成一张完整的图片。
B frame:则要參考其前一个I或者P帧及其后面的一个P帧来生成一张完整的图片。
两个I frame之间形成一个GOP,在x264中同一时候能够通过參数来设定bf的大小。即:I 和p或者两个P之间B的数量。
通过上述基本能够说明假设有B frame 存在的情况下一个GOP的最后一个frame一定是P.
DTS和PTS的不同:
DTS主要用于视频的解码,在解码阶段使用.PTS主要用于视频的同步和输出.在display的时候使用.在没有B frame的情况下.DTS和PTS的输出顺序是一样的.
样例:
以下给出一个GOP为15的样例,其解码的參照frame及其解码的顺序都在里面:
如上图:I frame 的解码不依赖于不论什么的其他的帧.而p frame的解码则依赖于其前面的I frame或者P frame.B frame的解码则依赖于其前的近期的一个I frame或者P frame 及其后的近期的一个P frame.
:I、B、P各帧是依据压缩算法的须要,是人为定义的,它们都是实实在在的物理帧,至于图像中的哪一帧是I帧,是随机的,一但确定了I帧,以后的各帧就严格按规定顺序排列
从上面的解释看,我们知道I和P的解码算法比較简单,资源占用也比較少。I仅仅要自己完毕即可了,P呢, 也仅仅须要解码器把前一个画面缓存一下,遇到P时就使用之前缓存的画面就好了。假设视频流仅仅有I和P。解码器可以无论后面的数据,边读边解码,线性前进,大家非常舒服。
但网络上的电影非常多都採用了B帧。由于B帧记录的是前后帧的区别。比P帧能节约很多其它的空间,但这样一来,文件小了,解码器就麻烦了,由于在解码时,不仅要用之前缓存的画面,还要知道下一个I或者P的画面(也就是说要预读预解码) ,并且,B帧不能简单地丢掉,由于B帧事实上也包括了画面信息,假设简单丢掉。并用之前的画面简单反复,就会造成画面卡(事实上就是丢帧了) ,而且因为网络上的电影为了节约空间,往往使用相当多的B帧,B帧用的多,对不支持 B 帧的播放器就造成更大的困扰,画面也就越卡。
GOP:Group of Pictures画面组
GOP(Group of Pictures)策略影响编码质量:所谓GOP,意思是画面组,一个GOP 就是一组连续的画面。MPEG编码将画面(即帧)分为I、P、B三种,I是内部编码帧,P是前向预測帧,B是双向内插帧。简单地讲,I帧是一个完整的画面,而P 帧和 B 帧记录的是相对于 I 帧的变化。
没有 I 帧,P 帧和 B 帧就无法解码。这就是 MPEG 格式难以精确剪辑的原因。也是我们之所以要微调头和尾的原因。
MPEG-2帧结构
MPEG-2压缩的帧结构有两个參数。一个是GOP(Group Of Picture)图像组的长度,一般可按编码方式从1-15;还有一个是I帧和P帧之间B帧的数量,通常是1-2个。前者在理论上记录为N,即多少帧里面出现一次I 帧;后者描写叙述为多少帧里出现一次 P 帧,记录为 M。
http://www.cnblogs.com/qingquan/archive/2011/07/27/2118967.html
I,P,B帧和PTS,DTS的关系