WebRTC學習(一):WebRTC 簡介


一、WebRTC概念

1.什么是WebRTC

音視頻互動的例子:https://appr.tc/(需翻牆)。

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

參考資料:

1). MediaDevices:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaDevices

2). WebRTC API:https://developer.mozilla.org/en-US/docs/Web/API/WebRTC_API

二、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源碼目錄結構

首先我們需要將WebRTC的源碼下載下來,現了解一下WebRTC源碼目錄的基本構成:

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

四、WebRTC 運行機制

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

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

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

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

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

PeerConnection調用時序圖如下:

 

這里我們現不對上面的流程圖和時序圖進行詳細介紹,大家簡單看一下,保證稍微有點概念即可。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM