• 音视频同步笔记 - 以音频时间为基


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

    在这里插入图片描述

    上图介绍:

    • 该图是以音频的时间为基,对视频播放时间的延迟控制方案,只调整视频的播放延时。
    • 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
    
    • 1

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

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

    (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
    
    • 1

    当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 > 10000ms

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

  • 相关阅读:
    JavaScript:实现弧度到度算法 (附完整源码)
    Linux之进程管理
    cocosCreator 之 dispatchEvent事件分发
    微服务-gateway跨域配置
    【软件测试】一位流水线工作者,从月4K到月12K的涅槃重生......
    数字电路和模拟电路-8触发器
    xml总结
    关于python中round方法在一些四舍五入时丢失精度
    JAVA:实现使用finite automata实现字符串匹配算法(附完整源码)
    React框架创建项目详细流程-项目的基本配置-项目的代码规范
  • 原文地址:https://blog.csdn.net/Tsing12138/article/details/134521105