1. 程式人生 > >實時視訊流的擁塞控制-NADA,GCC,SCReAM

實時視訊流的擁塞控制-NADA,GCC,SCReAM

 關於三個協議表現,我在ns3模擬平臺上進行了對比,相應的技術報告,參考[18]。
 本文主要是對於[1]的翻譯. I’m not the master of knowledge, and I am his prophet.
 IETF成立了RMCAT(RTP Media Congestion Avoidance Techniques)工作組,制定在RTP協議之上的擁塞控制機制。[5]中的首段話,指明只要是經由網路的資料流,都應該有擁塞控制機制,說的很好,抄在這裡:

Congestion control is needed for all data transported across the Internet, in order to promote fair usage and prevent congestion collapse. The requirements for interactive, point-to-point real-time multimedia, which needs low-delay, semi-reliable data delivery, are different from the requirements for bulk transfer like FTP or bursty transfers like Web pages. Due to an increasing amount of RTP-based real-time media traffic on the Internet (e.g. with the introduction of the Web Real-Time Communication (WebRTC)), it is especially important to ensure that this kind of traffic is congestion controlled.

  假設一條經由網路的資料流沒有任何擁塞控制機制,盲目地向網路中傳送資料包,當突發包的長度大於某個值,超出了瓶頸鍊路的處理能力,網路中的佇列管理機制就要發揮作用,進行丟包。丟包行為本身就是一種資源浪費的策略,耗費了網路的處理能力,資料包卻沒有到達目的地。所以,網路中的資料流要根據反饋訊號,調整資料包的傳送速率,與網路中流的數量和處理能力適配。當前,端到端的擁塞控制機制主要有兩類:基於丟包反饋的(TCP Reno,BIC,CUBIC),基於時延測量的(TCP Vegas, TCP Fast)。其實還有第三類,基於擁塞的擁塞演算法(BBR),算是一種混合了丟包與時延的方案,因為網路的丟包,以及時延的增加,這個會影響BBR的即時頻寬的計算,也就影響BBR的傳送包的速率。
 對於實時視訊流,更偏向於採用基於時延的擁塞控制策略,因為基於丟包的擁塞控制策略,通過向網路中填充資料包,發現可用頻寬,可導致端到端時延的震盪。但是目前路由器上佇列長度的很深,導致了很大的端到端時延.Excessively large buffer may leads to latency of seconds which is referred as buffbloat problem, and packet loss is a rare event. 鑑於網路的視訊流量逐漸佔據主流,所以出現了CoDel[6]與PIE[7],通過丟包來控制路由器中的佇列長度,保證較小的端到端時延,保證QoE。端到端較小的時延,是通過佇列主動丟包實現的,讓丟包的流在發現丟包之後,調整發送速率。
 [5]中指明瞭實時媒體流進行擁塞控制要達到的目標:

metrics Requirement
Latency Possibly lower than 100ms
Packet losses Should be minimized, FEC mechanism may be employed
Throughput Should be as high as possible
Burstiness A smooth sending-rate should be produced
Fairness Should fairly share the bandwidth with real-time and data flows
Starvation Media flows should not be starved when competing with TCP flows
Network support No special network support should be required to operate

 因此基於時延的引數主要有三種:Round Trip Time,One-Way Delay, One-Way Delay Variation.
 基於RTT時延的擁塞控制機制有TCP Vegas,TCP FAST.RTT將反向鏈路的時延考慮在內,反向鏈路的擁塞可能影響正向鏈路的傳送速率。Tcp Vegas的經驗表明,基於時延的擁塞控制演算法,同基於丟包的擁塞控制演算法競爭瓶頸鍊路頻寬時,會被餓死。OWD,測量的是單向路徑時延,有接收端與傳送端時鐘同步的需要,而且OWD有一個“late comer effect”,後到的流增加了網路上的處理時延,使得之前的流逐漸出讓頻寬,導致先前的流餓死。OWDV通過計算前後資料包的接收時間差與傳送時間差(Δd=titi1(TiTi1)),作為網路擁塞訊號。這種測量方法,不需要兩端之間的時鐘同步。這個公式就是計算資料包之間的抖動,能夠反映中網路中的佇列變化情況。若Δd>0表明網路中的佇列長隊在增加,排隊時延在增加;若Δd<0,表明網路中的佇列在減少,排隊時延在減少。但是Δd=0的情況就比較複雜,1網路利用率不足,但是網路佇列基本為空;2網路佇列滿載,網路流填充網路的速度超出了網路的處理能力;3網路流的傳送速率和網路的處理能力相等。
 REMAT工作組主要有三個草案,GCC[3,11],NADA[2,10],SCReAM[4,12]。
 webrtc中的擁塞控制機制就是GCC,網上有博文介紹[8,9],不提。
 NADA通過獲取路徑的時延引數,控制視訊編碼器的編碼速率Rn.NADA主要糅合one way delay(dn),丟包時延(dL,將丟包行為轉化為一個懲罰時延,可以設定為1s),ECN標記時延(dM,網路路由器標記擁塞訊號也被轉化為一個懲罰時延,可以設定為200ms)來計算出一個綜合時延(d~,aggregate delay)。第n個包的時延計算如下,其中1nM被網路路由器標記了擁塞訊號,1nL表示資料包丟包。
