WebRTC

WebRTC

WebRTC,名稱源自網頁即時通信(英語:Web Real-Time Communication)的縮寫,是一個支持網頁瀏覽器進行實時語音對話或視頻對話的API。它於2011年6月1日開源並在Google、Mozilla、Opera支持下被納入全球資訊網聯盟的W3C推薦標準。

特點

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,linux,mac,android。

架構

顏色標識說明

(1)紫色部分是Web開發者API層;

(2)藍色實線部分是面向瀏覽器廠商的API層

(3)藍色虛線部分瀏覽器廠商可以自定義實現

架構組件介紹

(1) Your Web App

Web開發者開發的程式,Web開發者可以基於集成WebRTC的瀏覽器提供的web API開發基於視頻、音頻的實時通信套用。

(2)Web API

面向第三方開發者的WebRTC標準API(Javascript),使開發者能夠容易地開發出類似於網路視頻聊天的web套用,最新的標準化進程可以查看這裡。

這些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)接口表示一個在兩個節點之間的雙向的數據通道 。

(3)WebRTC Native C++ API

本地C++ API層,使瀏覽器廠商容易實現WebRTC標準的Web API,抽象地對數位訊號過程進行處理。

(4)Transport / Session

傳輸/會話層

會話層組件採用了libjingle庫的部分組件實現,無須使用xmpp/jingle協定

a. RTP Stack協定棧

Real Time Protocol

b. STUN/ICE

可以通過STUN和ICE組件來建立不同類型網路間的呼叫連線。

c. Session Management

一個抽象的會話層,提供會話建立和管理功能。該層協定留給套用開發者自定義實現。

(5)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公司獨步天下的技術,能夠有效的處理由於網路抖動和語音包丟失時候對語音質量產生的影響。

PS:NetEQ 也是WebRTC中一個極具價值的技術,對於提高VoIP質量有明顯效果,加以AEC\NR\AGC等模組集成使用,效果更好。

d.Acoustic Echo Canceler (AEC)

回聲消除器是一個基於軟體的信號處理元件,能實時的去除mic採集到的回聲。

e.Noise Reduction (NR)

噪聲抑制也是一個基於軟體的信號處理元件,用於消除與相關VoIP的某些類型的背景噪聲(嘶嘶聲,風扇噪音等等… …)

(6)VideoEngine

WebRTC視頻處理引擎

VideoEngine是包含一系列視頻處理的整體框架,從攝像頭採集視頻到視頻信息網路傳輸再到視頻顯示整個完整過程的解決方案。

a. VP8

視頻圖像編解碼器,是WebRTC視頻引擎的默認的編解碼器

VP8適合實時通信套用場景,因為它主要是針對低延時而設計的編解碼器。

PS:VPx編解碼器是Google收購ON2公司後開源的,VPx現在是WebM項目的一部分,而WebM項目是Google致力於推動的HTML5標準之一

b. Video Jitter Buffer

視頻抖動緩衝器,可以降低由於視頻抖動和視頻信息包丟失帶來的不良影響。

c. Image enhancements

圖像質量增強模組

對網路攝像頭採集到的圖像進行處理,包括明暗度檢測、顏色增強、降噪處理等功能,用來提升視頻質量。

相關說明

谷歌2011年6月3日宣布向開發人員開放WebRTC架構的原始碼。這個原始碼將根據沒有專利費的BSD(伯克利軟體發布)式的許可證向用戶提供。開發人員可訪問並獲取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的音頻部分,包含設備、編解碼(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在以下瀏覽器版本中開始支持。

•桌上PC端

•Google Chrome23

•Mozilla Firefox22

•Opera18

•Safari11(仍處於開發者預覽階段)

•Android端

•Google Chrome 28(從版本29開始默認開啟)

•Mozilla Firefox 24

•Opera Mobile 12

•Google Chrome OS

•Firefox OS

•iOS 11

•Blackberry 10 內置瀏覽器

•Bowser

支持歷史細節

•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年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。

歷史

2010年5月,Google以6820萬美元收購VoIP軟體開發商Global IP Solutions的GIPS引擎,並改為名為“WebRTC”。WebRTC使用GIPS引擎,實現了基於網頁的視頻會議,並支持722,PCM,ILBC,ISAC等編碼,同時使用谷歌自家的VP8視頻解碼器;同時支持RTP/SRTP傳輸等。

2012年1月,谷歌已經把這款軟體集成到Chrome瀏覽器中。同時FreeSWITCH項目宣稱支持iSAC audio codec。

組成

•視頻引擎(VideoEngine)

•音效引擎(VoiceEngine)

•會議管理(Session Management)

•iSAC:音效壓縮

•VP8:Google自家的WebM項目的視頻編解碼器

•APIs(Native C++ API, Web API)

重要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 Data API

•DataChannel:數據通道(DataChannel)接口表示一個在兩個節點之間的雙向的數據通道。

安全性

漏洞

2015年,TorrentFreak報告了一個WebRTC的安全漏洞,該漏洞會致使安裝有WebRTC的用戶泄露真實IP,即使用戶已經使用虛擬私人網路 。

解決方案

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 地址 “可以獲得額外防護,但未知具體效果。

相關條目

•Jingle

•安全實時傳輸協定

•DNS泄露

相關詞條

相關搜尋

熱門詞條

聯絡我們