什么是jitter
设计背景
jitter(也称为等待时间或延迟)是数据包从一个点到达另一个点所花费的时间。
JitterBuffer 是用于捕获传入数据包的临时存储缓冲区。
它用于基于数据包的网络中,通过在网络拥塞期间使数据包到达时间变平滑来确保音频流的连续性。 数据包独立传输,到达时间会因网络拥塞和所用网络的类型(即LAN与无线网络)的不同而有很大差异。
在这个前提下,jitter buffer的设计要求也就出来的:
- 删除重复的数据包。
- 如果数据包乱序到达,要对其重新排序。
- 在丢包(错误隐藏)的情况下修复流。
- 根据当前网络拥塞动态管理延迟。
- 管理前向纠错(FEC)。
webrtc下的 jitter buffer
因为这一设计会影响严重影响用户体验,所以这里重点研究下webrtc中对这部分的处理。
webrtc 的 jitterbuffer 可以分为 jitter 和 buffer 。
buffer 主要对丢包、乱序、延时到达等异常情况做处理,还会和NACK、FEC、FIR等QOS相互配合。
jitter 主要根据当前帧的大小和延时评估出jitter delay,再结合decode delay、render delay以及音视频同步延时,得到render time,来控制平稳的渲染视频帧。
参考资料:
- programming_the_jitter_buffer
- https://www.jianshu.com/p/bd10d60cebcd