一、概述
主要是解决播放和采集编码时的音画同步
二、技术点、原理、名词
-
时间戳
音频和视频分别有时间戳,音画同步的过程,也就是需要将当前处理的音频和视频时间戳保持在一定的差值内,防止用户感知到音频和视频内容时序上的差异。 DTS、PTS 的概念如下所述:
DTS(Decoding Time Stamp):即解码时间戳,这个时间戳的意义在于告诉播放器该在什么时候解码这一帧的数据。单位为1/90000 秒。
PTS(Presentation Time Stamp):即显示时间戳,这个时间戳用来告诉播放器该在什么时候显示这一帧的数据。单位为1/90000 秒。
Composition Time CompositionTime offset,这个俗名也叫offset或者简称cts,在avc视频帧里面没有存储pts,而是通过dts和cts来计算pts。 cts偏移:cts = (pts - dts) / 90 。cts的单位是毫秒。
需要注意的是:虽然 DTS、PTS 是用于指导播放端的行为,但它们是在编码的时候由编码器生成的。
当视频流中没有 B 帧时,通常 DTS 和 PTS 的顺序是一致的。但如果有 B 帧时,就回到了我们前面说的问题:解码顺序和播放顺序不一致了。
比如一个视频中,帧的显示顺序是:I B B P,现在我们需要在解码 B 帧时知道 P 帧中信息,因此这几帧在视频流中的顺序可能是:I P B B,这时候就体现出每帧都有 DTS 和 PTS 的作用了。DTS 告诉我们该按什么顺序解码这几帧图像,PTS 告诉我们该按什么顺序显示这几帧图像。顺序大概如下:
PTS: 1 4 2 3
DTS: 1 2 3 4
Stream: I P B B
-
同步方式
采集端同步
有B帧,无B帧
播放端同步
有B帧,无B帧
-
同步阈值
如图所示,这个 “阈值” 有一个国际标准定义了它,叫做:RFC-1359,它是这么定义的:
1. 无法察觉:音频和视频的时间戳差值在:-100ms ~ +25ms 之间
2. 能够察觉:音频滞后了 100ms 以上,或者超前了 25ms 以上
3. 无法接受:音频滞后了 185ms 以上,或者超前了 90ms 以上