一、原理
如果简单的按照音频的采样率与视频的帧率去播放,由于机器运行速度,解码效率等种种造成时间差异的因素影响,很难同步,音视频时间差将会呈现线性增长。所以要做音视频的同步,有三种方式:
-
参考一个外部时钟,将音频与视频同步至此时间。我首先想到这种方式,但是并不好,由于某些生物学的原理,人对声音的变化比较敏感,但是对视觉变化不太敏感。所以频繁的去调整声音的播放会有些刺耳或者杂音吧影响用户体验。(ps:顺便科普生物学知识,自我感觉好高大上_)。
-
以视频为基准,音频去同步视频的时间。不采用,理由同上。
-
以音频为基准,视频去同步音频的时间。 所以这个办法了。
所以,原理就是以音频时间为基准,判断视频快了还是慢了,从而调整视频速度。其实是一个动态的追赶与等待的过程。
二、一些概念
音视频中都有DTS与PTS。
- DTS ,Decoding Time Stamp,解码时间戳,告诉解码器packet的解码顺序。
- PTS ,Presentation Time Stamp,显示时间戳,指示从packet中解码出来的数据的显示顺序。
音频中二者是相同的,但是视频由于B帧(双向预测)的存在,会造成解码顺序与显示顺序并不相同,也就是视频中DTS与PTS不一定相同。
- 时间基