複製鏈接
請複製以下鏈接發送給好友

WebRTC

鎖定
WebRTC (Web Real-Time Communications) 是一項實時通訊技術,它允許網絡應用或者站點,在不借助中間媒介的情況下,建立瀏覽器之間點對點(Peer-to-Peer)的連接,實現視頻流和(或)音頻流或者其他任意數據的傳輸。WebRTC 包含的這些標準使用户在無需安裝任何插件或者第三方的軟件的情況下,創建點對點(Peer-to-Peer)的數據分享和電話會議成為可能。 [6] 
中文名
網頁實時通信
外文名
Web Real-Time Communication
所屬學科
計算機科學
應用平台
Chrome、FirefoxOperaSafari

WebRTC發展歷史

2010年5月,Google以6820萬美元收購VoIP軟件開發商Global IP Solutions的GIPS引擎,並改為名為“WebRTC”。WebRTC使用GIPS引擎,實現了基於網頁的視頻會議,並支持722,PCM,ILBC,ISAC等編碼,同時使用谷歌自家的VP8視頻解碼器;同時支持RTP/SRTP傳輸等。
谷歌2011年6月3日宣佈向開發人員開放WebRTC架構的源代碼。這個源代碼將根據沒有專利費的BSD(伯克利軟件發佈)式的許可證向用户提供。開發人員可訪問並獲取WebRTC的源代碼、規格説明和工具等。 [2] 
Google Chrome:2012年1月,將WebRTC集成進Dev Channel,同年6月又完成Stable Channel的20版的集成(2012年7月,PeerConnection與MediaStream仍必須透過chrome://flags page來打開)。
Mozilla Firefox:2012年初Mozilla集成WebRTC入Firefox Alpha,此一版本的Audio Mixing已完成於Media Stream。
2012年1月,谷歌已經把這款軟件集成到Chrome瀏覽器中。同時FreeSWITCH項目宣稱支持iSAC audio codec。
2012年4月,Mozilla展示Firefox中WebRTC的視頻對話。
2013年6月,發佈22.0版本正式集成及支持WebRTC。
2013年9月,發佈24.0版本,並宣佈Firefox for Android(移動版)正式集成及支持WebRTC。
Opera:2012年1月,Opera初步集成WebRTC。
Internet Explorer:Microsoft開始開放API。
Ericsson:2012年11月,Ericsson Labs做出了全世界第一個可以支持WebRTC的手機瀏覽器。
SeaMonkey:2013年1月發佈的15.0版本初步集成WebRTC。
2019年10月22日,W3C WebRTC 工作組(Web Real-Time Communications Working Group)發佈 WebRTC 可伸縮視頻編碼(SVC)擴展(Scalable Video Coding (SVC) Extension for WebRTC)的首個公開工作草案(First Public Working Draft)。 文檔定義了 WebIDL 中的一組 ECMAScript APIs 來擴展 WebRTC 1.0 API,以允許用户代理支持可伸縮視頻編碼(SVC)。 [5] 
2022年3月15日,W3C 媒體工作組發佈自動播放策略檢測(Autoplay Policy Detection)規範的首個公開工作草案。該規範為開發者提供了一種能力,用以探測在不同情況下是否允許自動開始播放媒體文件。歡迎公眾通過 Github 反饋對該文檔的意見與建議。 [4] 

WebRTC技術應用

WebRTC實現了基於網頁的視頻會議,標準是WHATWG 協議,目的是通過瀏覽器提供簡單的javascript就可以達到實時通訊(Real-Time Communications (RTC))能力。
WebRTC(Web Real-Time Communication)項目的最終目的主要是讓Web開發者能夠基於瀏覽器(Chrome\FireFox\...)輕易快捷開發出豐富的實時多媒體應用,而無需下載安裝任何插件,Web開發者也無需關注多媒體的數字信號處理過程,只需編寫簡單的Javascript程序即可實現,W3C等組織正在制定Javascript 標準API,目前是WebRTC 1.0版本,Draft狀態;另外WebRTC還希望能夠建立一個多互聯網瀏覽器間健壯的實時通信的平台,形成開發者與瀏覽器廠商良好的生態環境。同時,Google也希望和致力於讓WebRTC的技術成為HTML5標準之一,可見Google佈局之深遠。
WebRTC提供了視頻會議的核心技術,包括音視頻的採集、編解碼、網絡傳輸、顯示等功能,並且還支持跨平台:windows,linuxmacandroid

WebRTC應用架構

WebRTC顏色標識説明

WebRTC架構圖 WebRTC架構圖
(1)紫色部分是Web開發者API層;
(2)藍色實線部分是面向瀏覽器廠商的API層;
(3)藍色虛線部分瀏覽器廠商可以自定義實現。

WebRTC架構組件介紹

Your Web App
Web開發者開發的程序,Web開發者可以基於集成WebRTC的瀏覽器提供的web API開發基於視頻、音頻的實時通信應用。
Web API
面向第三方開發者的WebRTC標準API(Javascript),使開發者能夠容易地開發出類似於網絡視頻聊天的web應用,最新的標準化進程可以查看這裏。 [1] 
這些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三類,詳細的API説明可以看這裏。
Network Stream API
MediaStream:MediaStream用來表示一個媒體數據流。
MediaStreamTrack在瀏覽器中表示一個媒體源。
RTCPeerConnection
RTCPeerConnection: 一個RTCPeerConnection對象允許用户在兩個瀏覽器之間直接通訊。
RTCIceCandidate :表示一個ICE協議的候選者。
RTCIceServer:表示一個ICE Server。
Peer-to-peer Data API
DataChannel:數據通道( DataChannel)接口表示一個在兩個節點之間的雙向的數據通道 。
WebRTC Native C++ API
本地C++ API層,使瀏覽器廠商容易實現WebRTC標準的Web API,抽象地對數字信號過程進行處理。
Transport / Session
傳輸/會話層
會話層組件採用了libjingle庫的部分組件實現,無須使用xmpp/jingle協議
a. RTP Stack協議棧
Real Time Protocol
b. STUN/ICE
可以通過STUN和ICE組件來建立不同類型網絡間的呼叫連接。
c. Session Management
一個抽象的會話層,提供會話建立和管理功能。該層協議留給應用開發者自定義實現。
VoiceEngine
音頻引擎是包含一系列音頻多媒體處理的框架,包括從視頻採集卡到網絡傳輸端等整個解決方案。
PS:VoiceEngine是WebRTC極具價值的技術之一,是Google收購GIPS公司後開源的。在VoIP上,技術業界領先,後面的文章會詳細瞭解
a. iSAC
Internet Speech Audio Codec
針對VoIP和音頻流的寬帶和超寬帶音頻編解碼器,是WebRTC音頻引擎的默認的編解碼器
採樣頻率:16khz,24khz,32khz;(默認為16khz)
自適應速率為10kbit/s ~ 52kbit/s;
自適應包大小:30~60ms;
算法延時:frame + 3ms
b.iLBC
Internet Low Bitrate Codec
VoIP音頻流的窄帶語音編解碼器
採樣頻率:8khz;
20ms幀比特率為15.2kbps
30ms幀比特率為13.33kbps
標準由IETF RFC3951和RFC3952定義
c.NetEQ for Voice
針對音頻軟件實現的語音信號處理元件
NetEQ算法:自適應抖動控制算法以及語音包丟失隱藏算法。使其能夠快速且高解析度地適應不斷變化的網絡環境,確保音質優美且緩衝延遲最小,是GIPS公司獨步天下的技術,能夠有效的處理由於網絡抖動和語音包丟失時候對語音質量產生的影響。NetEQ 也是WebRTC中一個極具價值的技術,對於提高VoIP質量有明顯效果,加以AEC\NR\AGC等模塊集成使用,效果更好。
d.Acoustic Echo Canceler (AEC)
回聲消除器是一個基於軟件的信號處理元件,能實時的去除mic採集到的回聲。
e.Noise Reduction (NR)
噪聲抑制也是一個基於軟件的信號處理元件,用於消除與相關VoIP的某些類型的背景噪聲(嘶嘶聲,風扇噪音等等)
VideoEngine
WebRTC視頻處理引擎,VideoEngine是包含一系列視頻處理的整體框架,從攝像頭採集視頻到視頻信息網絡傳輸再到視頻顯示整個完整過程的解決方案。
a. VP8
視頻圖像編解碼器,是WebRTC視頻引擎的默認的編解碼器VP8適合實時通信應用場景,因為它主要是針對低延時而設計的編解碼器。VPx編解碼器是Google收購ON2公司後開源的,VPx現在是WebM項目的一部分,而WebM項目是Google致力於推動的HTML5標準之一。
b. Video Jitter Buffer
視頻抖動緩衝器,可以降低由於視頻抖動和視頻信息包丟失帶來的不良影響。
c. Image enhancements
圖像質量增強模塊對網絡攝像頭採集到的圖像進行處理,包括明暗度檢測、顏色增強、降噪處理等功能,用來提升視頻質量

WebRTC組成部分

視頻引擎(VideoEngine),音效引擎(VoiceEngine),會議管理(Session Management),iSAC:音效壓縮VP8:Google自家的WebM項目的視頻編解碼器APIs(Native C++ API, Web API)。

WebRTC視頻

WebRTC的視頻部分,包含採集、編解碼(I420/VP8)、加密、媒體文件、圖像處理、顯示、網絡傳輸與流控(RTP/RTCP)等功能。
視頻採集---video_capture
源代碼在webrtc\modules\video_capture\main目錄下,包含接口和各個平台的源代碼。
在windows平台上,WebRTC採用的是dshow技術,來實現枚舉視頻的設備信息和視頻數據的採集,這意味着可以支持大多數的視頻採集設備;對那些需要單獨驅動程序的視頻採集卡(比如海康高清卡)就無能為力了。視頻採集支持多種媒體類型,比如I420、YUY2、RGB、UYUY等,並可以進行幀大小和幀率控制。
視頻編解碼---video_coding
源代碼在webrtc\modules\video_coding目錄下。WebRTC採用I420/VP8編解碼技術。VP8是google收購ON2後的開源實現,並且也用在WebM項目中。VP8能以更少的數據提供更高質量的視頻,特別適合視頻會議這樣的需求。
視頻加密--video_engine_encryption
視頻加密是WebRTC的video_engine一部分,相當於視頻應用層面的功能,給點對點的視頻雙方提供了數據上的安全保證,可以防止在Web上視頻數據的泄漏。
視頻加密在發送端和接收端進行加解密視頻數據,密鑰由視頻雙方協商,代價是會影響視頻數據處理的性能;也可以不使用視頻加密功能,這樣在性能上會好些。
視頻加密的數據源可能是原始的數據流,也可能是編碼後的數據流。估計是編碼後的數據流,這樣加密代價會小一些,需要進一步研究。
視頻媒體文件--media_file
源代碼在webrtc\modules\media_file目錄下。該功能是可以用本地文件作為視頻源,有點類似虛擬攝像頭的功能;支持的格式有Avi。另外,WebRTC還可以錄製音視頻到本地文件,比較實用的功能。
視頻圖像處理--video_processing
源代碼在webrtc\modules\video_processing目錄下。視頻圖像處理針對每一幀的圖像進行處理,包括明暗度檢測、顏色增強、降噪處理等功能,用來提升視頻質量。
視頻顯示--video_render
源代碼在webrtc\modules\video_render目錄下。在windows平台,WebRTC採用direct3d9和directdraw的方式來顯示視頻。
網絡傳輸與流控
對於網絡視頻來講,數據的傳輸與控制是核心價值。WebRTC採用的是成熟的RTP/RTCP技術。

WebRTC音頻

WebRTC的音頻部分,包含設備、編解碼(iLIBC/iSAC/G722/PCM16/RED/AVT、NetEQ)、加密、聲音文件、聲音處理、聲音輸出、音量控制、音視頻同步、網絡傳輸與流控(RTP/RTCP)等功能。
音頻設備---audio_device
源代碼在webrtc\modules\audio_device\main目錄下,包含接口和各個平台的源代碼。
在windows平台上,WebRTC採用的是Windows Core Audio和Windows Wave技術來管理音頻設備,還提供了一個混音管理器。利用音頻設備,可以實現聲音輸出,音量控制等功能。
音頻編解碼---audio_coding
源代碼在webrtc\modules\audio_coding目錄下。WebRTC採用iLIBC/iSAC/G722/PCM16/RED/AVT編解碼技術。WebRTC還提供NetEQ功能---抖動緩衝器及丟包補償模塊,能夠提高音質,並把延遲減至最小。另外一個核心功能是基於語音會議的混音處理。
聲音加密--voice_engine_encryption
和視頻一樣,WebRTC也提供聲音加密功能。
聲音文件
該功能是可以用本地文件作為音頻源,支持的格式有Pcm和Wav。同樣,WebRTC也可以錄製音頻到本地文件。
聲音處理--audio_processing
源代碼在webrtc\modules\audio_processing目錄下。聲音處理針對音頻數據進行處理,包括回聲消除(AEC)、AECM(AEC Mobile)、自動增益(AGC)、降噪(NS)、靜音檢測(VAD)處理等功能,用來提升聲音質量。
網絡傳輸與流控
和視頻一樣,WebRTC採用的是成熟的RTP/RTCP技術。

WebRTC平台支持

WebRTC在以下瀏覽器版本中開始支持。

WebRTC重要API

WebRTC原生APIs文件是基於WebRTC規格書撰寫而成,這些API可分成Network Stream API、 RTCPeerConnection、Peer-to-peer Data API三類。
Network Stream API
  • MediaStream:MediaStream用來表示一個媒體數據流。
  • MediaStreamTrack在瀏覽器中表示一個媒體源。
RTCPeerConnection
  • RTCPeerConnection:一個RTCPeerConnection對象允許用户在兩個瀏覽器之間直接通訊。
  • RTCIceCandidate:表示一個ICE協議的候選者。
  • RTCIceServer:表示一個ICE Server。
Peer-to-peer DataAPI
  • DataChannel:數據通道(DataChannel)接口表示一個在兩個節點之間的雙向的數據通道。

WebRTC安全性

漏洞
2015年,TorrentFreak報告了一個WebRTC的安全漏洞,該漏洞會致使安裝有WebRTC的用户泄露真實IP,即使用户已經使用虛擬私人網路 [3] 
解決方案
Mozilla Firefox:在地址欄輸入“about:config”,搜索“media.peerconnection.enabled”並雙擊將值改為“false”,WebRTC將被關閉。
Google Chrome:在谷歌應用商店安裝谷歌官方擴展“WebRTC Network Limiter”。
Opera:
其它方案
uBlock Origin:安裝uBlock Origin並在設置中啓用“避免WebRTC 泄露本地IP地址”可以避免本地IP泄露。但需注意的是,該方案不適用於Firefox 41(或更低)、uBlock Origin 1.3.3(或更低)版本用户。
隱私權:安裝隱私獾並在設置中啓用”避免 WebRTC 泄露本地 IP 地址 “可以獲得額外防護,但未知具體效果。
參考資料