關於 WebRTC,你所需要知道的幾件事
1. 什麼是 WebRTC?
WebRTC 是 Web Real-Time Communication 的縮寫,可以讓瀏覽器上不同的使用者在不需要安裝瀏覽器 plugin 的前提下進行點對點 (peer-to-peer) 的語音, 視訊通話以及資料傳輸。截至目前為止,已經有越來越多的瀏覽器紛紛都加入支援 WebRTC 的行列,包含蘋果的 Safari 以及微軟的 Edge:
Browsers support RTCPeerConnection API [1]
另外由於其 open source 的特性以及相關社群的蓬勃發展,有不少的公司已經使用 WebRTC 平台來客製化自己的企業溝通及社群通訊應用。
Companies use WebRTC [2]
2. 支援行動平台嗎?
支援主流的 Android 及 iOS 的原生開發平台,行動開發者可以使用類似 Web 平台的 PeerConnection API 搭配官方範例進行開發。其中 WebRTC 官方在 2017 年秋季之後,開始不定期釋出這兩個平台的 prebuilt 版本(google-webrtc, GoogleWebRTC),更加節省開發者的 WebRTC 環境建置時間。
3. 使用 WebRTC 需要收費嗎?
WebRTC 程式碼本身就是 open source,任何人都可用來開發自己的多媒體通訊應用,而且 Google 預設使用 VP8 視訊和 iLBC 語音編解碼器,所以可以視為 Google 並沒有透過 WebRTC 的任何元件或者是相關編解碼器來跟開發者收取任何使用或專利授權費用; 除非開發者有一定得使用其他需要專利授權費用的編解碼器之需求(如: H.264),不然一般來說,是不需要支付任何費用的。
4. 支援群組會議嗎?
WebRTC 平台以支援 peer-to-peer 的安全傳輸溝通, 多平台開發為主要賣點,但是並沒有定義到信號交換的協定規範以及伺服器架構設計這一個層級。以官方版的範例程式 AppRTC 為例,這個範例展示了兩個 peer 利用了 AppRTC 自定義的信號交換與信號伺服器來完成這整個 WebRTC 所需的 ICE Negotiation 流程,信號伺服器只扮演了信號交換的角色,不牽涉到多媒體串流的中繼。所以如果是要支援多人視訊通話的話,就需要自行尋找相容於 WebRTC 的第三方 framework 來擴充信號以及多媒體串流伺服器端的需求。
5. 身為 WebRTC 的開發者,一定要懂的技術關鍵字:
WebRTC Architecture [3]
從上面的架構圖來看,會看到跟 WebRTC 實際開發相關的幾個關鍵字:
- P2P (peer-to-peer) 相關,STUN, TURN, ICE:
WebRTC 是透過點對點的 UDP 來傳送串流資料,因此具有接近超低延遲的優勢(real-time),但是由於每個 peer 可能是位於防火牆或者是 NAT 架構之下,所以需要一套可以穿透 NAT 的協定來協調並保證端點間具有一定的網路穿透性,目前 WebRTC 用的是 ICE,算是把 STUN 跟 TURN 結合起來,然後根據不同的環境下,選擇相對適合的協定。其中 STUN 可以簡單想成是一種 NAT 的 UDP 打洞機制,TURN 則是當成多媒體串流的中繼伺服器機制,主要是當前者失效時的一種備援機制。但即使有了上述協定,WebRTC 還是沒辦法滿足 100% 的網路穿透性,跟一般走 HTTP 的協定(e.x. HLS)還要差,而且也缺少 CDN 的支援[4]。
- RTCPeerConnection
WebRTC 開發者最常面對的 API,簡單的來說,開發者需要操作此 API 來將 AudioTrack/VideoTrack 加進 RTCPeerConnection instance 內藉此將本地端的串流傳至遠端,同樣地藉由 RTCPeerConnection 此一介面取出遠端的串流資訊,並播放/顯示在本地端。WebRTC 使用了 SDP (Session Description Protocol) 此一格式來識別端點間的資訊與多媒體能力並且進一步完成信號(Signaling)資料交換與 ICE Neogiation 流程,相關細節可參考 [5]。
可進一步參考 [6] 以獲得更多 WebRTC 關鍵字相關的資訊。
6. WebRTC 不適合用來做什麼?
直播平台,尤其是直接使用原生 P2P 架構。由於 WebRTC 支援 P2P 的雙向多媒體串流,所以如果沒有中繼多媒體串流伺服器介入的話,整個 WebRTC 系統的擴充性應該會限制在不超過十人左右,跟實際直播應用的破萬以上的規模有著不小的差距。而且就算投入多媒體串流伺服當做中繼伺服器,但以現行 CDN 對於 WebRTC 的低支援度,要單純使用 WebRTC 來支援大規模的多媒體應用還是相當不適合 [4]。
參考資料
- Can I Use webrtc
- WEBRTC_FOR_BUSINESS_PEOPLE
- WebRTC 官網
- 低延遲戰場-最新影音串流技術盤點
- Signaling and video calling
- Webrtcglossary