I帧,P帧,B帧的分析以及DTS、PTS的区别以及应用

  1. I帧:I帧是非参考帧,解码的时候不依赖于其他数据帧,进行空间冗余处理的,压缩效率比较低

I 帧图像是周期性出现在图像序列中的第一个数据帧,出现频率可由编码器选择

 

P 帧(Predicted frames):P帧为预测帧和非参考帧,解码的时候需要依赖于前一帧图像

而P帧是经过时间和空间冗余处理过的,压缩效率比较高。P帧内的每个宏块可以向前预测,也可能是帧内压缩过的,而宏块是预测前一帧的,被称做为skip 宏块

 

B帧:B帧主要是可以前后同时预测,因此压缩效率肯定是最高的,解码的时候根据参考帧进行解码即可

 

2.为什么需要DTS和PTS?

也就是说,一个 I 帧可以不依赖其他帧就解码出一幅完整的图像,而 P 帧、B 帧不行。P 帧需要依赖视频流中排在它前面的帧才能解码出图像。B 帧则需要依赖视频流中排在它前面或后面的帧才能解码出图像。

这就带来一个问题:在视频流中,先到来的 B 帧无法立即解码,需要等待它依赖的后面的 I、P 帧先解码完成,这样一来播放时间与解码时间不一致了,顺序打乱了,那这些帧该如何播放呢?这时就需要我们来了解另外两个概念:DTS 和 PTS。

 

DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。

PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。

需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。

当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。也就是如果需要播放当前帧,并且当前帧为B帧(参考的是后一帧的图像),那么就需要先解码后一帧,才能解码当前帧的图像。

导致解码顺序和播放顺序不同

 

3.音视频的同步

上面说了视频帧、DTS、PTS 相关的概念。我们都知道在一个媒体流中,除了视频以外,通常还包括音频。音频的播放,也有 DTS、PTS 的概念,但是音频没有类似视频中 B 帧,不需要双向预测,所以音频帧的 DTS、PTS 顺序是一致的。

音频视频混合在一起播放,就呈现了我们常常看到的广义的视频。在音视频一起播放的时候,我们通常需要面临一个问题:怎么去同步它们,以免出现画不对声的情况。

要实现音视频同步,通常需要选择一个参考时钟,参考时钟上的时间是线性递增的,编码音视频流时依据参考时钟上的时间给每帧数据打上时间戳。在播放时,读取数据帧上的时间戳,同时参考当前参考时钟上的时间来安排播放。这里的说的时间戳就是我们前面说的 PTS。实践中,我们可以选择:同步视频到音频、同步音频到视频、同步音频和视频到外部时钟。

也就是音频和视频都有PTS显示时间戳,音频,视频仅对照着一个时间戳参考,就可以实现同步,如果在编码器在编码的时候,时间戳是有问题的,那么会导致音视频不同步

而这个PTS显示时间戳和RTP数据包的时间戳是不同的

RTP数据包的时间戳由码率90000/帧率25=3600的时间戳

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值