WebRTC视频JitterBuffer详解
详细内容链接
JitterBuffer延迟换流畅
在丢包+延迟+抖动的弱网环境下,推流端通过NACK+FEC等方式做了一定的容错,但是可能并不能百分之百解决所有问题,而且通过SFU分发到拉流端之后,拉流端网络也可能有问题,这个时候需要JitterBuffer来做媒体包的缓存,例如视频JitterBuffer,它不只缓存视频包,还组帧,还期望组成连续的可解码的GOP,一旦有一个帧的包丢失,就需要等待,如果较长时间无法恢复就丢弃剩余的整个GOP,如果恢复的比较晚,等到音视频同步完去渲染发现这一系列帧已经太晚了,会直接扔掉或者加速播放,这些都会造成播放端的卡顿、不流畅的体验,这是WebRTC JitterBuffer比较注重实时性的体现。
但是这个时候你可能发现接收端收的音频、视频数据量如果缓存足够长时间、并且能够平滑的播放的话,实际上并不会造成卡顿,只是需要付出增加缓存时间的代价,也就是所谓的延迟换流畅。
可以考虑记录一段时间内接收到的(帧间间隔)的(最大值),把这个值加到JitterBuffer的(目标延迟)上,人为的增加缓存时间,