◆楊德炎 鄭少明 鄭漢軍 陳思德 李劍煜
基于WebRTC實現多人跨平臺同時在線視頻聊天
◆楊德炎 鄭少明 鄭漢軍 陳思德 李劍煜
(廈門安勝網絡科技有限公司 福建 321008)
手機、臺式機、筆記本、電視以及任何安裝智能操作平臺的移動設備,都可以在通用平臺上,使地理上分散的用戶共聚一處,進行視頻會議開展協(xié)同工作,實現點對點實時信息交流和數據共享的世界,本文介紹的WebRTC技術就能實現這樣的協(xié)同工作。
WebRTC;WebSocket;跨平臺;實時通信;流媒體;視頻通話;NAT/防火墻穿透
縱觀全球,將RTC(實時通訊)技術與現有內容,音/視頻視頻數據和服務集成起來非常困難且耗時,還需要花費昂貴的技術成本,尤其是建立在Web應用上。
許多Web服務使用RTC,需要下載本機應用程序或插件。其中包括早期的WebQQ、 微信網頁版、微軟的Skype、Facebook和Google Hangouts。下載,安裝和更新插件等復雜操作,容易出錯并且很煩人。插件很難更新部署,調試,故障排除,測試和維護,兼容性差,需要為各種操作平臺定制開發(fā),并且可能需要昂貴的許可并與復雜的技術集成。通常很難說服人們首先安裝插件,用戶體驗極差,交互野蠻。
而現在這一切都變得很容易,網絡視頻新技術—基于WebRTC實現網頁化提供實時,無插件視頻、音頻和數據通信。
WebRTC,來自網頁即時通信(Web Real-Time Communication)的縮寫,通過簡單友好的API為瀏覽器和移動應用程序提供實時,無插件的音/視頻和數據通信標準,涵蓋了視頻會議的核心技術,包括從視頻采集卡到網絡傳輸端視頻顯示等整個解決方案。其自適應抖動控制算法以及語音包丟失隱藏算法,能夠快速且高解析度地適應不斷變化的網絡環(huán)境,確保音質優(yōu)美且緩沖延遲最小。Video Jitter Buffer視頻抖動緩沖器,能有效降低由于視頻抖動和視頻信息包丟失帶來的不良影響。Image enhancements圖像質量增強模塊對暗度檢測、顏色增強、色彩過渡、降噪處理等,表現出極為強悍的一面。
面向開發(fā)者的標準API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三大類,允許用戶在兩個瀏覽器之間直接通訊,實現雙向的數據交換。內置抽象會話層,采用了libjingle庫的組件實現,提供會話建立和管理功能,無須使用xmpp/jingle協(xié)議。本地C++接口層能抽象地對數字信號過程進行處理,通過STUN和ICE Server即可建立不同類型網絡間的視頻呼叫連接。而且具有很強的擴展性,容易跟其它現有的音/視頻通訊系統(tǒng)結合。并且支持所有的主流操作平臺Windows、linux、Mac、Android、IOS等。
WebRTC 基于P2P的網絡通信,提供了瀏覽器到瀏覽器之間的通信。但是網絡之間的應用程序不能簡單隨意地進行任意設備相連接,現實生活中大多數設備都隱藏在一層或多層NAT,有些設備還具有阻止某些端口和協(xié)議的防病毒軟件,而且許多設備都支持網絡代理和企業(yè)防火墻。為此瀏覽器之間用于交換建立通信的元數據—信令和穿越NAT和防火墻必須依托服務器維護。
在瀏覽器之間的會話建立之前,瀏覽器之間顯然沒有辦法傳遞數據進行通信,需要一系列協(xié)調通信和發(fā)送控制消息的機制來建立瀏覽器之間的通信 。瀏覽器之間傳遞的這些信令元數據需要通過服務器的中轉回傳,然后建立瀏覽器之間的會話,一旦成功RTCPeerConnection就會嘗試點對點直接連接,處理對等體之間流數據的穩(wěn)定和有效通信。
其實信令就是協(xié)調溝通的過程,而用于信令的消息服務需要是雙向的:客戶端到服務器,服務器到客戶端。為了使WebRTC程序之間進行通信,其客戶端需要交換以下信息:
(1)控制初始化或關閉會話的控制消息和錯誤消息。
(2)媒體流元數據,比如像解碼器、編解碼器的配置、帶寬、分辨率等網絡配置數據。
(3)用來建立安全連接的關鍵秘鑰數據。
(4)外界所看到用戶在網絡上的數據,比如IP地址和端口等。
舉個例子,如圖1:假設客戶端A希望與客戶端B建立TCP連接,那么這兩個客戶端A和B首先需要連接至服務器S。服務器S注冊每個客戶端的IP和專用端口。客戶端A使用與服務器S活動的TCP會話來請求服務器S幫助其連接客戶端B。
圖1 Signaling Server工作原理圖
服務S把設備B的IP和端口回復給設備A,并在同一時間發(fā)送A的IP和端口給B。
設備A和設備B獲取到對方的IP端口后嘗試直連,傳出連接嘗試成功,或者失敗。如果其中一個傳出連接嘗試因網絡錯誤,例如連接重置、主機無法訪問而失敗,則主機只需在短暫延遲后重新嘗試該連接,直至應用程序,建立TCP連接后,主機會相互進行身份驗證,以驗證它們是否已連接到目標主機。如果身份驗證失敗,客戶端將關閉該連接并繼續(xù)等待其他連接成功。
具體的連接建立方式基于信令控制協(xié)議JSEP(JavaScript Session Establishment Protocol),在JSEP中,需要交換的關鍵信息是多媒體會話描述,由于開發(fā)者所使用的協(xié)議不盡相同,例如SIP或XMPP,WebRTC建立呼叫的思想建立在媒體流控制層面上,從而與上層信令傳輸相分離,防止相互之間的信令污染。只要上層信令為其提供了多媒體會話描述符這樣的關鍵信息就可以建立連接,不管開發(fā)者用何種方式來傳遞。
網絡地址轉換NAT(Network Address Translation)就是為解決IPV4下的IP地址匱乏而出現的一種技術。NAT設備允許在具有面向Internet的單個公共IP地址的路由器后面的專用網絡上,使用私有IP地址。內部網絡設備通過將傳出請求的源地址更改為NAT設備的源地址,并將回復中繼回原始設備來與外部網絡上的主機通信。
每個WebRTC終端都有一個唯一的地址,可以與其他對等端交換,以便直接通信和數據交換。但是NAT提供具有IP地址的設備在專用本地網絡內使用,但是該地址不能在外部使用。沒有公共地址,WebRTC對等體就無法進行通信。
為了解決這問題,我們需要ICE服務器來克服現實網絡的復雜性,借助NAT網關跟蹤來自專用網絡的出站請求,并維持每個已建立連接的狀態(tài),以便將來自公共網絡上的對等體的響應直接響應到專用網絡中的對等體。保證了RTCPeerConnection能實現NAT穿越。
簡單地說就是將ICE服務器URL傳遞給RTCPeerConnection, ICE試圖找到連接對等體的最佳路徑。它并行嘗試所有可能性,并選擇最有效的選項。ICE首先嘗試使用從設備的操作系統(tǒng)和網卡獲得的主機地址建立連接。如果失敗它將用于NAT后面的設備,ICE使用STUN服務器獲取外部地址,如果失敗,則通過TURN中繼服務器路由其流量。
每個TURN服務器都支持STUN,TURN服務器也是STUN服務器,內置了增加的中繼功能,ICE還應對NAT設置的復雜性。
我們借助兩個客戶端的設備A和B,一開始通過TCP或UDP連接到具有全球公網IP的服務器S,如圖2:A,B兩個客戶端駐留在單獨的專用網絡里,和它們各自的NAT阻止客戶端直接與另一個客戶端連接。兩個客戶端可以簡單地使用服務器S在它們之間中繼消息,而不是嘗試直接連接。例如,向客戶端B發(fā)送消息,A只需將消息沿其已建立的客戶端/服務器連接發(fā)送到服務器S,服務器S使用其現有的客戶端/服務器連接S將消息轉發(fā)到客戶端B。
又由于A,B主動給公網IP的服務器S發(fā)消息,所以公網服務器可以穿透NAT A, NAT B送包給A,B。只要公網IP將B的IP/PORT發(fā)給A,A的IP/PORT發(fā)給B。這樣下次A和B互相消息,就不會被NAT阻攔了。
TURN用于在對等體之間中繼音頻、視頻數據流,而不是信令數據,服務器具有公共地址,因此即使對等體位于防火墻或代理之后,也可以與對等方聯(lián)系。
服務器具有公共地址,因此即使對等體位于防火墻或代理之后,也可以與對等方聯(lián)系。
圖2 NAT穿越原理圖
基于WebRTC技術的網頁版網絡視頻會議技術,使用支持HTML5瀏覽器的設備即可,它與幾乎所有的瀏覽器兼容,無需額外下載安裝任何插件,極大地提高了安全性,且支持市面上所有主流的操作平臺。使開發(fā)者能夠容易地開發(fā)出網絡視頻聊天的web應用,同時也極大地減少開發(fā)成本,一次編寫到處運行,維護成本低。
應用中使用的編解碼器和協(xié)議可以進行大量工作,即使在不可靠的網絡上也可以進行強大而靈活的點對點實時通信,內置安全性(DTLS)和擁塞控制,內含多種容錯機制丟包隱藏、回聲消除、帶寬適應性、動態(tài)抖動緩沖、自動增益控制、降噪和抑制、圖像清潔等。以及多個對等端各自直接相互通信,或通過多點控制單元(MCU),進行選擇性流轉發(fā),混合或錄制音頻和視頻。
而這一切都可以通過低廉的開發(fā)成本得到一個高性能的產品。
[1]趙宇.WebRTC技術在語音平臺中的應用研究[J].通信技術,2018.
[2]李鋒.WebRTC標準的現狀研究及展望[J].中國新通信,2018.
[3]孫衛(wèi)喜,席少龍.P2P中NAT穿越問題的研究[J].計算機技術與發(fā)展,2014.
[4]韓可玉,王振濤,蘇繼斌.NAT和防火墻穿越技術研究[J].軟件導刊,2014.
[5]陳亮. 基于改進ICE協(xié)議的流媒體穿透NAT的研究[D].華南理工大學,2012.
[6]Cihan Topal,Cuneyt Akinlar. Secure seamless peer-to-peer (P2P) UDP communication using IPv4 LSRR option and IPv4+4 addresses[J]. Computers and Electrical Engineering,2008.
[7]Julian Jang-Jaccard,Surya Nepal,Branko Celler,Bo Yan. WebRTC-based video conferencing service for telehealth[J]. Computing,2016.
[8]Vogt,C.,Werner,M.J.,Schmidt,T.C.Leveraging WebRTC for P2P content distribution in web browsers[P]. ,2013.