2010年5月,Google 花費6820萬美圓收購擁有編解碼、回聲消除等技術的 GIPS 公司。以後谷歌開源了 GIPS 的技術,與相關機構 IETF 和 W3C 制定行業標準,組成了現有的 WebRTC 項目。git
WebRTC 全稱 Web Real-Time Communication。它並非單一的協議, 包含了媒體、加密、傳輸層等在內的多個協議標準以及一套基於 JavaScript 的 API。經過簡單易用的 JavaScript API ,在不安裝任何插件的狀況下,讓瀏覽器擁有了 P2P音視頻和數據分享的能力。github
同時WebRTC 並非一個孤立的協議,它擁有靈活的信令,能夠便捷的對接現有的SIP 和電話網絡的系統。算法
成立UPRTC項目前,又拍雲通過多重調研和考慮,選擇了 WebRTC,主要有三個緣由:瀏覽器
1. WebRTC 是開源、 免專利費的項目, 大大節省了開發時間和成本;安全
2. WebRTC 由 Google 主導, 技術很是先進;服務器
3. Safari 等瀏覽器以及其餘終端逐漸增強對 WebRTC 技術的支持。網絡
圖1爲 WebRTC 內部結構簡化圖,最底層是硬件設備,上面是音頻捕獲模塊和視頻捕獲模塊。架構
中間部分爲音視頻引擎。音頻引擎負責音頻採集和傳輸,具備降噪、回聲消除等功能。視頻引擎負責網絡抖動優化,互聯網傳輸編解碼優化。併發
在音視頻引擎之上是 一套 C++ API,在 C++ 的 API 之上是提供給瀏覽器的Javascript API。分佈式
△ 圖1:WebRTC內部結構
圖2是 WebRTC 涉及到的協議棧,WebRTC 核心的協議都是在右側基於 UDP 基礎上搭建起來的。
其中,ICE、STUN、TURN 用於內網穿透, 解決了獲取與綁定外網映射地址,以及 keep alive 機制。
DTLS 用於對傳輸內容進行加密,能夠看作是 UDP 版的 TLS。因爲 WebRTC 對安全比較重視,這一層是必須的。
SRTP 與 SRTCP 是對媒體數據的封裝與傳輸控制協議。
SCTP 是流控制傳輸協議,提供相似 TCP 的特性,SCTP 能夠基於 UDP 上構建,在 WebRTC 裏是在 DTLS 協議之上。
RTCPeerConnection 用來創建和維護端到端鏈接,並提供高效的音視頻流傳輸。
RTCDataChannel 用來支持端到端的任意二進制數據傳輸。
△ 圖2:WebRTC 協議棧
爲了使 WebRTC 協議更適用於實時互動直播,又拍雲在 WebRTC 協議的基礎上進行改造優化,搭建了又拍雲 UPRTC 。支持多種應用場景,包括一對1、一對多和多對多等應用場景。
由於又拍雲擁有性能優異的 CDN 資源,將 WebRTC 改形成服務器中轉模式以後,採用徹底分佈式系統,部署到全國全部邊緣節點,經過內部加速網絡 UTUN 加速,將轉發、併發壓力轉移到服務端,保證 UPRTC 終端能夠承受更多路併發。
以移動設備從 WIFI 網絡切換到 4G 網絡爲例,又拍雲服務器能夠察覺到帶寬變化,統計丟包和延時,進行動態碼率調整,保證在弱網環境下也能進行正常通話。
又拍雲設計了一套靈活高效的業務信令,用於敏感信令鑑權。
圖3爲 UPRTC 技術組成:
△ 圖3:UPRTC技術組成
雖然 WebRTC 源代碼相對成熟,可是在實際應用中依舊須要解決如下問題:
1.音頻處理過程當中消耗 CPU 太高;
2.音視頻不一樣步的BUG;
3.安卓端 WebRTC 源碼對H.264支持並不全面,僅默認支持高通的芯片;
4.服務端架構過程當中須要加入碼率自適應算法,動態控制總碼率帶寬在 2M 之內。
推薦參考文檔:
W3C API 相關文檔: https://github.com/w3c
IETF 協議相關文檔: https://datatracker.ietf.org
相關閱讀: