WebRTC技術研究一入門

一.WebRTC願景

想象一下一個世界,您的電話,電視和計算機都可以在同一個平臺上進行通信。想象一下,將視頻聊天和對等數據共享添加到Web應用程序很容易。這就是WebRTC的願景。

想嘗試一下嗎?WebRTC現在可在臺式機和移動設備上的Google Chrome,Safari,Firefox和Opera中使用。一個很好的起點是位於appr.tc的簡單視頻聊天應用程序:

  1. 在瀏覽器中打開appr.tc。
  2. 單擊加入按鈕加入聊天室,然後讓該應用使用您的網絡攝像頭。
  3. 在新標籤頁中打開頁面底部顯示的URL,或者最好在另一臺計算機上打開。

二.WebRTC概念

1.什麼是WebRTC

我們都知道瀏覽器本身不支持相互之間建立信道進行通信,都需要通過服務器進行中轉。比如現在有兩個客戶端—甲、乙,他倆想要進行通信,首先需要甲和服務器、乙和服務器之間建立信道。甲給乙發送消息時,甲先將消息發送到服務器上,服務器對甲的消息進行中轉,發送到乙處,反過來也是一樣。這樣甲與乙之間的一次消息要通過兩段信道,通信的效率同時受制於這兩段信道的帶寬。同時這樣的信道並不適合數據流的傳輸,如何建立瀏覽器之間的點對點傳輸,一直困擾着開發者。因此WebRTC應運而生。

WebRTC是一個開源項目,旨在使得瀏覽器能爲實時通信(RTC)提供簡單的JavaScript接口。說的簡單明瞭一點就是讓瀏覽器提供JS的即時通信接口。這個接口所創立的信道並不是像WebSocket一樣,打通一個瀏覽器與WebSocket服務器之間的通信,而是通過一系列的信令,建立一個瀏覽器與瀏覽器之間(-to-peer)的信道,這個信道可以發送任何數據,而不需要經過服務器。並且WebRTC通過實現MediaStream,通過瀏覽器調用設備的攝像頭、話筒,使得瀏覽器之間可以傳遞音頻和視頻。

同時WebRTC是一個非常優秀的多媒體框架,且支持跨平臺(支持Android、IOS),能夠使得Android和IOS設備作爲終端設備能夠像瀏覽器一樣,進行即時通信。

2.使用WebRTC能做什麼?

  • 能用於音視頻實時互動,視頻會議
  • 能用於遊戲、即時通訊、文件傳輸等等
  • 它是一個採集,編碼,傳輸音視頻處理(迴音消除、降噪等),渲染

3.學習WebRTC的過程中我們能掌握什麼?

  • 音視頻設備的訪問與管理
  • 音視頻數據的採集
  • 數據的傳輸與實時互動
  • WebRTC的整體工作機制

4.學習WebRTC步驟

(1). 學習NodeJS的基本使用,嘗試搭建一個簡單的Web服務器並實現簡單的HTTP服務。

(2). 學習JavaScript,瞭解並掌握其基本的使用方法,爲後續開發及完善Web服務做技術鋪墊。

(3). 瞭解音視頻設備相關的Web API,嘗試使用MediaDevices實現音視頻設備的訪問,包括攝像頭、麥克風及屏幕採集。

(4). 學習使用Socket.IO,嘗試使用Socket.IO實現簡單的聊天室,爲後續開發WebRTC信令服務器做技術鋪墊。

(5). 瞭解和學習使用SDP,並使用WebRTC的Web API實現本地的1v1視頻互通。

(6). 搭建STUN/TURN服務器,使用ICE框架及Socket.IO實現WebRTC正式的1V1連麥

(7). 實現WebRTC的移動端開發,做到瀏覽器和手機客戶端能進行連麥操作。

三.WebRTC架構

整個WebRTC架構具有很高的複雜性。

 

整體架構分爲應用層和核心層。應用層提供實現相關業務邏輯Api,核心層提供應用層需要的核心API。

其中核心層分爲四層:

