美文网首页
音视频中的DTS、PTS

音视频中的DTS、PTS

作者: 拉普拉斯妖kk | 来源:发表于2022-06-10 19:42 被阅读0次

I、P、B 帧

  • I 帧(Intra coded frames) : I 帧图像采用帧内编码方式,即只利用了单帧图像内的空间相关性,而没有利用时间相关性。I 帧使用帧内压缩,不使用运动补偿,由于 I 帧不依赖其它帧,所以是随机存取的入点,同时是解码的基准帧。I 帧主要用于接收机的初始化和信道的获取,以及节目的切换和插入,I 帧图像的压缩倍数相对较低。I 帧图像是周期性出现在图像序列中的,出现频率可由编码器选择。
  • P 帧(Predicted frames) : P 帧和 B 帧图像采用帧间编码方式,即同时利用了空间和时间上的相关性。P 帧图像只采用前向时间预测,可以提高压缩效率和图像质量。P 帧图像中可以包含帧内编码的部分,即 P 帧中的每一个宏块可以是前向预测,也可以是帧内编码。
  • B 帧(Bi-directional predicted frames) : B 帧图像采用双向时间预测,可以大大提高压缩倍数。值得注意的是,由于 B 帧图像采用了未来帧作为参考,因此 MPEG-2 编码码流中图像帧的传输顺序和显示顺序是不同的。

通过上述基本可以说明如果有 B frame 存在的情况下一个 GOP 的最后一个 frame 一定是 P。

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

DTS、PTS

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

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

当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。

比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。顺序大概如下:

PTS:   480   640  560  520  600  800  720  680  760  960 ...
DTS:   400   440  480  520  560  600  640  680  720  760 ...
Stream: I     P    B    B    B    P    B    B    B    P  ...
播放序: 1     5    3    2    4    9    7    6    8   10  ...               
PTS >= DTS

音视频的同步

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

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

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

PTS和DTS的时间基

时间基是FFmpeg中的概念,也就是time_base。它也是用来度量时间的。time_base是时间的基础刻度。例如,time_base={1,25} 表示把1秒分为25等份,每一份就是1/25秒,即time_base=1/25秒。 pts或者dts的值指的是占多少个这样的时间刻度time_base。

所以,pts*time_base就是帧的显示时间,dts*time_base就是帧的解码时间。

不同的封装格式,timebase是不一样的。常见的有:

flv:{1, 1000}
ts:{1, 90000}
mp4视频:{1, 25}、{1, 24}、{1,, 1000}等
mp4音频:{1, 44100}、{1, 48000}等
mkv:{1, 1000}等

相关文章

  • 解决ffmpeg中的时间戳同步问题_day95

    PTS/DTS(时间戳)要想解决时间同步问题就必须要了解ffmpeg中的PTS和DTS到底是什么 PTS: PTS...

  • 音视频中的DTS、PTS

    I、P、B 帧 I 帧(Intra coded frames) : I 帧图像采用帧内编码方式,即只利用了单帧图像...

  • 理解音视频 PTS 和 DTS

    本文转自:理解音视频 PTS 和 DTS | www.samirchen.com 视频 视频的播放过程可以简单理解...

  • FFmpeg 入门-前置基础

    章节 像素存储格式 YUV & RGB I、B、P 帧 pts & dts 音视频开发技术可以做的事情 前言 在学...

  • flv # 存在B帧情况下的dts和pts

    如果不存在B帧,当然dts等于pts。如果存在B帧呢,flv文件中dts和pts是如何体现的呢? FLV的官方文档...

  • 音视频中GOP、PTS和DTS

    视频 视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在一个本子的每一页画上画,然后快速...

  • 音视频-帧、DTS、PTS

    采样率、比特率、帧率 采样率:每秒钟的采样次数,声音/画面越高越连贯,单位为Hz比特率:在视频领域又称码率,每秒传...

  • DTS、PTS

    https://www.cnblogs.com/samirchen/p/7071824.html[https://...

  • ffmpeg # 几个关键结构体的dts和pts的time_ba

    解码之后,AVPacket的dts拷贝为AVFrame的pkt_dts, AVPacket的pts拷贝为AVFra...

  • 理解音视频 PTS 和 DTS

    理解音视频 PTS 和 DTS 视频 视频的播放过程可以简单理解为一帧一帧的画面按照时间顺序呈现出来的过程,就像在...

网友评论

      本文标题:音视频中的DTS、PTS

      本文链接:https://www.haomeiwen.com/subject/hpnoprtx.html