2015年8月19日 星期三

WebRTC 概念筆記

前言


WebRTC是一個建立在瀏覽器協定上的新技術,讓視訊功能不用再安裝額外套件,便可以實現,而他也可以成為許多創新APP上,非常重要的一環,在搜尋許多文件後,發現網路上不乏許多概念清晰的資源,但較為散落,因此寫這一篇論述一下自己所理解的概念,順便將網路學習資源也都放上來!

WebRTC 重要的三大API


  1. MediaStream:支持大多數瀏覽器,使用 getUserMedia() 獲取 audio and webcam stream。
  2. RTCPeerConnection: Caller & Calle 必需互相傳送 Session Description,透過 Session Description Protocol 所定義的 offer 與 answer 來交換多媒體相關的資訊(例如解析度與 codec 等),而此交換的機制稱為 JavaScript Session Establishment Protocol(JSEP)。但由於可能會遇到 NAT 或者 防火牆的關係,因此要靠 ICE 來解決,因此可以使用 Stun/Turn Server來解決,Stun伺服器功能很簡單,就是要讓在 NAT 中的Client取得自己本身公開的 IP/Port,嘗試順序為 UDP -> TCP , Http -> Https ,若直接連線都失敗了,這時後 Turn Server 就會來扮演將全部資料轉送的角色,而前述所提的嘗試順序,會形成不同的連線狀態也稱為 ICE Candidate,然而在進行 p2p 連線時,就會進行這樣的嘗試過程,並在當中選擇最好的 ICE Candidate來使用,而常用的有 google's stun => stun:stun.l.google.com:19302。上述兩者所要最後則要透過信號通道/服務來傳送 RTCPeerConnection 會負責解決其餘的多媒體串流問題。
  3. RTCDataChannel:可以使兩個 browser 直接傳送檔案,不用再透過Server當作中介。負責一般性資料之傳送。PubNub有提供相關服務:然而WebRTC協定很遺憾地沒有提供儲存機制,但有許多的資料例如:聊天的歷史記錄等等,因此也有像 PubNub 這種公司提供一些付費的Solution來給需要使用的人。


運作流程


我們可以去想像 WebRTC是兩個瀏覽器之間的互動,而呼叫者與被呼叫者的過程如下:
  1. 欲呼叫的原瀏覽器(caller)會提供一個 offer 包含 session description
  2. 被呼叫的瀏覽器(callee)會接收呼叫者的資訊並且回覆一個 session description
  3. 呼叫的原瀏覽器(caller)得到呼叫對象的回覆後
  4. 雙方開始交換 ICE candidate 候選人
  5. 當足夠且據連線力的候選人出線後,就開始進行 Peer Connection


Signaling issues(有許多的方法)


  1.  Codelab上有一份資源: bitbucket.org/webrtc/codelab 利用 socket.io 建設signaling server, 也在教材中運用 RTCPeerConnection 協定,實作一個簡易的視訊系統。
  2. 網路上有許多開源的資源如 easyRTC (full stack) 或者是 Signalmaster (signaling server created for SimpleWebRTC)。
  3. 此網站 apprtc.appspot.com 使用 XHR and the Google App Engine Channel API 來處理 signaling。
  4. HTML5 Websocket - ex. WebSocket 簡單介紹與 jQuery 實作應用 , WebSocket 通訊協定簡介:比較 Polling、Long-Polling 與 Streaming 的運作原理

參考



沒有留言:

張貼留言