webrtc代码走读十六(Jitter延时的计算)

一、延时计算原理

1)jitter延时计算公式

JitterDelay由两部分延迟造成:传输大帧引起的延迟和网络噪声引起的延迟。计算公式如下:

JitterDelay = theta[0] * (MaxFS – AvgFS) + [noiseStdDevs * sqrt(varNoise) – noiseStdDevOffset]

该公式详细推导过程,请参见大牛的文章《WebRTC视频接收缓冲区基于KalmanFilter的延迟模型》 

theta[0]:信道传输速率的倒数
MaxFS:自会话开始以来所收到的最大帧大小
AvgFS:表示平均帧大小
noiseStdDevs:表示噪声系数2.33
varNoise:表示噪声方差
noiseStdDevOffset:是噪声扣除常数30

2)jitter延时更新流程

二、延时计算代码

1)总述

FrameBuffer::ReturnReason FrameBuffer::NextFrame函数调用计算函数。

CalculateDelay计算frameDelay延时。

UpdateEstimate更新jitter延时时间。

VCMJitterEstimator::CalculateEstimate计算最终的jitter时间。

2)frameDelay帧间延时时间计算

实现函数:VCMInterFrameDelay::CalculateDelay

计算原理:

理论上发送端发送一帧时间(T1-G1 first timestamp)与接收端接收一帧的时间相等(G1_size)。但是实际上由于网络延时等异常,会出现(G1_size)大于(T1-G1 first timestamp)的情况。他们时间的差值就是该帧在网络上传输的延时时间。

视频1秒钟对应90KHZ的采样率,时间戳是根据这个关系式换算成时间。

3)VCMJitterEstimator::UpdateEstimate更新jitter延时

三、参考:

https://www.jianshu.com/p/bb34995c549a

发布了107 篇原创文章 · 获赞 84 · 访问量 14万+

猜你喜欢

转载自blog.csdn.net/CrystalShaw/article/details/100763301