互聯(lián)網(wǎng)大概可以算是最近幾十年人類最重要的發(fā)明之一。最早人們用互聯(lián)網(wǎng)發(fā)送電子郵件淳附,接著普及了網(wǎng)頁瀏覽议慰,后來又流行即時(shí)文字聊天,人們工作生活的方式在這寫年里發(fā)生了巨大的變化奴曙”鸢迹可是當(dāng)人們想更進(jìn)一步實(shí)現(xiàn)實(shí)時(shí)音視頻通話時(shí),卻發(fā)現(xiàn)互聯(lián)網(wǎng)有點(diǎn)不給力了洽糟÷疲卡頓、掉線坤溃、延時(shí)太高等等拍霜,這些問題始終伴阻礙實(shí)時(shí)音視頻通話的發(fā)展。而這根本上的原因是薪介,互聯(lián)網(wǎng)一開始并不是針對實(shí)時(shí)通信而設(shè)計(jì)的祠饺。
人們常把互聯(lián)網(wǎng)比喻成“信息高速公路”,其實(shí)更確切的比喻應(yīng)該是“信息公路網(wǎng)”汁政〉劳担互聯(lián)網(wǎng)就像現(xiàn)實(shí)中的路網(wǎng)一樣交錯(cuò)復(fù)雜缀旁,有像連接兩地的高速公路一樣快速的骨干網(wǎng),也有像是難走的崎嶇山路一樣糟糕的網(wǎng)絡(luò)環(huán)境试疙。而在互聯(lián)網(wǎng)上傳輸數(shù)據(jù)就像是從一個(gè)地方開車到另一個(gè)地方一樣诵棵。
現(xiàn)在我們就借這個(gè)比喻來解釋一下互聯(lián)網(wǎng)傳輸?shù)娜齻€(gè)非常重要的特點(diǎn):延時(shí)、丟包祝旷、抖動履澳。
假設(shè)我們現(xiàn)在有一百輛車從北京鳥巢開往上海東方明珠,并且每隔一分鐘出發(fā)一輛怀跛。
延時(shí)
“延時(shí)”指的是每輛車從鳥巢開到東方明珠花的平均時(shí)間距贷。顯然,車隊(duì)走高速公路肯定要比走各種小公路快很多吻谋,而且從鳥巢出發(fā)沿著怎樣的路線開上高速公路也有很大影響忠蝗,萬一堵在了三環(huán)可就要多花好幾個(gè)小時(shí)了。所以這個(gè)值和車隊(duì)選擇的行駛路線有關(guān)漓拾「笞睿互聯(lián)網(wǎng)傳輸也是一樣的道理,需要傳輸數(shù)據(jù)的兩點(diǎn)之間經(jīng)常是有很多可選路徑的骇两,而這些路徑的延時(shí)往往相差很大速种。
丟包
“丟包”指的是有的車無法在有效時(shí)間內(nèi)無法達(dá)到終點(diǎn),甚至可能永遠(yuǎn)也到不了終點(diǎn)低千。有的車可能永遠(yuǎn)堵在北京的三環(huán)上了配阵,有的車可能中途出了車禍。假如我們的一百輛車?yán)镉形遢v車因?yàn)楦鞣N原因沒能按時(shí)到達(dá)上海示血,我們這次車隊(duì)傳輸?shù)摹皝G包率”就是5%棋傍。是的,互聯(lián)網(wǎng)傳輸也一樣难审,它并不是百分百可靠的瘫拣,總有數(shù)據(jù)無法按時(shí)傳輸?shù)侥康牡亍?/p>
抖動
“抖動”指的是車子到達(dá)的順序、間隔和出發(fā)時(shí)的差異告喊。雖然我們的一百輛車在北京是等間隔的一分鐘一輛出發(fā)的麸拄,但是它們到達(dá)上海時(shí)卻并不是按順序一分鐘一輛到達(dá)的,甚至可能有晚出發(fā)的車比早出發(fā)的車先到的情況葱绒「兴В互聯(lián)網(wǎng)傳輸也一樣,如果簡單地按照收到的音視頻數(shù)據(jù)順序直接播放出來地淀,就會出現(xiàn)失真的現(xiàn)象失球。
延時(shí)、丟包、抖動是互聯(lián)網(wǎng)這個(gè)信息公路網(wǎng)無法避免的三個(gè)特點(diǎn)实苞。以前電子郵件豺撑、網(wǎng)頁瀏覽、文字聊天的場景下黔牵,這三個(gè)特點(diǎn)并不是太大的問題聪轿,畢竟人們可以接受電子郵件晚幾分鐘到達(dá)對方的郵箱。但在實(shí)時(shí)音視頻通信的場景下猾浦,不要說幾分鐘陆错,就算只有幾秒鐘的延遲,音視頻交流的體驗(yàn)就會大打折扣金赦。
聲網(wǎng)Agora.io是怎么做的
為了解決這三個(gè)問題對實(shí)時(shí)音視頻通信的影響音瓷,聲網(wǎng)Agora.io以多種技術(shù)手段并用,建立了自己的虛擬通信網(wǎng)夹抗。我們?nèi)匀挥们懊孳囮?duì)的比喻绳慎,聲網(wǎng)Agora.io的虛擬通信網(wǎng)就像是一個(gè)車隊(duì)調(diào)度中心,指引車隊(duì)沿著速度最快漠烧、路況最好的線路通行杏愤。
就近接入
當(dāng)車隊(duì)從鳥巢出發(fā)的時(shí)候,調(diào)度中心首先給出一條從鳥巢通往高速公路入口的最優(yōu)路徑已脓,讓車隊(duì)盡快離開擁擠的市區(qū)珊楼。同樣的,聲網(wǎng)Agora.io虛擬通信網(wǎng)根據(jù)用戶所在地分配最近的接入點(diǎn)摆舟,讓音視頻數(shù)據(jù)包盡快到達(dá)快速的骨干網(wǎng)絡(luò)亥曹,這就叫做“就近接入”邓了。
動態(tài)路由
當(dāng)我們的車隊(duì)上了高速公路后恨诱,理想情況下只要沿著最短路線向上海行駛就可以了。但現(xiàn)實(shí)情況是骗炉,在最短路線上可能會有路段在維修無法通行照宝,會有路段車輛太多非常擁堵,會有路段收費(fèi)站太多通行效率低下等等情況句葵。調(diào)度中心會根據(jù)實(shí)時(shí)的全國路況厕鹃,給車隊(duì)規(guī)劃高速公路上的行駛路徑,保證車隊(duì)以最快的速度到達(dá)上海的高速公路出口乍丈。同樣的剂碴,骨干網(wǎng)絡(luò)也會有線路暫時(shí)不可用,線路擁堵轻专,跨運(yùn)營商線路質(zhì)量差等情況忆矛。聲網(wǎng)Agora.io虛擬通信網(wǎng)會根據(jù)全球的主干網(wǎng)絡(luò)狀況,為需要傳輸?shù)囊粢曨l數(shù)據(jù)包實(shí)時(shí)規(guī)劃傳輸路徑,這就叫做“動態(tài)路由”催训。
當(dāng)車隊(duì)沿著高速公路到達(dá)上海后洽议,調(diào)度中心再次給出一條從高速公路出口通往東方明珠的最優(yōu)路徑。也即當(dāng)數(shù)據(jù)沿著骨干網(wǎng)傳輸?shù)綄Ψ降牡貐^(qū)后漫拭,聲網(wǎng)Agora.io虛擬通信網(wǎng)再次使用“就近接入”的技術(shù)讓數(shù)據(jù)包盡快到達(dá)目標(biāo)設(shè)備亚兄。
丟包重傳
“延時(shí)”的問題解決了,“丟包”怎么辦呢采驻?假設(shè)正好遇到上下班高峰审胚,北京的路況非常糟糕,即使調(diào)度中心規(guī)劃了最優(yōu)的離開北京的線路礼旅,100輛車?yán)镆仓挥?0輛按時(shí)到達(dá)了高速公路入口菲盾,“丟包率”達(dá)到了20%。在這種情況下調(diào)度中心的辦法是各淀,通知鳥巢再補(bǔ)發(fā)20輛車出來懒鉴!即使這20輛車仍然有20%(4輛)無法離開北京,最終也能有總共96輛車駛上高速公路碎浇,最終的丟包率從20%降到了4%临谱。這一技術(shù)在聲網(wǎng)Agora.io虛擬通信網(wǎng)中被稱為“丟包重傳”。無論是從用戶到接入點(diǎn)奴璃,還是我們的服務(wù)器之間悉默,還是最終從接入點(diǎn)到用戶,丟失的數(shù)據(jù)包都有機(jī)會通過重傳機(jī)制得到及時(shí)的恢復(fù)苟穆。
由此抄课,聲網(wǎng)Agora.io虛擬通信網(wǎng)通過“就近接入”、“動態(tài)路由”等技術(shù)雳旅,有效降低了數(shù)據(jù)傳輸?shù)难訒r(shí)跟磨,使得中美之間端到端傳輸?shù)钠骄訒r(shí)只有0.15秒;又通過“丟包重傳”的機(jī)制對抗網(wǎng)絡(luò)丟包攒盈,使得中美之間端到端的數(shù)據(jù)包有效到達(dá)率超過了99%抵拘。再加上聲網(wǎng)Agora.io引擎內(nèi)部專門的模塊針對網(wǎng)絡(luò)的“抖動”進(jìn)行處理,互聯(lián)網(wǎng)上實(shí)時(shí)音視頻傳輸?shù)娜箅y題得以解決型豁。
通過這些硬性的技術(shù)手段僵蛛,加上完備的報(bào)警系統(tǒng)、豐富的問題調(diào)查工具迎变、詳細(xì)的統(tǒng)計(jì)報(bào)表等軟性的技術(shù)工具充尉,聲網(wǎng)Agora.io虛擬通信網(wǎng)為互聯(lián)網(wǎng)用戶提供了穩(wěn)健可靠的實(shí)時(shí)音視頻傳輸解決方案。
本文作者
龔宇華 ?聲網(wǎng)Agora.io 資深移動開發(fā)專家