日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

webrtc jitterbuffer--buffer草稿

發布時間:2023/12/14 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 webrtc jitterbuffer--buffer草稿 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

webrtc的jitterbuffer按照功能分類的話,可以分為jitter和buffer。buffer主要對丟包、亂序、延時到達等異常情況做處理,還會和NACK、FEC、FIR等QOS相互配合.jitter就是trendline算法的jitter.

為什么要有jitterbuffer:
假設40ms一幀,1s 25幀. 發送時間序列0,40,80,120,160,200ms。網絡延時100ms;接收序列:100,140,200,240,280,300,400ms.
如果沒有jitterbuffer則在180ms發生卡頓,因為幀沒有到。
所以先緩存一段最大延時,然后播放,后面就再也不會有卡頓了。
那么最大等多久呢?不會造成任何幀卡頓。決定延時的兩個因素:網速和路由器buffer。
用最大幀測試這兩個值得到的就是max的jitterbuffer. 即每幀都不會超過這個時間到達。那么之后就在不會卡頓了。

第一部分 新版jitter buffer

整體結構:

  • PacketBuffer:負責幀的完整性,保證組成幀的每個包序列號連續,并且有一個包標識幀的開始,有一個包標識幀的結束;
  • RtpFrameReferenceFinder:幀參考關系尋找.負責給每個幀設置好參考幀,同時兼顧GOP內各幀的連續性;
  • FrameBuffer:幀緩存.負責幀的連續性和可解碼性,這里幀的連續性是指某幀的所有參考幀都已經收到,幀的可解碼性是指某幀的所有參考幀都已經被解碼;

VCMJitterEstimator:計算抖動(googJitterbufferMS),用于計算目標延遲(googTargetDelayMs),用于音視頻同步;
VCMTiming:計算當前延遲(googCurrentDelayMs),用于計算渲染時間。

JitterBuffer流程圖

PacketBuffer:就是一幀的包亂序,在這個把一幀的包收集全了,幀完整在給下一環節
RtpFrameReferenceFinder:是保證幀的順序,把來的完整的幀排序,不產生幀順序錯誤。
同時設置參考幀,當前幀把前一幀設置成參考幀.
FrameBuffer 也設置參考幀不知道why? 它還會獲取jitter值,編碼器從這里獲取幀和jitter值

1)RtpVideoStreamReceiver類收到RTP包后,交給PacketBuffer類緩存、排序
2)PacketBuffer收集滿1個完整的幀后,交還給RtpVideoStreamReceiver類,RtpVideoStreamReceiver類將一個完整的幀交給RtpFrameReferenceFinder。
3)RtpFrameReferenceFinder類緩存最近的GOP,每個完整幀落在一個GOP中會填充好該幀的參考幀,交還給RtpVideoStreamReceiver。
notes:P幀的前一幀就是參考幀
4)RtpVideoStreamReceiver將填充好參考幀的完整幀交給FrameBuffer
5)?FrameBuffer判斷某幀的所有參考幀都收到認為該幀連續,在某幀的所有參考幀都解碼后認為該幀可以解碼,從而可以交給解碼器。?
notes:保存一個GOP的所有frame。如果參考幀已經解碼,說明這幀可以放入解碼器了

JitterBuffer的這些模塊分三個層次:分別做了RTP包的排序,GOP內幀的排序,GOP之間的排序??

  • 包的排序:PacketBuffer;
  • 幀的排序:RtpFrameReferenceFinder;
  • GOP的排序:FrameBuffer。
    notes:GOP排序?應該是一個GOP內部的事情

4.8 總結
PacketBuffer::InsertPacket向包緩存插入RTP數據,并觸發幀完整性檢查;
PacketBuffer::PaddingReceived處理空包,并觸發幀完整性檢查;
PacketBuffer::UpdateMissingPackets,更新丟包信息,用于檢查P幀前面的空洞;
PacketBuffer::PotentialNewFrame,判斷包的連續性,只有連續的包才檢查幀完整性;
PacketBuffer::FindFrames,幀完整性檢查,如果得到完整幀,則通過OnAssembledFrame回調上報
參考:WebRTC視頻JitterBuffer詳解_一朵喇叭花壓海棠的博客-CSDN博客_jitterbuffer
WebRTC視頻接收JitterBuffer_StoneLiu999的博客-CSDN博客

,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,

第二部分:舊版webrtc:VCMJitterBuffer 實現原理

Buffer?decodable_frames_和incomplete_frames_

這里介紹的是播放器的jitterbuffer

decodable_frames_存儲可以解碼的幀(比如關鍵幀或者前序完整的P幀);
incomplete_frames_存儲暫時不能解碼的幀:(1)本身rtp包不完整的幀.(2)依賴的參考幀不完整的幀

為了更便于理解jitter的存儲機制,用以下的邏輯存儲格式來描述


