音频延时是考量一个音频系统的重要指标。
假设系统音频数据能正常播放,即播放无杂音等异常情况。整个音频系统的所有buffer数据对应的时长就是延迟。(系统运行时判断延迟)
那么我们如何在系统运行前设置好系统buffer的大小,起播阈值的大小,使得系统的延迟能够按照我们的期望达成。
音频流我们可以分为实时(现场直播)和非实时的(文件播放)。
1.假设系统处理延时为0:也就是从一块buffer搬运到下一块buffer的时间为0。那么系统的延时大致等于第一块buffer的起播阈值,如果所有节点的起播阈值都一样的情况下。如果起播阈值不一样的话等于最大那块buffer的延时。
2.假设音频系统每个节点处理(搬运)延时为Tn。则总的延时为T1+T2+…+Tn + 最大起播阈值。
起播阈值和算法预处理攒数据的差别。
起播阈值假设为N,当数据量达到N,处理节点就可以马上释放这N个数据量。
算法预处理攒数据假设为N,当输入数据量为N+1时,处理节点才可以释放1个数据量。算法预处理攒数据对应的音频时长可以看作处理延时。
3.处理节点是否及时的问题:
每个节点处理音频数据的时间必须小于音频数据对应的播放时长。如果出现空闲等待(没数据处理)会变相增加处理数据的时间。
所以,优化延时的方法如下:
1.减小处理链路最大的起播阈值。
2.减小节点处理带来的延时(优化算法效率)
3.减少节点空闲等待的时间。(各节点间的节奏匹配,乒乓和搬运数据节奏一支,减少睡眠时间)