WebRTC加深理解 - 會話流程

基於ios native api自己寫客戶端得出的大概流程,WebRTC的API接口和例子都是oc版本,因爲我最討厭最噁心的語言就是oc,所以我使用swift來編寫客戶端。我本身不是搞ios開發的,以前稍微用過oc,至於swift前段時間看過一點,現學現賣,就是轉換oc的過程實在是折磨死我了。

音視頻客戶端會話的整體流程


  1. WebRTC主要是客戶端技術,儘量使用p2p點對點流媒體傳輸。
  2. 一開始WebRTC客戶端先去連接ICE Server,也就是STUN Server或者TURN Server。
  3. 客戶端連接STUN Server是爲了測試出自己的NAT類型。
  4. TURN Server包含了STUN Server的功能而且包含Relay中轉功能。
  5. 當一個WebRTC客戶端創建RTCPeerConnection並且設置好ICE和本地Audio Track、Video Track以後,會自動向ICE服務器發出測試然後得到ice candidate
  6. 客戶端把得到的candidate使用自己的信令服務器發送給另一個要通訊的客戶端,對方收到candidate後加入到RTCPeerConnection中。
  7. <請求客戶端>使用RTCPeerConnection發出offer請求,得到自己的sdp,然後通過信令服務器發給<被請求客戶端>
  8. <被請求客戶端>收到offer以後調用RTCPeerConnection.setRemoteDescription加入remote sdp,然後調用RTCPeerConnection.answerForConstraints和setLocalDescription得到自己的sdp並且後臺跟ice服務器通訊異步獲得自己的candidate,再將自己的sdp和candidate分別通過信令發回給<請求客戶端>,<請求客戶端>收到sdp後也調用RTCPeerConnection.setRemoteDescription加入remote sdp,收到candidate也加入RTCPeerConnection。
  9. WebRTC客戶端在背後線程中自行完成流媒體傳輸。至於WebRTC內部代碼的運行流程,以後再慢慢分析。
  10. 在這個流程中的信令服務器,跟業務關聯較深,相當於IM服務器。我是打算採用MQTT協議來做IM,採用開源的mosquitto服務器。
  11. TURN服務器使用開源的coTurn自已架設。

SDP


SDP是一種會話描述格式,描述了客戶端本機的媒體信息,比如支持的音視頻編解碼的。SDP協議是基於文本的協議,打印WebRTC中的sdp可以看出是一個很長的字符串,內部使用\r\n換行。
想知道SDP的詳細知識可以參考 SDP協議介紹
如果想再研究深入一點再配合相關的RFC標準文檔。

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