本文介绍: 该图是音频时间为基,对视频播放时间延迟控制方案,只调整视频播放延时delayTime视频播放延迟时间初始值是1 / FPS * 1000 (ms),如果FPS为25帧率,初始值即为40ms。为理解同步过程,明确一点,delayTime是会不断调整的,并不是一直40ms。以上的time_base结构体是AVStream::time_base。Step2中展示的是diff音视频播放时差)处于不同范围时,对应不同视频播放延迟时间(delayTime)。

音视频同步 – 以音频时间为基

在这里插入图片描述

上图介绍

流程

Step1:判断 音频or 视频帧 快 ?

时间差(diff) = 音频播放时间 – 视频播放时间;

Step2:当diff > 0 ms 时,说明音频帧比视频帧快:

音频帧比视频帧快,视频帧应该追赶音频帧,所以应该减少视频帧的延迟时间。

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

视频帧和音频帧差距很大了,无法通过追赶达到同步,应该将视频缓存队列清空直接引入最新鲜的视频帧。

Step2:当diff < 0 ms 时,说明音频帧比视频帧快:

音频帧比视频帧慢,视频帧应该等一下音频帧,所以应该增加视频帧的延迟时间。

diff(音视频播放时差)处于不同范围的情况:

(1)3ms – 500ms:

​ 视频帧快了3ms – 500ms,将上一次delayTime乘以3/2,达到增加视频延迟时间的效果

delayTime = delayTime * 3 / 2

当diff处于3 – 500 ms这个范围,视频延迟时间(delayTime)要求,不能低于默认延迟时间(defaultDelayTime,25帧则为40ms)的一半,也不能大于默认延迟时间的两倍。

  • 如果delayTime小于默认延迟时间的一半,将delayTime调整为默认延迟时间(defaultDelayTime)的2/3。
  • 如果delayTime大于默认延迟时间两倍,将delayTime调整为默认延迟时间(defaultDelayTime)的两倍。

(2)500ms – 10000ms:

视频帧快了500ms – 10000ms,将delayTime以两倍 defaultDelayValue时间进行延时。

(3)diff &gt; 10000ms

视频帧和音频帧差距很大了,无法通过追赶达到同步,应该将音频缓存队列清空直接引入最新鲜的音频帧。

原文地址:https://blog.csdn.net/Tsing12138/article/details/134521105

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_46608.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注