webrtc QOS筆記二 音頻buffer數據不足生成很多gap的問題
記錄個iusse.
插入音頻數據後,GetAudioInternal 進行操作決策:
Normal:正常播放。
Acceleration:變聲不變調的減速播放算法。
Preemptive expand:變聲不變調的減速播放算法。
Expand:由 NetEq 或解碼器生成的丟包隱藏。
Merge:如果上一次是 Expand 造假出來的數據,那爲了聽起來更舒服一些,會跟正常數據包做一次融合算法。
Comfort noise (CNG):是用來產生舒適噪聲的,比單純的靜音包聽起來會更舒服的靜音狀態。
Expand(PLC):丟包補償,最重要的無中生有算法模塊,解決 “真丟包” 時沒數據的問題,造假專業戶 ;
測試網絡良好不丟包,關閉視頻,單獨聽音頻,存在很多gap,主要原因爲緩存數據不足.
high limit : 目標水位,圖中紅色曲線,緩存水位高於此水位會進行加速播放
low limit : 低水位,圖中藍色曲線,緩存水位低於此水位會進行拉伸音頻樣本減速速播放
buffer limit : 當前音頻緩存水位,圖中黃色曲線
可見當前高低水位分別在220ms和160ms左右,緩存水位常小於低水位,造成數據不足產生gap。
定位到原因,就對拉昇做做文章就好了,調整expand拉昇參數,使水位穩定到低水位上
前後波形對比:
紅色箭頭指示部分gap位置