WebRTC音视频同步原理与实现详解(上)
第四章、音视频同步实现详解
4.1 音视频同步标准
音视频做到什么程度才算是同步呢?
关于音画同步, 业界有3个标准:
1)ITU-R BT.1359(1998):国际电信联盟标准
2)ATSC IS/191(2003):美国的数字电视国家标准
3)EBU R37(2007):欧洲广播联盟标准
目前在音视频同步方面影响最大的国际标准是,ITU-R BT.1359-1,该标准的评测者既包括专家, 也包括一般人,采用5级评分标准,给出的答案是:
delay time是用视频延迟减去音频延迟,负数(-)表示音频延迟更大,正数(+)表示视频延迟更大。
4.2 同步器与延迟调整
4.2.1 音视频同步器
音视频同步器,就是负责将音频和视频流同步播放。
图中中间大框架里就是整个同步器,同步器输入包括三部分:
1)期望音频目标延迟,以该延迟播放,音频是流畅的
2)期望视频目标延迟,以该延迟播放,视频是流畅的
3)最近一对音视频包的相对延迟
同步器输出,包括两部分:
1)音频目标延迟
2)视频目标延迟
音视频相对延迟:音视频目标延迟差 - 最近一对音视频包相对延时
4.2.2 调整延迟
1)音视频目标延迟,取期望目标延迟与最小播放延迟的最大值。
最近一对音视频包的相对延迟与音视频的目标延迟差之和,得到当前时刻的音视频相对延迟,即音视频流目前的时间偏差,计算当时相对延迟,并使用滑动平均算法处理,减少噪声和干扰的影响。滑动平均算法公式:
其中,k表示平滑滤波器的窗口大小,用于计算滑动平均值的权重系数(代码中kFilterLength = 4),y表示平滑滤波器的滑动平均值,x表示当前样本值,这里是相对延迟
2)计算音视频的延迟
为了控制步长,相对延迟diff_ms是平滑的相对延迟的一半,并限制单次在80ms范围之内,如果是30ms以内,则认为是同步的,不需要调整。
当diff_ms > 0,说明视频比较慢,再进行视频延迟与基准(默认0)比较: