webrtc video jitter詳解(一)

webrtc jitter中緩存最近一段時(shí)間內(nèi)的視頻數(shù)據(jù)包,供解碼線程取出解碼顯示积蜻。

本文以h264視頻為例講解緩存機(jī)制,webrtc先將接收到的rtp包組裝成幀數(shù)據(jù)(vcmframe)

1彻消,h264 rtp傳輸格式

h264在rtp包中的封裝格式如下浅侨,以下為借用網(wǎng)絡(luò)圖片

上圖的左邊的打包流程對(duì)應(yīng)的場(chǎng)景是“NALU的長度 <= MTU”,直接將NALU的header拷貝到H264 RTP?Payload Header上证膨,將NALU的RBSP拷貝到H264 RTP Payload Content上如输。

上圖右邊的打包流程對(duì)應(yīng)的場(chǎng)景是“NALU的長度 > MTU”,要將NALU的RBSP進(jìn)行分片央勒,以保證打包后的RTP報(bào)文長度不大于MTU不见,H264 RTP Payload Header由FU-identity + FU Header組成;FU-identity字段和NALU header字段的格式一樣(如果不一樣的話崔步,接收端就搞不清這是一個(gè)NALU分片還是一整個(gè)NALU了)稳吮,其最低的5bits表示payload的類型;FU payload就是NALU的RBSP(一部分)井濒;另外灶似,屬于同一H264幀的所有RTP頭的時(shí)間戳都要打成相同的,接收端根據(jù)時(shí)間戳來判斷哪些包是屬于同一個(gè)H264幀的瑞你。

webrtc中在RtpDepacketizerH264::Parse中解析rtp包

將fua格式的第一個(gè)包解析成single包組織方式酪惭,其他包去掉2byte頭

對(duì)于single和stap格式,每個(gè)rtp包的marker設(shè)置為1者甲。 fua格式春感,一幀最后一個(gè)包的marker設(shè)置為1,其他為0

if (is_first_packet_in_frame() && markerBit) { //single

? ? completeNALU = kNaluComplete;

? } else if (is_first_packet_in_frame()) { //fua第一個(gè)包

? ? completeNALU = kNaluStart;

? } else if (markerBit) { //fua最后一個(gè)包

? ? completeNALU = kNaluEnd;

? } else {? //fua中間包

? ? completeNALU = kNaluIncomplete;

2虏缸,jitterbuffer存儲(chǔ)格式

webrtc中VideoCodingModuleImpl是jitter總的接口

vcmpacket對(duì)應(yīng)rtp包鲫懒,vcmframe對(duì)應(yīng)一個(gè)完整的幀(fua格式需要將多個(gè)rtppacket合并,這通過sessioninfo完成)

VCMSessionInfo 將rtp packet組裝成可解碼的frame

VCMFrameBuffer? 封裝VCMSessionInfo方法

VCMDecodingState 記錄當(dāng)前已經(jīng)解碼幀的最后seq和tiemstamp等信息

frame在jitter中的存儲(chǔ)分為decodable_frames_刽辙、incomplete_frames_窥岩、free_frames_。下面為借用網(wǎng)絡(luò)上圖片

詳細(xì)可參閱文章http://www.reibang.com/p/bd10d60cebcd

其中decodable_frames_存儲(chǔ)可以解碼的幀(比如關(guān)鍵幀或者前序完整的P幀)宰缤;

incomplete_frames_存儲(chǔ)暫時(shí)不能解碼的幀:(1)本身rtp包不完整的幀(2)依賴的參考幀不完整的幀

為了更便于理解jitter的存儲(chǔ)機(jī)制颂翼,用以下的邏輯存儲(chǔ)格式來描述

每個(gè)方格為一幀數(shù)據(jù)vcmframe。

綠色表示可解碼幀(圖中1撵溃、2)疚鲤,存儲(chǔ)在decodable_frames_

紅漸變色表示rtp包不完整的幀(圖中3锥累、4)缘挑,存儲(chǔ)在incomplete_frames_

紅色表示rtp包完整,但是依賴的參考幀不完整(圖中5桶略、6)语淘,存儲(chǔ)在incomplete_frames_

白色表示還未接收到的包(圖中7)诲宇,存儲(chǔ)在missing_sequence_numbers_

每個(gè)gop都是以關(guān)鍵幀起始,如果關(guān)鍵幀不完整惶翻,那整個(gè)gop都不可解嗎姑蓝,必然都是存儲(chǔ)在incomplete_frames_中

在一個(gè)gop中,可解碼幀都是以關(guān)鍵幀起始吕粗,然后連續(xù)存儲(chǔ)在一起的纺荧。中間只要有間隔的不完整包或者丟失包,后面都是存儲(chǔ)在incomplete_frames_中颅筋。如圖中的5本身rtp包是完整的宙暇,但因?yàn)橐蕾噮⒄諑?、4不完整议泵,本身也不能解碼占贫,連鎖導(dǎo)致6也不能解碼。同樣圖中12由于依賴參考幀未接收到先口,暫時(shí)也不能解碼

