Jitter Buffer初窺
阿新 • • 發佈:2021-09-01
網路的不可靠性
丟包
即使通過FEC、NACK、冗餘等機制做抗丟包處理,但是由於物理通道的不可靠性,丟包必然存在。個別報文丟失可以通過丟包隱藏(Packet Loss Concealment),也叫丟包補償,減輕丟包帶來的影響。但是PLC是基於前後幀的重建技術,當發生連續丟包時,重建效果會越來越差。
報文遲到
網路擁塞導致到來的報文已經錯過了播放時間。從播放的視角上看就是丟包。這種抖動可以通過調整緩衝buffer的長度去對抗。
抖動
網路質量突發或者週期性的波動,引起的丟包、遲到。一般的做法都是使用一個接收buffer先快取一定量的資料後再去播放。這種做法會引起一些延遲,但是可以提高播放質量。
- 穩定抖動:網路和演算法導致的抖動,統計意義上有一定的週期性、穩定性。
- 突發抖動:在穩定的抖動上突發的抖動尖峰,比如:訪問數突然增加,導致網路中的流量增大導致的擁塞。這種抖動通常無法找到規律。
對於穩定抖動來說,通常可以用統計學方法去解決,比如:使用EKF去估計抖動,動態調整buffer的長度。而對於突發抖動來說,尚無有效的解決方案(又或者我沒找到)。
Jitter Buffer
分類
Jitter Buffer一般分為兩種。
- 靜態buffer:深度固定,在穩定通道中表現很好,常用於固話。
- 動態buffer:根據網路抖動的狀態動態調整深度,深度過大會導致高延遲。
WebRTC的NetEQ中使用的是動態Jitter Buffer,但是相比於使用了更多的策略,比如:使用統計方法(EKF)估計網路抖動。