每個方格為一幀數據vcmframe。

  • 綠色表示可解碼幀(圖中1、2),存儲在decodable_frames_
  • 紅漸變色表示rtp包不完整的幀(圖中3、4),存儲在incomplete_frames_
  • 紅色表示rtp包完整,但是依賴的參考幀不完整(圖中5、6),存儲在incomplete_frames_
  • 白色表示還未接收到的包(圖中7),存儲在missing_sequence_numbers_
  • 每個gop都是以關鍵幀起始,如果關鍵幀不完整,那整個gop都不可解嗎,必然都是存儲在incomplete_frames_中.
  • 在一個gop中,可解碼幀都是以關鍵幀起始,然后連續存儲在一起的。中間只要有間隔的不完整包或者丟失包,后面都是存儲在incomplete_frames_中。如圖中的5本身rtp包是完整的,但因為依賴參照幀3、4不完整,本身也不能解碼,連鎖導致6也不能解碼。同樣圖中12由于依賴參考幀未接收到,暫時也不能解碼.
  • decode_state記錄當前解碼到哪一幀,如圖中已解碼到9,那之前未解碼的幀(3~7)都丟棄,未接收到的rtp也不再發送nack請求。?
  • 從圖中可以看出,未接收到包的重要程度是不同的,11的重要程度大于14,11的不完整影響了12和13的解碼。因此在網絡擁塞時,可以根據未接收到包的重要程度來優先發送nack請求,盡可能使靠近關鍵幀的包接收完整。必要情況下可以丟棄重要程度低的nack請求

    Buffer 流程圖

    ?buffer對接收到的rtp包的處理流程如下:

    • 第一次接收到一個視頻包,從freeframes隊列中彈出一個空frame塊,用來放置這個包。
      notes:新包分配一個新frame buffer
    • 之后每次接收到一個RTP包,根據時間戳在incompleteframes和decodableframes中尋找,看是否已經接收到過相同時間戳的包。
      如果找到,則彈出該frame塊,否則,從freeframes彈出一個空frame。
      notes:同一幀的包使用相同的frame buffer
    • 根據包的序列號,找到應該插入frame的位置,并更新state。
      其中state有empty、incomplete、decodable和complete,empty為沒有數據的狀態,incomplete為至少有一個包的狀態,decodable為可解碼狀態,complete為這一幀所有數據都已經到齊。
    • 根據不同的state將frame幀 push回到隊列中去。
      其中state為incomplete時,push到incompleteframes隊列,
      decodable和complete狀態的frame,push回到decodableframes隊列中
      notes:收到包之后檢查,如果一個幀的所有包都收到了,就放入decodableframes隊列。否則,仍在incompleteframes隊列
    • freeframes隊列有初始size,freeframes隊列為空時,會增加隊列size,但有最大值。
      也會定期從incompleteframes,decodable隊列中,清除一些過時的frame,push到freeframes隊列
      notes:釋放過時的frame給回到freeframes 隊列.
    • 解碼線程取出frame,解碼完成之后,push回freeframes隊列。
      notes:解碼完成的frame放回到freeframes隊列

    jitterbuffer與QOS策略聯系緊密,比如,incompleteframes和decodable隊列清除一些frame之后,需要FIR(關鍵幀請求),根據包序號檢測到丟包之后要NACK(丟包重傳)等。

    webrtc源碼分析(6)- jitter delay計算詳解 - woder - 博客園

    源碼解析:webrtc QOS方法八(JitterBuffer)_CrystalShaw的博客-CSDN博客

    總結

    以上是生活随笔為你收集整理的webrtc jitterbuffer--buffer草稿的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 卡一卡二av | 在线免费观看成年人视频 | 公交顶臀绿裙妇女配视频 | 草草在线观看视频 | 精品综合在线 | 青青操国产视频 | 体感预报日剧 | 人操人 | 无码精品人妻一区二区三区湄公河 | 69久久夜色精品国产69 | 日韩经典一区二区三区 | 在线观看日本网站 | 亚洲福利一区二区 | 无码人妻精品一区二区三区66 | 迈开腿让我尝尝你的小草莓 | 激情伊人网 | 综合中文字幕 | 欧洲一区在线观看 | 色噜噜狠狠一区二区三区牛牛影视 | 色精品视频 | 诱惑の诱惑筱田优在线播放 | yjizz视频| 国产精品xxx视频 | 国产69精品久久久久777 | 欧美日韩不卡合集视频 | 色中文在线 | 国产又黄又粗 | 中文在线字幕免费观看 | 国产激情视频在线播放 | 97精品人人妻人人 | 日本精品视频网站 | 二区三区在线视频 | 亚洲一区二区在线电影 | 亚洲小视频网站 | 久草资源在线播放 | av女大全列表| 永久免费成人代码 | 精品少妇人妻av免费久久久 | 噼里啪啦国语高清 | 国产精品一区二区免费看 | 国产激情自拍视频 | 午夜在线播放 | 秋霞影院一区二区 | 国产视频日本 | 国产日韩欧美一区二区 | 年下总裁被打光屁股sp | 欧美一级黄色录像 | 国产精品精华液网站 | 中国肥胖女人真人毛片 | 色原网 | 亚洲熟女www一区二区三区 | 国产小视频自拍 | 久久逼逼| 萌白酱一区二区 | 大吊一区二区三区 | 国产三级国产精品国产专区50 | 国产三级av在线 | 丰满人妻一区二区三区无码av | 激情久久免费视频 | www亚洲一区| 亚洲人成电影在线 | 亚洲欧美一区二区三区四区 | 激情丁香婷婷 | 69人妻精品久久无人专区 | 第四色激情 | 一区二区三区在线观看免费视频 | 综合激情网五月 | 大地资源中文在线观看免费版 | 日本a级免费 | 久热精品视频在线 | 亚洲成人aaa | 91免费视频入口 | av在线网页 | 在线观看的av| 欧美一级一级一级 | 免费一级全黄少妇性色生活片 | 意大利少妇愉情理伦片 | 国产冒白浆| 国产乱子伦精品无码专区 | 亚洲一区二区免费视频 | 伊人激情影院 | 美女免费福利视频 | 久国产精品 | 亚洲大片免费 | 性感美女一区二区三区 | 黄色免费片| 成人音影 | 亚洲资源网站 | 国产精品一级片 | 欣赏asian国模裸体pics | 日韩三级一区二区 | 亚洲欧美日韩动漫 | 国产毛片精品国产一区二区三区 | 精品一区二区毛片 | 正在播放老肥熟妇露脸 | 中文字幕免费视频 | 极品av在线 | 日韩午夜视频在线 | 蜜桃99视频一区二区三区 |