
时间差(diff) = 音频播放时间 - 视频播放时间;
音频帧比视频帧快,视频帧应该追赶音频帧,所以应该减少视频帧的延迟时间。
diff(音视频播放时差)处于不同范围的处理情况:
| 音视频播放时差范围 |
|---|
| 3ms - 500ms |
| 500ms - 10000ms |
| > 10000ms |
(1)3ms - 500ms:
视频帧慢了3ms - 500ms,将上一次delayTime乘以2/3,达到减少视频延迟时间的效果。
delayTime = delayTime * 2 / 3
当diff处于3 - 500 ms这个范围,视频延迟时间(delayTime)要求,不能低于默认延迟时间(defaultDelayTime,25帧则为40ms)的一半,也不能大于默认延迟时间的两倍。
(2)500ms - 10000ms:
视频帧慢了500ms - 10000ms,将delayTime设置为0。
(3)diff > 10000ms
视频帧和音频帧差距很大了,无法通过追赶达到同步,应该将视频缓存队列清空,直接引入最新鲜的视频帧。
音频帧比视频帧慢,视频帧应该等一下音频帧,所以应该增加视频帧的延迟时间。
diff(音视频播放时差)处于不同范围的情况:
(1)3ms - 500ms:
视频帧快了3ms - 500ms,将上一次delayTime乘以3/2,达到增加视频延迟时间的效果。
delayTime = delayTime * 3 / 2
当diff处于3 - 500 ms这个范围,视频延迟时间(delayTime)要求,不能低于默认延迟时间(defaultDelayTime,25帧则为40ms)的一半,也不能大于默认延迟时间的两倍。
(2)500ms - 10000ms:
视频帧快了500ms - 10000ms,将delayTime以两倍 defaultDelayValue时间进行延时。
(3)diff > 10000ms
视频帧和音频帧差距很大了,无法通过追赶达到同步,应该将音频缓存队列清空,直接引入最新鲜的音频帧。