WebRTC之視頻NackModule

NackModule

一個(gè)包的最大請求次數(shù)是kMaxNackRetries(10)次候学,最大請求時(shí)間是10*rtt,在這個(gè)時(shí)間內(nèi)還沒有獲取到丟失的包則不再請求
對(duì)外提供的接口如下,源碼

const int kDefaultRttMs = 100;
const int kMaxNackRetries = 10;
const int kProcessFrequency = 50;
const int kProcessIntervalMs = 1000 / kProcessFrequency;
int OnReceivedPacket(const VCMPacket& packet);
void ClearUpTo(uint16_t seq_num);
void UpdateRtt(int64_t rtt_ms);
void Clear();
int64_t TimeUntilNextProcess() override;
void Process() override;
  • OnReceivedPacket
    數(shù)據(jù)走向:RtpReceiverImpl::IncomingRtpPacket -> RTPReceiverVideo::ParseRtpPacket -> RtpVideoStreamReceiver::OnReceivedPayloadData -> NackModule::OnReceivedPacket
    • IncomingRtpPacket
      數(shù)據(jù)從網(wǎng)卡過來盐捷,經(jīng)過上一層的分發(fā)(每個(gè)ssrc會(huì)對(duì)應(yīng)一個(gè)RtpReceiver實(shí)例)孽江,這里會(huì)根據(jù)payloadType得到對(duì)應(yīng)的視頻編解碼類型
    • ParseRtpPacket
      根據(jù)視頻編解碼類型調(diào)用對(duì)應(yīng)的RtpDepacketizer解析此包,得到幀類型(FrameType)和幀信息(RTPTypeHeader -> RTPVideoHeader)等信息
    • OnReceivedPayloadData
      添加ntp時(shí)間直接交付給nack模塊
  1. 所以到了nack模塊是可以知道此包是否是關(guān)鍵幀的包宣鄙,是否是一幀的第一個(gè)包袍镀,包序號(hào)等信息。
  2. 例如收到1 2 3 6 7 4 5等包冻晤,那么在收到序號(hào)為6的包的時(shí)候就認(rèn)為4和5這兩個(gè)包丟失了苇羡,具體可以閱讀AddPacketsToNack這個(gè)函數(shù),然后把4和5兩個(gè)包加入到nack列表中(nack_list_)鼻弧,當(dāng)收到5這個(gè)包的時(shí)候從nack列表中移除
  3. 調(diào)用GetNackBatch(kSeqNumOnly)找到缺失的包序號(hào)设江,kSeqNumOnly選項(xiàng)觸發(fā)第一次nack請求,所以nack請求是非常及時(shí)的
  • ClearUpTo
    此函數(shù)最終是由幀緩觸發(fā)的FrameBuffer::InsertFrame攘轩,幀緩沖只保留kMaxFramesBuffered幀叉存,并且當(dāng)幀是亂序的時(shí)候也不要此幀。清除到此序號(hào)的nack列表和關(guān)鍵幀列表

  • UpdateRtt
    更新rtt時(shí)間度帮,rtt是根據(jù)sr包的信息計(jì)算得到的歼捏,第一個(gè)包的nack觸發(fā)以后,后面的9次觸發(fā)都是依據(jù)rtt時(shí)間而定的笨篷。也就是說nack請求的間隔是nack1 rtt nack2 rtt nack3 ...

  • Clear
    清空nack列表和關(guān)鍵幀列表

  • TimeUntilNextProcess
    獲取下一次執(zhí)行Processc的時(shí)間甫菠,每隔kProcessIntervalMs(20ms)檢查一次

  • Process
    依據(jù)rtt找到當(dāng)前需要發(fā)送的nack序號(hào),并遞增nack的重試次數(shù)(retries)冕屯,當(dāng)超過最大重試次數(shù)時(shí)寂诱,不再請求此序號(hào)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市安聘,隨后出現(xiàn)的幾起案子痰洒,更是在濱河造成了極大的恐慌,老刑警劉巖浴韭,帶你破解...
    沈念sama閱讀 222,729評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丘喻,死亡現(xiàn)場離奇詭異,居然都是意外死亡念颈,警方通過查閱死者的電腦和手機(jī)泉粉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人嗡靡,你說我怎么就攤上這事解恰〗眩” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵,是天一觀的道長欺嗤。 經(jīng)常有香客問我仗岖,道長蔓姚,這世上最難降的妖魔是什么惕耕? 我笑而不...
    開封第一講書人閱讀 60,135評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蜜自,結(jié)果婚禮上菩貌,老公的妹妹穿的比我還像新娘。我一直安慰自己重荠,他們只是感情好菜谣,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著晚缩,像睡著了一般。 火紅的嫁衣襯著肌膚如雪媳危。 梳的紋絲不亂的頭發(fā)上荞彼,一...
    開封第一講書人閱讀 52,736評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音待笑,去河邊找鬼鸣皂。 笑死,一個(gè)胖子當(dāng)著我的面吹牛暮蹂,可吹牛的內(nèi)容都是我干的寞缝。 我是一名探鬼主播,決...
    沈念sama閱讀 41,179評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼仰泻,長吁一口氣:“原來是場噩夢啊……” “哼荆陆!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起集侯,我...
    開封第一講書人閱讀 40,124評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤被啼,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后棠枉,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體浓体,經(jīng)...
    沈念sama閱讀 46,657評(píng)論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評(píng)論 3 342
  • 正文 我和宋清朗相戀三年辈讶,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了命浴。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,872評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖生闲,靈堂內(nèi)的尸體忽然破棺而出媳溺,到底是詐尸還是另有隱情,我是刑警寧澤跪腹,帶...
    沈念sama閱讀 36,533評(píng)論 5 351
  • 正文 年R本政府宣布褂删,位于F島的核電站,受9級(jí)特大地震影響冲茸,放射性物質(zhì)發(fā)生泄漏屯阀。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評(píng)論 3 336
  • 文/蒙蒙 一轴术、第九天 我趴在偏房一處隱蔽的房頂上張望难衰。 院中可真熱鬧,春花似錦逗栽、人聲如沸盖袭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鳄虱。三九已至,卻和暖如春凭峡,著一層夾襖步出監(jiān)牢的瞬間拙已,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評(píng)論 1 274
  • 我被黑心中介騙來泰國打工摧冀, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留倍踪,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,304評(píng)論 3 379
  • 正文 我出身青樓索昂,卻偏偏與公主長得像建车,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子椒惨,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容