WebRTC基本概念(一)

子曰:“不患無位,患 所以立俺亮;不患莫己驮捍,求 為可知也〗旁”

前言

WebRTC(Web Real-Time Communication),一個(gè)可以讓用戶用自己流量實(shí)現(xiàn)音視頻實(shí)時(shí)通信的框架(APIs),支持瀏覽器(Firefox东且、Chrome、Opera)以及iOS本讥、Android 原生系統(tǒng)(Poor WP,默哀)苇倡。對(duì)于覺得帶寬賊貴又需要實(shí)現(xiàn)用戶之間音視頻通信的公司來說,這是一個(gè)大大的福利囤踩。本系列文章會(huì)從WebRTC基本概念慢慢說起旨椒。

What is WebRTC?

官方介紹:

WebRTC is a free, open project that provides browsers and mobile applications with Real-Time Communications (RTC) capabilities via simple APIs.The WebRTC components have been optimized to best serve this purpose.
Our mission: To enable rich, high-quality RTC applications to be developed for the browser, mobile platforms, and IoT devices, and allow themall to communicate via a common set of protocols.
WebRTC是一個(gè)free的開源項(xiàng)目堵漱,該項(xiàng)目提供了一組可以在瀏覽器综慎、手機(jī)應(yīng)用平臺(tái)(再次聲明,目前只支持iOS和Android勤庐。)實(shí)現(xiàn)實(shí)時(shí)通信的簡單API(s),WebRTC的目標(biāo)是將實(shí)時(shí)通信過程做得最優(yōu)化示惊。
我們的任務(wù)(指WebRTC官方):在手機(jī)應(yīng)用平臺(tái)、瀏覽器和物聯(lián)網(wǎng)設(shè)備之間用同一組協(xié)議實(shí)現(xiàn)高質(zhì)量實(shí)時(shí)通信愉镰。

RTC基本框架

按照傳統(tǒng)的通信流程米罚,是這樣的:
如下圖所示,數(shù)據(jù)發(fā)送端和接收端都需要通過公網(wǎng)服務(wù)器進(jìn)行轉(zhuǎn)發(fā)(因?yàn)榘l(fā)送端和接收端通常都做了NAT丈探,彼此并不知對(duì)方實(shí)際位置)录择。
e.g.:猶如一個(gè)中國人和一個(gè)外國人,他們彼此不懂對(duì)方的語言碗降,不知道對(duì)方的地址隘竭,但是中間有一個(gè)郵局知道對(duì)方的地址,因?yàn)閷?duì)方都在郵局做了注冊地址并且獲取了同一個(gè)編號(hào)讼渊,那么如果他們之間需要互相通信的話动看,就需要和郵局聯(lián)系,郵局會(huì)進(jìn)行翻譯并發(fā)往同一編號(hào)的對(duì)應(yīng)地址爪幻。 但是這中間就會(huì)產(chǎn)生一個(gè)問題菱皆,這時(shí)候如果有多個(gè)中國人和多個(gè)外國人都要進(jìn)行通信须误,那么郵局的工作量就會(huì)越來越大,當(dāng)他們的通信超過原有郵局人手可處理規(guī)模時(shí)仇轻,郵局要么擴(kuò)招(需要錢)要么延緩發(fā)送(會(huì)造成延遲京痢,甚至丟失信件)。


怎么辦拯田?這時(shí)我們就要考慮另外一種解決方案了历造。我們讓發(fā)送端直接發(fā)送數(shù)據(jù)給接收端甩十,這樣就可以省掉服務(wù)器的轉(zhuǎn)發(fā)功能了是不是船庇?當(dāng)然是,但是如我們上述例子所說侣监,中國人不懂俄語鸭轮,俄羅斯人不懂中文,雞同鴨講眼碌碌橄霉。他們之間怎么通信呢窃爷?郵局覺得上述方式太不靠譜了,于是決定通過一種技術(shù)姓蜂,當(dāng)有一個(gè)中國人或者外國人尋求轉(zhuǎn)發(fā)時(shí)按厘,郵局通過“魔法”查找出了對(duì)方地址,并且不說話丟給了對(duì)方一只翻譯面包钱慢,對(duì)方接收到翻譯面包后可以習(xí)得對(duì)方語言逮京,直接和對(duì)方通話。
例子中的“魔法”就是本文要介紹的 ICE框架束莫,而翻譯面包就是NAT穿越技術(shù)懒棉。


時(shí)間關(guān)系,以下內(nèi)容不再舉例說明览绿,需要網(wǎng)絡(luò)基礎(chǔ)的同學(xué)才能繼續(xù)觀看策严。


  • ICE(Interactive Connectivity Establishment)框架

在真實(shí)世界的網(wǎng)絡(luò)中,因?yàn)镮Pv4的地址個(gè)數(shù)問題饿敲,我們基本都是采用NAT連接的:


當(dāng)處于以上網(wǎng)絡(luò)時(shí)妻导,Peer和Peer之間基本都是通過NAT和防火墻連接上互聯(lián)網(wǎng)的,所以當(dāng)我們要建立兩端之間的直接通信時(shí)怀各,我們需要服務(wù)器對(duì)兩端進(jìn)行Signalling栗竖,具體如何進(jìn)行Signalling會(huì)在下篇文章中介紹。本文假設(shè)兩端已經(jīng)Signalling完畢[1]渠啤。
ICE框架 (ICE會(huì)嘗試找到端與端之間最優(yōu)連接路徑)會(huì)完成以下工作:

  • 首先ICE會(huì)直接利用主機(jī)地址和網(wǎng)卡地址進(jìn)行連接狐肢,如果剛好端擁有公網(wǎng)IP(無NAT),那么此時(shí)可以直接建立連接沥曹。
  • 如果第一步失敗份名,ICE會(huì)嘗試建立STUN[2]連接碟联。
  • 如果第二步失敗,ICE會(huì)利用TURN[3]服務(wù)器建立連接僵腺。

在本章中鲤孵,我們只需要知道,ICE是一個(gè)提供了連接建立的服務(wù)框架辰如。

  • STUN(Session Traversal Utilities for NAT)

STUN服務(wù)器提供的功能十分簡單普监,它讓使用者獲取自己所在的公網(wǎng)地址和在NAT中所映射端口號(hào),這個(gè)服務(wù)有什么用呢琉兜?當(dāng)使用者知道自己所在公網(wǎng)地址以及內(nèi)部NAT映射端口時(shí)凯正,它便可以講自己的公網(wǎng)地址和端口號(hào)通知對(duì)方,這樣對(duì)方就可以在茫茫大網(wǎng)中找到自己豌蟋。
在以往統(tǒng)計(jì)中廊散,WebRTC通過STUN建立連接的成功率為86%。

  • TURN(Traversal Using Relay NAT)

TURN[2]是一個(gè)client-server協(xié)議梧疲。TURN的NAT穿透方法與STUN類似允睹,都是通過取得應(yīng)用層中的公有地址達(dá)到NAT穿透。但實(shí)現(xiàn)TURN client的終端必須在通訊開始前與TURN server進(jìn)行交互幌氮,并要求TURN server產(chǎn)生"relay port"缭受,也就是relayed-transport-address。這時(shí)TURN server會(huì)建立peer该互,即遠(yuǎn)端端點(diǎn)(remote endpoints)米者,開始進(jìn)行中繼(relay)的動(dòng)作,TURN client利用relay port將資料傳送至peer慢洋,再由peer轉(zhuǎn)傳到另一方的TURN client塘雳。

TURN 和 STUN
STUN服務(wù)在查詢出客戶端所在IP和端口后,其所成功建立的連接是直接通過端與端之間的連接的普筹。
TURN服務(wù)是通過TURN服務(wù)器(擁有公網(wǎng)地址)作為中間人進(jìn)行轉(zhuǎn)發(fā)败明,所以如果TURN服務(wù)速度比STUN慢,而且是需要消耗TURN服務(wù)器帶寬太防。


  1. WebRTC in the real world: STUN, TURN and signaling ?

  2. RFC5766 ? ?

  3. RFC5389 ?

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末妻顶,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蜒车,更是在濱河造成了極大的恐慌讳嘱,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件酿愧,死亡現(xiàn)場離奇詭異沥潭,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)嬉挡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門钝鸽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汇恤,“玉大人,你說我怎么就攤上這事拔恰∫蚧眩” “怎么了?”我有些...
    開封第一講書人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵颜懊,是天一觀的道長财岔。 經(jīng)常有香客問我,道長河爹,這世上最難降的妖魔是什么匠璧? 我笑而不...
    開封第一講書人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮昌抠,結(jié)果婚禮上患朱,老公的妹妹穿的比我還像新娘鲁僚。我一直安慰自己炊苫,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開白布冰沙。 她就那樣靜靜地躺著侨艾,像睡著了一般。 火紅的嫁衣襯著肌膚如雪拓挥。 梳的紋絲不亂的頭發(fā)上唠梨,一...
    開封第一講書人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音侥啤,去河邊找鬼当叭。 笑死,一個(gè)胖子當(dāng)著我的面吹牛盖灸,可吹牛的內(nèi)容都是我干的蚁鳖。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼赁炎,長吁一口氣:“原來是場噩夢啊……” “哼醉箕!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徙垫,我...
    開封第一講書人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤讥裤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后姻报,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體己英,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年吴旋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了损肛。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寒亥。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖荧关,靈堂內(nèi)的尸體忽然破棺而出溉奕,到底是詐尸還是另有隱情,我是刑警寧澤忍啤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布加勤,位于F島的核電站,受9級(jí)特大地震影響同波,放射性物質(zhì)發(fā)生泄漏鳄梅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一未檩、第九天 我趴在偏房一處隱蔽的房頂上張望戴尸。 院中可真熱鬧,春花似錦冤狡、人聲如沸孙蒙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽挎峦。三九已至,卻和暖如春合瓢,著一層夾襖步出監(jiān)牢的瞬間坦胶,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來泰國打工晴楔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留顿苇,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓税弃,卻偏偏與公主長得像纪岁,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子钙皮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

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