(1)dn~=dn+1nMdM+1nLdL.
向接收端反饋的數值要進行指數平滑:
(2)xn=αdn~+(1α)xn1.
接收端每隔δ=100ms向接收端反饋資料:
(3)x^=x(t)+x(t)x(tδ)δτo.
 其中,在webrtc的對NADA的模擬程式碼中(nada.cc),傳送端回饋的是x(t),就是平滑後的xn(fb.congestion_signal())和導數x(t)x(tδ)δ,x(tδ)為計算出的xn1. τo為一個固定值,500ms。照我理解,δ是一個固定值,但是接收端反饋的時候,有定時器之類的是有誤差,最後計算出來的是一個修正值x^.這個值影響編碼器的參考編碼位元速率,xref是一個固定的參考值,w表示流的權重,網路中不同的流有不同的優先順序.編碼器的編碼速率

相關推薦

實時視訊流擁塞控制-NADAGCCSCReAM

 關於三個協議表現,我在ns3模擬平臺上進行了對比,相應的技術報告,參考[18]。  本文主要是對於[1]的翻譯. I’m not the master of knowledge, and I am his prophet.  IETF成立了RMCAT(RT

[RTC] NADAGCCSCReAM

端到端的擁塞控制機制 當前,端到端的擁塞控制機制主要有兩類:基於丟包反饋的(TCP Reno,BIC,CUBIC),基於時延測量的(TCP Vegas, TCP Fast)。其實還有第三類,基於擁塞的擁塞演算法(BBR),算是一種混合了丟包與時延的方案,因為網路的丟包,以及時延的增加,這

TCP擁塞控制:慢啟動擁塞避免快速重傳快速恢復

擁塞控制的目的:為了提高網路利用率,降低丟包率,並保證網路資源對每條資料流的公平性擁塞控制最終是控制了什麼?:傳送端向網路一次連續寫入的資料量,即SWND(傳送視窗)。慢啟動:當主機開始傳送資料時,如果立即將大量資料注入網路,就容易引起網路擁塞。而慢啟動演算法就是先給定一個較

Linux下的開發工具:vimgccgdbmakefile以及yum語句安裝軟體

Linux下的開發工具:vim,gcc,gdb,makefile以及yum語句安裝軟體 1. vi/vim  vi/vim都是多模式編譯器,vim是vi的升級版本。vim有12個模式,在這我們先說3種模式,命令模式,插入模式,底行模式。 2. vim基本操作: $vim t

小議WebRTC擁塞控制演算法:GCC介紹

網路擁塞是基於IP協議的資料報交換網路中常見的一種網路傳輸問題,它對網路傳輸的質量有嚴重的影響,網路擁塞是導致網路吞吐降低,網路丟包等的主要原因之一,這些問題使得上層應用無法有效的利用網路頻寬獲得高質量的網路傳輸效果。特別是在通訊領域,網路擁塞導致的丟包,延遲,抖動等問題,嚴重的影響了通訊質量,如果

GNUgccg++gdbcc概念

1.GNU GNU是“GNU's Not Unix”的遞迴縮寫。Stallman宣佈GNU應當發音為Guh-NOO以避免與new這個單詞混淆(注:Gnu在英文中原意為非洲牛羚,發音與new相同)。UNIX是一種廣泛使用的商業作業系統的名稱。由於GNU將要實現UNIX系統的介

uc筆記01---UnixLinux程式構建過程gcc標頭檔案預處理環境變數配置

1.    Unix 作業系統     1)簡介         美國 AT&T 公司貝爾實驗室,         1971 年,         肯.湯普遜、丹尼斯.裡奇。         多使用者、多工、支援多種處理器架構。         高安全性、高可靠性,

《物聯網框架ServerSuperIO教程》-22.Web端對傳感器實時監測與控制。附:v3.6.8版本支持WebSocket

實時數據 title bmp 角色 1.4 增加 str 通訊 git 1.ServerSuperIO v3.6.8更新內容 1.1 增加WebSocket服務端功能,支持自控模式、並發模式、單例模式,不支持輪詢模式1.2 接收數據緩存與現有的IO實例分離。1.3 優化代