第一層爲C++ API,其中最主要的是PeerConnection,這個接口需要重點學習和掌握。

第二層爲Session層,爲上下文管理層,應用裏的音頻和視頻及非音視頻的數據處理邏輯都可以在這層進行。

第三層爲引擎和傳輸層,包括音頻引擎和視頻引擎,以及音視頻的傳輸,這也是整個架構中最重要的一層。

第四層與硬件相關,包括音視頻的採集和網絡的IO。

注:WebRTC的核心層無視頻的渲染,所有的渲染都需要應用層自行實現。

這裏着重提一下第三層:

  • Voice Engine(音頻引擎模塊):包含編碼能力、音頻緩衝Buff(防網絡抖動)、迴音消除(實時連麥關鍵點)。
  • Video Engine(視頻引擎模塊):包含編碼能力(如VP8)、視頻緩衝、圖像增強。
  • Transport(傳輸模塊):傳輸協議在底層使用UDP,上層使用的RTP(爲安全起見增加SRTP),還有P2P機制,包括STUN、TURN 和 ICE。

四、WebRTC源碼目錄結構

這裏着重介紹一下module目錄下的子目錄結構:

五、WebRTC 運行機制

WebRTC核心API有三個:MediaStream、RTCPeerConnection、RTCDataChannel。

MediaStream:通過設備的攝像頭及話筒獲得視頻、音頻的同步流

PeerConnection: 用於構建點對點之間穩定、高效的流傳輸的組件

DataChannel:能夠使得瀏覽器之間(點對點)建立一個高吞吐量、低延時的信道,用於傳輸任何數據

其中PeerConnection調用過程如下圖所示:

 

其中RTCPeerConnection對象的主要任務是建立和創建對等連接。我們可以輕鬆地鉤住連接的關鍵點,因爲此對象在出現時會觸發一組事件。這些事件使您可以訪問我們的連接配置,如下圖所示:

六,WebRTC-快速指南

基本方案

WebRTC允許您快速,輕鬆地建立與其他Web瀏覽器的對等連接。爲了從頭開始構建這樣的應用程序,您需要大量的框架和庫來處理典型的問題,例如數據丟失,連接丟失和NAT遍歷。藉助WebRTC,所有這些內置於現成的瀏覽器中。這項技術不需要任何插件或第三方軟件。它是開源的,其源代碼可從http://www.webrtc.org/

WebRTC API包括媒體捕獲,音頻和視頻的編碼和解碼,傳輸層以及會話管理

基本方案

媒體捕捉

第一步是訪問用戶設備的攝像頭和麥克風。我們檢測可用設備的類型,獲得用戶訪問這些設備和管理流的權限。

音頻和視頻編碼和解碼

通過Internet發送音頻和視頻數據流並非易事。這是使用編碼和解碼的地方。這是將視頻幀和音頻波分成較小的塊並將其壓縮的過程。該算法稱爲編解碼器。有大量不同的編解碼器,這些編解碼器由具有不同業務目標的不同公司維護。WebRTC內部也有許多編解碼器,例如H.264,iSAC,Opus和VP8。當兩個瀏覽器連接在一起時,它們會在兩個用戶之間選擇最受支持的編解碼器。幸運的是,WebRTC在後臺進行了大多數編碼。

運輸層

傳輸層管理數據包的順序,處理數據包丟失並連接到其他用戶。同樣,WebRTC API使我們可以輕鬆訪問事件,這些事件會在連接出現問題時告訴我們。

會話管理

會話管理處理管理,打開和組織連接。這通常稱爲信令。如果將音頻和視頻流傳輸給用戶,則傳輸附帶數據也很有意義。這是由RTCDataChannel API完成的。

來自Google,Mozilla,Opera等公司的工程師爲將這種實時體驗引入Web做出了出色的工作。

參考:

https://www.cnblogs.com/renhui/p/6369568.html

https://www.tutorialspoint.com/webrtc/webrtc_quick_guide.htm

https://www.html5rocks.com/en/tutorials/webrtc/basics/#toc-disruptive

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章