WebRTC信令交互流程

WebRTC信令交互流程:

 

WebRTC信令交互流程

上述序列中,WebRTC並不提供Stun服務器和Signal服務器,服務器端需要自己實現。Stun服務器可以用google提供的實現stun協議的測試服務器(stun:stun.l.google.com:19302),Signal服務器則完全需要自己實現了,它需要在ClientA和ClientB之間傳送彼此的SDP信息和candidate信息,ClientA和ClientB通過這些信息建立P2P連接來傳送音視頻數據。由於網絡環境的複雜性,並不是所有的客戶端之間都能夠建立P2P連接,這種情況下就需要有個relay服務器做音視頻數據的中轉。這裏說明一下, stun/turn、relay服務器的實現在WebRTC源碼中都有示例。

上述序列中,標註的場景是ClientA向ClientB發起對聊請求,調用描述如下:

  • ClientA首先創建PeerConnection對象,然後打開本地音視頻設備,將音視頻數據封裝成MediaStream添加到PeerConnection中。
  • ClientA調用PeerConnection的CreateOffer方法創建一個用於offer的SDP對象,SDP對象中保存當前音視頻的相關參數。ClientA通過PeerConnection的SetLocalDescription方法將該SDP對象保存起來,並通過Signal服務器發送給ClientB。
  • ClientB接收到ClientA發送過的offer SDP對象,通過PeerConnection的SetRemoteDescription方法將其保存起來,並調用PeerConnection的CreateAnswer方法創建一個應答的SDP對象,通過PeerConnection的SetLocalDescription的方法保存該應答SDP對象並將它通過Signal服務器發送給ClientA。
  • ClientA接收到ClientB發送過來的應答SDP對象,將其通過PeerConnection的SetRemoteDescription方法保存起來。
  • 在SDP信息的offer/answer流程中,ClientA和ClientB已經根據SDP信息創建好相應的音頻Channel和視頻Channel並開啓Candidate數據的收集,Candidate數據可以簡單地理解成Client端的IP地址信息(本地IP地址、公網IP地址、Relay服務端分配的地址)。
  • 當ClientA收集到Candidate信息後,PeerConnection會通過OnIceCandidate接口給ClientA發送通知,ClientA將收到的Candidate信息通過Signal服務器發送給ClientB,ClientB通過PeerConnection的AddIceCandidate方法保存起來。同樣的操作ClientB對ClientA再來一次。
  • 這樣ClientA和ClientB就已經建立了音視頻傳輸的P2P通道,ClientB接收到ClientA傳送過來的音視頻流,會通過PeerConnection的OnAddStream回調接口返回一個標識ClientA端音視頻流的MediaStream對象,在ClientB端渲染出來即可。同樣操作也適應ClientB到ClientA的音視頻流的傳輸。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章