全名 Web Real-Time Communication,是一個支援網頁瀏覽器進行即時語音對話或影片對話的 API
WebRTC 的底層就是使用 ICE 來進行 P2P 打洞
信令伺服器,用來交換雙方的 SDP 及 Ice candidate 來完成 P2P 打洞
WebRTC 沒有明確定義如何實作 Signaling Server,主要原因在於如果雙方一開始就知道對方的資訊,那其實就不需要 Signaling Server 來交換資訊
實作一個 Signaling Server 方式有很多種,可以用 HTTP 協議也可以用 WebSocket 協議,只要能順利將雙方的資訊做交換即可
會話描述協議(Session Description Protocol 或簡寫 SDP)描述的是流媒體的初始化參數。此協議由 IETF 發表為 RFC 2327。
v=0
o=mhandley 2890844526 2890842807 IN IP4 126.16.64.4
s=SDP Seminar
i=A Seminar on the session description protocol
u=http://www.cs.ucl.ac.uk/staff/M.Handley/sdp.03.ps
e=mjh@isi.edu (Mark Handley)
c=IN IP4 224.2.17.12/127
t=2873397496 2873404696
a=recvonly
m=audio 49170 RTP/AVP 0
m=video 51372 RTP/AVP 31
m=application 32416 udp wb
a=orient:portrait
Ice Candidate 描述 WebRTC 能與 遠程設備通訊所需的協議和路由,啟動 WebRTC P2P 後,通常會在連接的每一端提供多個 IceCandidate,直到絕定最佳線路達成為止.
{
"sdpMLineIndex": 0,
"sdpMid": "",
"candidate": "a=candidate:2999745851 1 udp 2113937151 192.168.56.1 51411 typ host generation 0"
}
Amazon Kinesis Video Streams 以全受管功能提供符合標準的 WebRTC 實作。您可以使用 Amazon Kinesis Video Streams and WebRTC 安全地即時串流媒體,或在任何攝影機 IoT 裝置與符合 WebRTC 標準的行動或 Web 播放器之間,執行雙向音訊或視訊互動。因為是全受管功能,您不需要建置、執行或擴展任何與 WebRTC 相關的雲端基礎設施,例如訊號或媒體轉送伺服器,即可在應用程式和裝置之間安全地串流媒體。
簡單來說 KVS 就是幫你把 STUN, TURN, Signaling Server 加密權限驗證等等都實作了,WebRTC 的部分跟 KVS 是完全獨立的,你也可以選擇自己架設 STUN, TURN, Signaling Server 搭配 Google WebRTC 也能成功串流.
KVS 的 Signaling server 是用 WebSocket 去實作的
注意: WebSocket 與 Socket.IO 是不是一樣的,Socket.IO 是根據 Websocket 協議去實作,Socket.IO 有自己的通訊格式,請不要拿 Socket.IO 套件去串接 KVS,會失敗,有興趣可以參考這篇 【筆記】Socket,Websocket,Socket.io 的差異
理解這些 P2P 相關的知識,我們就可以很清楚的實作每一步驟,出錯時也能清楚哪一部分出錯,甚至是替換 Stun / TURN / signaling server 都沒問題,下面貼一下成果圖
P2P 的基本觀念大致就到這邊,如果想要更深入的理解 P2P 的朋友,可以看參考資源欄中的文章,或直接看 RFC ,裡面會說到每個協議的格式細節.