本文章來自
https://www.html5rocks.com/en/tutorials/webrtc/infrastructure/
不一一翻譯,撿我認爲重要的記錄下來。
1.會話的發起機制,webrtc沒定義,需自行定義。可參考網上的很多在線例子,房間號的形式實現。
2.信令的交換機制,webrtc沒定義,也是自行定義。主要完成網絡ip地址等網絡信息交換,媒體信息sdp交換。整個流程遵循這個JSEP, the JavaScript Session Establishment Protocol。
3.信令交互流程大概如下:
- offer 提供一個sdp給另外一方
- answer 另外一方回覆一個sdp
- candidates 整個流程中雙方發送自己的外網地址信息給對方,並持續進行嘗試連接,看意思是發起方在offer完後就開始發送candidate給對面,由發送方嘗試連接?
4.信令服務的構建可通過以下傳輸技術:
- EventSource API 單向web server到client的異步傳輸,可通過其他手段(XHR?)構建雙向信息通道。
- WebSocket全雙工完美兼容。
- Google App Engine Channel API
大規模的可參考: - XMPP
- ZeroMQ
- 有商業雲直接用websocket
5.有一個基於node,socket-io的完整例子
6.RTCDataChannel 可在連接完成後代替信令機制以減輕服務壓力
7.現成的信令服務器
- webRTC.io
- easyRTC
- Signalmaster
- 愛立信的php建的服務器
8.成熟的供應商
vLine, OpenTok and Asterisk.
9.在信令過程後,使用ice打洞
10.ice機制原理
- 先使用網卡本地地址
- 不行使用stun
- 再不行就turn轉發
所有turn支持stun
ice測試頁面
11.stun原理
主要是用戶發送包到服務器,服務器返回你的公網地址,然後你通過信令機制發送給你要連接的對方。
12.turn原理
純轉發
13.webrtc多播
Multipoint Control Unit (MCU)
開源mcu:
licode
mantis
14.跟Voip,電話系統,視頻會議系統結合
- SIP VoIP和視頻會議使用的信令協議,需要代理服務器來處理信令轉換,但一旦建立後能直接通過p2p傳輸音視頻SRTP
- PSTN 公共電話交換網絡, 代理服務器一樣要
- XMPP im系統,libJingle是webrtc的前身,就是在xmpp上的拓展,爲了音視頻通訊,處理手段同上
完成以上轉換可用的庫(某些直接在客戶端使用也行吧):
- sipML5 :一個開源的javascript sip 客戶端
- jsSIP: javascript SIP 庫
- Phono :開源javascript phone api,作爲一個plugin?
- Zingaya:一個嵌入式phone widget
- Twilio:音頻 和 信息
- Uberconference:會議庫
- webrtc2sip : 一個網關
- OpenBTS:是一個基於軟件的GSM接入點,允許標準的GSM兼容手機作爲SIP端點在IP電話(VoIP)網絡中使用