当前位置: 首页 > article >正文

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

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

在这里插入图片描述

上图介绍:

  • 该图是以音频的时间为基,对视频播放时间的延迟控制方案,只调整视频的播放延时。
  • 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)的一半,也不能大于默认延迟时间的两倍。

  • 如果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

当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

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


http://www.kler.cn/news/136326.html

相关文章:

  • java程序设计2(一)
  • linux中的PATH环境变量
  • C++基础:三个字符串也能搞大小?
  • C++ 二级测试卷及答案
  • 群控系统服务端开发模式-应用开发-业务架构逻辑开发准备工作
  • Vue学习笔记(四)
  • 华为---OSPF网络虚连接(Virtual Link)简介及示例配置
  • 腾讯云轻量数据库1核1G性能测评、租用费用和详细介绍
  • 【科技素养】蓝桥杯STEMA 科技素养组模拟练习试卷D
  • c语言从入门到实战——回调函数与qsort的讲解和模拟实现
  • 记录一次较为完整的Jenkins发布流程
  • JVM虚拟机:通过日志学习PS+PO垃圾回收器
  • 【NI-RIO入门】CompactRIO介绍及环境安装
  • 代码随想录算法训练营第六十天丨 单调栈03
  • 【汇编】“转移”综述、操作符offset、jmp指令
  • 使用Python实现几种底层技术的数据结构
  • Linux操作系统使用及C高级编程-D6-D8Linux shell脚本
  • Pandas数据集的合并与连接merge()方法_Python数据分析与可视化
  • Linux网络配置,常用命令及远程工具
  • css旋转代码
  • xlua源码分析(三)C#访问lua的映射
  • Git常用基本指令学习
  • 数据结构 并查集
  • 11.16~11.19绘制图表,导入EXCEL中数据,进行拟合
  • 一道简单的积分题目
  • 【机器学习】036_权重衰退