TCP連線管理機制-確認應答超時重傳滑動視窗擁塞控制流量控制延遲應答

TCP通過確認應答和超時重傳可以保證資料可靠傳輸 使用滑動視窗完成流量控制和擁塞控制 使用延遲應答來保證滑動視窗足夠大 接下來對這些機制進行詳細的介紹 確認應答(ACK)機制 TCP將每個位元組的資料都設定了序列號,每一個ACK都帶有對應的確認序列號,告訴傳送者

Keras搭建CNN進行人臉識別系列(二)--配置獲取實時視訊流

1.準備工作 1)首先需要準備一個USB攝像頭,能夠支援Ubuntu之類的linux作業系統; 2)PC機上安裝好Ubuntu14以上64位版本(儘量雙系統不要虛擬機器,不然模型訓練速度會慢得像蝸牛),可以安裝win7/win10,但我沒有試過在64位win系統上安裝te

TCP連線擁塞控制四種方法總結(詳細簡單穩的一批)

擁塞控制的一般原理 在某段時間,若對網路中某一資源的需求超過了該資源所能提供的可用部分,網路的效能就要變換,叫做擁塞 擁塞控制和流量控制的區別: 擁塞控制往往是一種全域性的,防止過多的資料注入到網路之中,而TCP連線的端點只要不能收到對方的確認資訊,猜想在網路中發生了擁塞,但並不知道發生

《物聯網框架ServerSuperIO教程》-22.Web端對感測器實時監測與控制。附:v3.6.8版本支援WebSocket

1.ServerSuperIO v3.6.8更新內容 1.1 增加WebSocket服務端功能,支援自控模式、併發模式、單例模式,不支援輪詢模式1.2 接收資料快取與現有的IO例項分離。1.3 優化程式碼。 2.監測與控制的結構圖 3.Web端對感測器監測與控制,視訊教程內容 外掛化驅

TCP滑動視窗流量控制擁塞控制原理介紹

TCP協議作為一個可靠的面向流的傳輸協議,其可靠性和流量控制由滑動視窗協議保證,而擁塞控制則由控制視窗結合一系列的控制演算法實現。一、滑動視窗協議     關於這部分自己不曉得怎麼敘述才好,因為理解的部分更多,下面就用自己的理解來介紹下TCP的精髓:滑動視窗協議。     所

tcp/ip下擁塞控制演算法

TCP的RTT演算法 從前面的TCP重傳機制我們知道Timeout的設定對於重傳非常重要。 設長了,重發就慢,丟了老半天才重發,沒有效率,效能差;設短了,會導致可能並沒有丟就重發。於是重發的就快,會增加網路擁塞,導致更多的超時,更多的超時導致更多的重發。 而且,這個超時

圖解擁塞控制這應該是把擁塞控制講的最通俗易懂的文章了

大家可能都聽說過擁塞控制和流量控制,想必也有一些人可能還分不清擁塞控制和流量控制,進而把他們當作一回事。擁塞控制和流量控制雖然採取的動作很相似,但擁塞控制與網路的擁堵情況相關聯,而流量控制與接收方的快取狀態相關聯。 也就是說,擁塞控制和流量控制是針對完全不同的問題而採取的措施。今天這篇文章,我們先來講講擁塞控

C++筆記(11):拷貝控制(拷貝移動構造賦值析構)

con 對象 構造函數 col let 拷貝控制 支持 運算符 () 控制對象拷貝,賦值,析構   拷貝構造函數,移動構造函數   拷貝賦值運算符,移動賦值運算符   析構函數 -----------------------------------------------

GCCLLVMClang編譯器對比

正則表達 開發 anti border 詳細 ssi program exp tel http://www.cnblogs.com/qoakzmxncb/archive/2013/04/18/3029105.html 在XCode中,我們經常會看到這些編譯選項(如下

依賴註入和控制反轉的理解寫的太好了。

ace 語法 應用開發 資料 註入組 depend 設計思想 top ioc容器 學習過spring框架的人一定都會聽過Spring的IoC(控制反轉) 、DI(依賴註入)這兩個概念,對於初學Spring的人來說,總覺得IoC 、DI這兩個概念是模糊不清的,是很難理解的,今

C# winform以閱覽模式打開PPT控制PPT上下頁輪播

ssi msdn sta string 模式 簡單 ptc msd user [DllImport("user32.dll")] public extern static int GetWindowText(IntPtr hWnd, StringBuilder

css控制圖片上下居中超出部分隱藏

制圖 pos tex oct doc img display center doctype <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>