webrtc 中nack是最基本的qos策略,與ack機制不同的地方是nack是接收端檢測到丟包時,告知傳送端具體丟包的序號,接收端收到nack後從快取中找到對應的包並傳送出去。
nack rtcp報文格式如上圖所示,pt=205。packet identifier(pid) 為丟包起始參考值,bitmap of lost packets(blp)為16位的bitmap,對應為1的為表示丟包資料,具體如下抓包分析:
packet identifier(pid)為176。bitmap of lost packets(blp):0x6ae1。解析的時候需要按照小模式解析,0x6ae1對應二進位制:110101011100001倒過來看1000 0111 0101 0110。按照1bit是丟包,0bit是沒有丟包解析,丟失報文序列號分別是:176 177 182 183 184 186 188 190 191與wireshark解析一致,當然pid和blp可以有多個。
nack實現一般會維護如下幾個序列:
nacklist(missing_seq_nums)
儲存丟失rtp包(比如當前序號5,下乙個序號10,那麼6,7,8,9都會放到nacklist中)
recoveredlist
儲存重傳包(防止需要重傳的包已經在重傳包中了,重傳包有可能優先過來)
keyframelist
儲存當前關鍵幀序號(當nacklist太超過最大長度時候,刪除關鍵幀前面的序號,如果還不能滿足需要強制i幀,保證畫面不會黑屏,出現跳幀)
1)丟包序列長度
nacklist webrtc 中預設1000
2)每個包多久nack一次
乙個rtt時間nack一次,接收端rtt可以通過xr擴充套件計算獲取。
3)每個包nack多少次
預設10次
1)
webrtc nack重傳包判定
inline bool isnewersequencenumber uint16 t sequence number,uint16 t prev sequence number return sequence number prev sequence number static cast seque...
kvo實現原理 KVC KVO實現原理
一 kvc運用了乙個isa swizzling技術。isa swizzling就是型別混合指標機制。kvc主要通過isa swizzling,來實現其內部查詢定位的。isa指標,如其名稱所指,就是is a kind of的意思 指向維護分發表的物件的類。該分發表實際上包含了指向實現類中的方法的指標,...
實現原理 Vuex的實現原理
你知道vuex如何工作的嗎?先來看下圖了解下 了解圖之後看來下 的實現原理吧 let vue class store this.mutations this.actions this.vm new vue const options if getters if mutations if action...