背景
在丟包 10%下測試WebRTC,發現丟包導致的卡頓,需要一些開啓一些機制來保證丟包重傳。
摘要
簡述WebRTC中NACK、RTX的功能和聯繫。
正文
NACK、RTX是WebRTC裏丟包重傳策略,兩個策略之間有一定的聯繫。
NACK:接收端通過RTCP將丟包的序列號通知給發送端,讓發送端重傳該包。
RTX:發送端在新的SSRC上發送重傳包或者冗餘包。
兩者均需要通過sdp協商開啓,在支持的服務端(例如Janus)修改SDP即可開啓。
要點
- 重傳包不一定通過RTX發送;
- RTX包不一定用來重傳丟失的包。
解釋
在發送端收到NACK後,要重發接收端丟掉的包,發送的模式有兩種:
- RTX模式
在接收端通過SDP使能發送端的RTX以後,重發的包封裝到RTX包裏發送,RTX包與原RTP有不同的SSRC,這樣有助於避免SRTP的重放攻擊,也能讓接收端更好的估算帶寬; - 普通模式
在沒有使能RTX時,發送端只是簡單的重發原來的RTP包,這種模式會影響接收端的RTCP統計,比如會出現負的丟包率。
另外,RTX包有兩種
- 收到NACK重發的包
如上述; - 發送端發送的冗餘Padding包
發送端的初始碼率在達不到目標碼率的情況下,會通過發送RTX包來補充,以能夠逼近目標碼率,當然這個機制必須啓用RTX才能激活。因此,接收端可能會收到兩種RTX包,一種是被NACK觸發的,一種是發送端用來補充發送碼率的冗餘包。