WebRTC研究 audio 丟包判斷

2021-10-04 11:36:26 字數 1503 閱讀 3942

當收到乙個包時,丟包判斷原理:

/*

sequence_number:當前收到的包的序列號

timestamp:當前收到的包的時間戳

*/void nacktracker:

:updatelastreceivedpacket

(uint16_t sequence_number, uint32_t timestamp)

return;}

/* 如果是上乙個包, */

if(sequence_number == sequence_num_last_received_rtp_)

return

;/* nack_list_:丟包集合 */

nack_list_.

erase

(sequence_number);/*

將當前包 與 最近收到的新包 對比,判斷當前包是否為重傳或亂序包

是的話,直接返回

*/if(

isnewersequencenumber

(sequence_num_last_received_rtp_, sequence_number)

)return

;/* 對比 當前包 與 最新收到的包 的序列號與時間戳,更新每個包的樣本數:samples_per_packet_ */

updatesamplesperpacket

(sequence_number, timestamp)

;/* 更新丟包集合:nack_list_ */

updatelist

(sequence_number)

;/* 更新最新收包的序列號與時間戳 */

sequence_num_last_received_rtp_ = sequence_number;

timestamp_last_received_rtp_ = timestamp;

/* 丟棄掉集合 nack_list_ 中不能重傳的包資訊,同時保證集合容量不超過限制 */

limitnacklistsize()

;}

void nacktracker:

:updatelist

(uint16_t sequence_number_current_received_rtp)

void nacktracker:

:changefromlatetomissing

(uint16_t sequence_number_current_received_rtp)

void nacktracker:

:addtolist

(uint16_t sequence_number_current_received_rtp)

}

void nacktracker:

:limitnacklistsize()

WebRTC中丟包重傳機制的實現

當網路質量突然變的很差並開始丟包時,聲音聽起來音質會變差,畫面幀速會下降,甚至會完全卡住。我們可能需要某種機制來應對這種情況。在webrtc中,主要有兩種機制來應該網路變差的情況 前向糾錯 在每個資料報中,您將新增一些關於前乙個資訊的資訊,以防丟失,您需要重新構建它們 flexfec是webrtc ...

webrtc研究 remb協議分析

分析入口 webrtc ideo vie remb.cc void vieremb onreceivebitratechanged const std vector ssrcs,uint32 t bitrate bitrate bitrate calculate total receive bitr...

UDP丟包原因

一 主要丟包原因 1 接收端處理時間過長導致丟包 呼叫recv方法接收端收到資料後,處理資料花了一些時間,處理完後再次呼叫recv方法,在這二次呼叫間隔裡,發過來的包可能丟失。對於這種情況可以修改接收端,將包接收後存入乙個緩衝區,然後迅速返回繼續recv。2 傳送的包巨大丟包 雖然send方法會幫你...