decode_state記錄當(dāng)前解碼到哪一幀型奥,如圖中已解碼到9,那之前未解碼的幀(3~7)都丟棄碉京,未接收到的rtp也不再發(fā)送nack請(qǐng)求厢汹。

從圖中可以看出,未接收到包的重要程度是不同的谐宙,11的重要程度大于14坑匠,11的不完整影響了12和13的解碼。因此在網(wǎng)絡(luò)擁塞時(shí)卧惜,可以根據(jù)未接收到包的重要程度來優(yōu)先發(fā)送nack請(qǐng)求厘灼,盡可能使靠近關(guān)鍵幀的包接收完整。必要情況下可以丟棄重要程度低的nack請(qǐng)求咽瓷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末设凹,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子茅姜,更是在濱河造成了極大的恐慌闪朱,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件钻洒,死亡現(xiàn)場(chǎng)離奇詭異奋姿,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)素标,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門称诗,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人头遭,你說我怎么就攤上這事寓免⊙⒂眨” “怎么了?”我有些...
    開封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵袜香,是天一觀的道長撕予。 經(jīng)常有香客問我,道長蜈首,這世上最難降的妖魔是什么实抡? 我笑而不...
    開封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮欢策,結(jié)果婚禮上澜术,老公的妹妹穿的比我還像新娘。我一直安慰自己猬腰,他們只是感情好鸟废,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姑荷,像睡著了一般盒延。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鼠冕,一...
    開封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天添寺,我揣著相機(jī)與錄音,去河邊找鬼懈费。 笑死计露,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的憎乙。 我是一名探鬼主播票罐,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼泞边!你這毒婦竟也來了该押?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤阵谚,失蹤者是張志新(化名)和其女友劉穎蚕礼,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體梢什,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡奠蹬,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了嗡午。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片囤躁。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出割以,到底是詐尸還是另有隱情金度,我是刑警寧澤应媚,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布严沥,位于F島的核電站,受9級(jí)特大地震影響中姜,放射性物質(zhì)發(fā)生泄漏消玄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一丢胚、第九天 我趴在偏房一處隱蔽的房頂上張望翩瓜。 院中可真熱鬧,春花似錦携龟、人聲如沸兔跌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽坟桅。三九已至,卻和暖如春蕊蝗,著一層夾襖步出監(jiān)牢的瞬間仅乓,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來泰國打工蓬戚, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留夸楣,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓子漩,卻偏偏與公主長得像豫喧,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子幢泼,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

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

  • ### YUV顏色空間 視頻是由一幀一幀的數(shù)據(jù)連接而成嘿棘,而一幀視頻數(shù)據(jù)其實(shí)就是一張圖片。 yuv是一種圖片儲(chǔ)存格式...
    天使君閱讀 3,260評(píng)論 0 4
  • 視頻壓縮編碼的目標(biāo)1)保證壓縮比例2)保證恢復(fù)的質(zhì)量3)易實(shí)現(xiàn)旭绒,低成本鸟妙,可靠性 壓縮的出發(fā)點(diǎn)(可行性)1)時(shí)間相關(guān)...
    rogerwu1228閱讀 4,142評(píng)論 0 11
  • 音視頻基礎(chǔ)知識(shí) 一、音頻入門 1.1 音頻量化與編碼 采樣大谢映场:一個(gè)采樣使用多少 bit 存放重父,常用的是 16 b...
    csranger閱讀 1,303評(píng)論 0 2
  • 本篇隸屬于文集:《H264/AVC 句法和語義詳解》,查看文集全部文章忽匈,請(qǐng)點(diǎn)擊文字鏈接房午。想看最新文章,可以直接關(guān)注...
    金架構(gòu)閱讀 9,954評(píng)論 0 17
  • 前言 為什么需要視頻編碼呢丹允?比如當(dāng)前屏幕是1280*720一秒30張圖片.那么我們一秒的視頻數(shù)據(jù)是1280 * 7...
    Leon_520閱讀 1,982評(píng)論 0 6