>
4)客戶端B通過信令服務器將SDP信息發送給客戶端A;
5)客戶端A、B通過交換SDP等信息,建立P2P通道進行音視頻傳輸;
示意圖如下圖所示:
WebRTC ICE(交互式連接建立)(ICE:Interactive Connectivity Establishment)
以下是呼叫信令期間發生的消息交換的高級過程,即: WebRTC 信令交互流程圖 :
開始
##關鍵詞
--[SOMETHING]-->:表示從主叫方發送給被叫方的“SOMETHING”類型的消息。另一解釋是: 主叫方所要執行操作 。
<--[SOMETHING]--:表示從被叫方發送給主叫方的“SOMETHING”類型的消息。另一解釋是: 被叫方所要執行的操作 。
SS (Signal Service):通過服務器發送的信息(通過BCM 服務器發送的信息)
DC (Data Channel):通過WebRTC 數據通道 發送的消息
### Message Exchange / State Flow Overview (消息交換/狀態流概述)
| Caller(主叫方) | Callee(被叫方) |
+----------------------------+-------------------------+
開始撥出電話:`handleOutgoingCall`...
--[SS.CallOffer]-->
…并開始生成iceCandidate候選,先保存在本地。iceCandidate里面包含了SDP、公網地址、用來標識當前ice中流媒體的id(sdpMid),這個公網地址是由STUN、TURN Server發過來的。
當生成iceCandidate候選后,將會調用方法`handleLocalAddedIceCandidate` ,并把這些iceCandidate保存起來。
被叫方收到來電,通過 `handleReceivedOffer` 發送呼叫應答
<--[SS.CallAnswer]--
1. 開始生成iceCandidate候選。
2. 立即通過`handleLocalAddedIceCandidate` 將它們發送給主叫方。
<--[SS.ICEUpdate]-- (多次發送)
主叫方收到應答后調用方法: `handleReceivedAnswer`,接著發送所有前面保存的iceCandidate候選 (在此之后生成的iceCandidate候選會立即發送)
--[SS.ICEUpdates]--> (多次發送)
完成交換iceCandidate候選后…(此時表示雙方身份已確認,接下來會通過P2P通道建立音視頻會話,這里會涉及NAT技術,有可能失失敗。如果失敗,主叫方會一直顯示呼叫中,被叫方不會顯示任何界面)雙方都調用方法: `handleIceConnected`
顯示遠程鈴聲用戶界面
1.連接到提供的數據通道
2.顯示來電界面
3.如果被叫人接聽電話
4.發送連接消息
<--[DC.ConnectedMesage]--
接收到的連接消息后顯示呼叫已連接。
主叫方掛斷(被叫方同樣可以掛斷)調用方法:
--[DC.Hangup]-->
--[SS.Hangup]-->
結束
上面的消息交換可以整理為如下的簡化版的WebRTC建立連接過程:
1)主叫方通過 createOffer 生成 SDP 描述
2)主叫方通過 setLocalDescription,設置本地的描述信息
3)主叫方將 offer SDP 發送給被叫方
4)被叫方通過 setRemoteDescription,設置遠端的描述信息
5)被叫方通過 createAnswer 創建出自己的 SDP 描述
6)被叫方通過 setLocalDescription,設置本地的描述信息
7)被叫方將 anwser SDP 發送給主叫方
8)主叫方通過 setRemoteDescription,設置遠端的描述信息。
只有通過 SDP握手 ,雙方才知道對方的信息,這是建立p2p通道的基礎。 通過SDP握手后,客戶端之間就會建立起一個點對點的直接通訊通道。但是由于我們所處的網絡環境錯綜復雜,用戶可能處在私有內網內,使用p2p傳輸時,將會遇到 NAT (網絡地址轉換)以及防火墻等阻礙。這個時候我們就需要在SDP握手時,通過STUN/TURN/ICE相關 NAT穿透技術 (也有稱為 打洞 或 穿墻 技術)來保障p2p鏈接的建立。
WebRTC的視頻部分 ,包含采集、編解碼(I420/VP8)、加密、媒體文件、圖像處理、顯示、網絡傳輸與流控(RTP/RTCP)等功能。
視頻采集支持多種媒體類型,比如I420、YUY2、RGB、UYUY等,并可以進行幀大小和幀率控制。
WebRTC采用I420/VP8編解碼技術。VP8是Google收購ON2后的開源實現,并且也用在WebM項目中。VP8能以更少的數據提供更高質量的視頻,特別適合視頻會議這樣的需求。<