最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解IOS WebRTC的實現(xiàn)原理

 更新時間:2021年06月07日 11:04:31   作者:為童沉淪  
WebRTC,源自網(wǎng)頁實時通信(Web Real-Time Communication)縮寫,它是支持網(wǎng)頁瀏覽器進(jìn)行實時語音對話或視頻對話的技術(shù)。它為我們提供了視頻會議的核心技術(shù),包括音視頻的采集、編解碼、網(wǎng)絡(luò)傳輸、顯示等功能,并且還支持跨平臺:windows,linux,mac,android,ios。

概述

它在2011年5月開放了工程的源代碼,在行業(yè)內(nèi)得到了廣泛的支持和應(yīng)用,成為下一代視頻通話的標(biāo)準(zhǔn)。

WebRTC的音視頻通信是基于P2P,那么什么是P2P呢?

它是點對點連接的英文縮寫。

P2P連接模式

一般我們傳統(tǒng)的連接方式,都是以服務(wù)器為中介的模式:

類似http協(xié)議:客戶端?服務(wù)端(當(dāng)然這里服務(wù)端返回的箭頭僅僅代表返回請求數(shù)據(jù))。

我們在進(jìn)行即時通訊時,進(jìn)行文字、圖片、錄音等傳輸?shù)臅r候:客戶端A?服務(wù)器?客戶端B。

而點對點的連接恰恰數(shù)據(jù)通道一旦形成,中間是不經(jīng)過服務(wù)端的,數(shù)據(jù)直接從一個客戶端流向另一個客戶端:

客戶端A?客戶端B ... 客戶端A?客戶端C ...(可以無數(shù)個客戶端之間互聯(lián))

這里可以想想音視頻通話的應(yīng)用場景,我們服務(wù)端確實是沒必要去獲取兩者通信的數(shù)據(jù),而且這樣做有一個最大的一個優(yōu)點就是,大大的減輕了服務(wù)端的壓力。

而WebRTC就是這樣一個基于P2P的音視頻通信技術(shù)。

WebRTC的服務(wù)器與信令

講到這里,可能大家覺得WebRTC就不需要服務(wù)端了么?這是顯然是錯誤的認(rèn)識,嚴(yán)格來說它僅僅是不需要服務(wù)端來進(jìn)行數(shù)據(jù)中轉(zhuǎn)而已。

WebRTC提供了瀏覽器到瀏覽器(點對點)之間的通信,但并不意味著WebRTC不需要服務(wù)器。暫且不說基于服務(wù)器的一些擴(kuò)展業(yè)務(wù),WebRTC至少有兩件事必須要用到服務(wù)器:

  • 瀏覽器之間交換建立通信的元數(shù)據(jù)(信令)必須通過服務(wù)器。
  • 為了穿越NAT和防火墻。

第1條很好理解,我們在A和B需要建立P2P連接的時候,至少要服務(wù)器來協(xié)調(diào),來控制連接開始建立。而連接斷開的時候,也需要服務(wù)器來告知另一端P2P連接已斷開。這些我們用來控制連接的狀態(tài)的數(shù)據(jù)稱之為信令,而這個與服務(wù)端連接的通道,對于WebRTC而言就是信令通道。

圖中signalling就是往服務(wù)端發(fā)送信令,然后底層調(diào)用WebRTC,WebRTC通過服務(wù)端得到的信令,得知通信對方的基本信息,從而實現(xiàn)虛線部分Media通信連接。

當(dāng)然信令能做的事還有很多,這里大概列了一下:

  • 用來控制通信開啟或者關(guān)閉的連接控制消息
  • 發(fā)生錯誤時用來彼此告知的消息
  • 媒體流元數(shù)據(jù),比如像解碼器、解碼器的配置、帶寬、媒體類型等等
  • 用來建立安全連接的關(guān)鍵數(shù)據(jù)
  • 外界所看到的的網(wǎng)絡(luò)上的數(shù)據(jù),比如IP地址、端口等

在建立連接之前,客戶端之間顯然沒有辦法傳遞數(shù)據(jù)。所以我們需要通過服務(wù)器的中轉(zhuǎn),在客戶端之間傳遞這些數(shù)據(jù),然后建立客戶端之間的點對點連接。但是WebRTC API中并沒有實現(xiàn)這些,這些就需要我們來實現(xiàn)了。

而第2條中的NAT這個概念,參考文章iOS即時通訊,從入門到“放棄”?,中也提到過,不過是為了應(yīng)對NAT超時,所造成的TCP連接中斷。在這里我們就不展開去講了,感興趣的可以看看:NAT百科

這里我簡要說明一下,NAT技術(shù)的出現(xiàn),其實就是為了解決IPV4下的IP地址匱乏。舉例來說,就是通常我們處在一個路由器之下,而路由器分配給我們的地址通常為192.168.0.1 、192.168.0.2如果有n個設(shè)備,可能分配到192.168.0.n,而這個IP地址顯然只是一個內(nèi)網(wǎng)的IP地址,這樣一個路由器的公網(wǎng)地址對應(yīng)了n個內(nèi)網(wǎng)的地址,通過這種使用少量的公有IP 地址代表較多的私有IP 地址的方式,將有助于減緩可用的IP地址空間的枯竭。

但是這也帶來了一系列的問題,例如這里點對點連接下,會導(dǎo)致這樣一個問題:

如果客戶端A想給客戶端B發(fā)送數(shù)據(jù),則數(shù)據(jù)來到客戶端B所在的路由器下,會被NAT阻攔,這樣B就無法收到A的數(shù)據(jù)了。

但是A的NAT此時已經(jīng)知道了B這個地址,所以當(dāng)B給A發(fā)送數(shù)據(jù)的時候,NAT不會阻攔,這樣A就可以收到B的數(shù)據(jù)了。這就是我們進(jìn)行NAT穿越的核心思路。

于是我們就有了以下思路:

我們借助一個公網(wǎng)IP服務(wù)器,a,b都往公網(wǎng)IP/PORT發(fā)包,公網(wǎng)服務(wù)器就可以獲知a,b的IP/PORT,又由于a,b主動給公網(wǎng)IP服務(wù)器發(fā)包,所以公網(wǎng)服務(wù)器可以穿透NAT A,NAT B送包給a,b。

所以只要公網(wǎng)IP將b的IP/PORT發(fā)給a,a的IP/PORT發(fā)給b。這樣下次a和b互相消息,就不會被NAT阻攔了。

WebRTC的NAT/防火墻穿越技術(shù)

基于上述的一個思路來實現(xiàn)的:

建立點對點信道的一個常見問題,就是NAT穿越技術(shù)。在處于使用了NAT設(shè)備的私有TCP/IP網(wǎng)絡(luò)中的主機(jī)之間需要建立連接時需要使用NAT穿越技術(shù)。以往在VoIP領(lǐng)域經(jīng)常會遇到這個問題。目前已經(jīng)有很多NAT穿越技術(shù),但沒有一項是完美的,因為NAT的行為是非標(biāo)準(zhǔn)化的。這些技術(shù)中大多使用了一個公共服務(wù)器,這個服務(wù)使用了一個從全球任何地方都能訪問得到的IP地址。在RTCPeeConnection中,使用ICE框架來保證RTCPeerConnection能實現(xiàn)NAT穿越

這里提到了ICE協(xié)議框架,它大約是由以下幾個技術(shù)和協(xié)議組成的:STUN、NAT、TURN、SDP,這些協(xié)議技術(shù),幫助ICE共同實現(xiàn)了NAT/防火墻穿越。

以上就是詳解IOS WebRTC的實現(xiàn)原理的詳細(xì)內(nèi)容,更多關(guān)于IOS WebRTC的實現(xiàn)原理的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • iOS開發(fā)之tableView實現(xiàn)左滑刪除功能

    iOS開發(fā)之tableView實現(xiàn)左滑刪除功能

    我們在使用一些應(yīng)用的時候,在滑動一些聯(lián)系人的某一行的時候,會出現(xiàn)刪除、置頂、更多等等的按鈕,下面這篇文章主要就介紹了iOS用tableView實現(xiàn)左劃刪除功能的方法,有需要的朋友們可以參考借鑒,下面來一起看看吧。
    2017-01-01
  • iOS中常見的視圖和圖片處理示例詳解

    iOS中常見的視圖和圖片處理示例詳解

    在日常ios開發(fā)中經(jīng)常會遇到視圖和圖片的處理,下面這篇文章主要給大家總結(jié)介紹了關(guān)于iOS中常見的視圖和圖片處理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)和工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下。
    2017-10-10
  • iOS開發(fā)中使用UILabel設(shè)置字體的相關(guān)技巧小結(jié)

    iOS開發(fā)中使用UILabel設(shè)置字體的相關(guān)技巧小結(jié)

    這篇文章主要介紹了iOS開發(fā)中UILabel設(shè)置字體的相關(guān)技巧小結(jié),代碼基于傳統(tǒng)的Objective-C,需要的朋友可以參考下
    2016-01-01
  • 微信支付開發(fā)IOS圖文教程案例

    微信支付開發(fā)IOS圖文教程案例

    這篇文章主要介紹了微信支付開發(fā)IOS案例的相關(guān)資料,需要的朋友可以參考下
    2016-04-04
  • iOS WKWebView中MessageHandler內(nèi)存泄漏問題的完美解決過程

    iOS WKWebView中MessageHandler內(nèi)存泄漏問題的完美解決過程

    這篇文章主要給大家介紹了關(guān)于iOS WKWebView中MessageHandler內(nèi)存泄漏問題的完美解決過程,文中通過示例代碼介紹的非常詳細(xì),對各位iOS開發(fā)者們具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-07-07
  • iOS json解析出錯的幾種情況總結(jié)

    iOS json解析出錯的幾種情況總結(jié)

    這篇文章主要介紹了iOS json解析出錯的幾種情況總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 舉例講解Objective-C中@property屬性的用法

    舉例講解Objective-C中@property屬性的用法

    這篇文章主要介紹了Objective-C中@property屬性的用法,包括@property的屬性關(guān)鍵字的整理,需要的朋友可以參考下
    2016-03-03
  • iOS自定義UITabBar仿今日頭條效果

    iOS自定義UITabBar仿今日頭條效果

    這篇文章主要為大家詳細(xì)介紹了iOS自定義UITabBar仿今日頭條效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-09-09
  • iOS瀑布流的簡單實現(xiàn)(Swift)

    iOS瀑布流的簡單實現(xiàn)(Swift)

    這篇文章主要介紹了iOS瀑布流的簡單實現(xiàn),說到瀑布流, 或許大家都不陌生, 瀑布流的實現(xiàn)也有很多種! 本文使用兩種方法介紹,有興趣的可以了解一下。
    2016-11-11
  • iOS對象指針和基礎(chǔ)數(shù)據(jù)類型的強(qiáng)轉(zhuǎn)詳解

    iOS對象指針和基礎(chǔ)數(shù)據(jù)類型的強(qiáng)轉(zhuǎn)詳解

    最近在做一些小功能,忽然發(fā)現(xiàn)有的基礎(chǔ)數(shù)據(jù)轉(zhuǎn)換居然都忘記了。于是想著要趕緊整理下記下來!本文就是記錄的一些內(nèi)容,主要介紹了iOS中對象指針和基礎(chǔ)數(shù)據(jù)類型的強(qiáng)轉(zhuǎn),有需要的朋友們可以參考借鑒,下面來一起學(xué)習(xí)學(xué)習(xí)吧。
    2016-11-11

最新評論

从化市| 阜城县| 青海省| 四平市| 麻江县| 田阳县| 嵊州市| 玉树县| 潞西市| 安新县| 墨竹工卡县| 平塘县| 出国| 通辽市| 永定县| 通海县| 宜君县| 礼泉县| 千阳县| 老河口市| 陕西省| 峨眉山市| 科技| 鄂托克旗| 尚志市| 固镇县| 兴山县| 沂水县| 恩平市| 曲松县| 清远市| 长兴县| 鄂托克前旗| 宁阳县| 故城县| 邵东县| 开封市| 项城市| 淳安县| 兴化市| 普安县|