webrtc QOS方法十(pacer實現)

2021-10-14 16:11:09 字數 1892 閱讀 8377

若僅僅傳送音訊資料,不需要pacer模組:

pace queue是乙個基於優先順序排序的多維鍊錶,它並不是乙個先進先出的fifo,而是乙個按優先順序排序的list。報文優先順序規則是:

根據報文型別確定資料優先順序處理函式如下:

按照優先順序pop資料處理函式如下:

pacingcontroller::nextsendtime、pacingcontroller::processpackets是pacer模組兩個核心函式,pacingcontroller::processpackets按照pacingcontroller::nextsendtime控制的節奏週期呼叫。完成pacer平滑傳送功能。

pacingcontroller::nextsendtime在控制傳送節奏上,有兩種模式kperiodic、kdynamic。kdynamic還沒理解透,這裡先記錄kperiodic實現方式。

kperiodic模式下,固定每隔5ms呼叫一次傳送報文任務。

pacingcontroller::processpackets被定時觸發後,會計算當前時間和上次被呼叫時間的時間差,然後將時間差引數傳入media_budget_,media_budget_算出當前時間片網路可以傳送多少資料,然後從pacer queue當中取出報文元資料進行網路傳送。

delta time:上次檢查時間點和這次檢查時間點的時間差。

remain_bytes:每次觸發發包時會減去傳送報文的長度size,如果remain_bytes > 0,繼續從pace queue中取下乙個報文進行傳送,直到remain_bytes <=0 或者 pace queue沒有更多的報文。

如果pacer queue沒有更多待傳送的報文,但media_budget_計算出還可以傳送更多的資料,這個時候pacer會進行padding報文補充。

pacer模組定量計算傳送網路報文資料量,相當於cache等待傳送,必然會引起延遲。為了保證實時性,pacer模組有個max_pacing_delay全域性變數,配置最大緩衝傳送延時時間上限,若最大緩衝延時大於該值,就要重新調整pacer模組的目標位元速率,保證當前資料都能及時傳送出去。

會實時計算當前處理方式會引入的系統延時,當延時大於設定目標上限值,需要及時調整pacer目標位元速率,保證pacer模組引入延時時間可控。

很明顯這僅僅是乙個迫不得己的規避方法,實際應用中,這種方法會出現位元速率梯度上公升現象。

1、首先探測模組配置位元速率給編碼器,編碼器一定要保證在可控週期內位元速率收斂到配置的位元速率引數值以內,否則會給pacer模組造成的累計延時越來越大壓力。

2、另外ip幀rate也要在合理範圍內。若i幀超大,勢必導致關鍵幀傳輸延時變大,影響端到端系統延時。

這些引數都要根據自己的實際應用場景進行調優。

webrtc QOS方法(彙總篇)

目前總結出webrtc用於提公升qos的方法有 nack fec svc jitterbuffer idr request pacer sender side bwe vfr 動態幀率調整策略 這幾種方法在webrtc架構分布如下 具體實現原理如下 與nack對應的是ack,ack是到達通知技術。以...

webrtc QOS方法七(攝像頭採集幀率調整)

檢查cpu占有率 編碼解碼時間,都沒有異常。按理來說效能是可以達到30fps的實時通訊能力的。1 首先確認到底是不是攝像頭採集出來的幀率就低,還是系統排程慢,導致採集幀率低。ffmpeg的命令列如下 ffmpeg list devices true f dshow i dummy 顯示要採集攝像頭裝...

WEB測試方法(十)

業務流程,一般會涉及到多個模組的資料,所以在對業務流程測試時,首先要保證單個模組功能的正確性,其次就要對各個模組間傳遞的資料進行測試,這往往是容易出現問題的地方,測試時一定要設計不同的資料進行測試。1 sql 注入 比如登陸頁面 2 xss跨 指令碼攻擊 程式或 資料庫沒有對一些特殊字元進行過濾或處...