This is an old revision of the document!


脱Zoom宣言! WebRTC API でオリジナルのコミュニケーションツールを作ろう

Zoomを皆さん使っていると思いますが、実は、これはWebRTC (Web RealTime Communication) APIを使ったアプリケーションにすぎません。WebRTCを使えば、自前のWeb会議システムは簡単(?) に実装可能です。Zoomは会議にはいいけど,人と人とのコミュニケーションにはいまいち...と思っている皆さん,オリジナルのオンラインコミュニケーションツールを開発しましょう! 

WebRTC APIは、JavaScriptから簡単に利用することができます。つまり、基本的にはJavaScript だけで、実現できるということになります。

実現に向けて、ここに参考リンクを増やしていきます。

WebRTC関連リンク
WebRTCベースのOSS Web会議システム

昔は,ブラウザからマイクやカメラにアクセスするにはFlashを利用することが必須でしたが,Flashは今年で終了が決まっています.それに代わるJavaScriptベースのAPIがWebRTCということになります.PCのブラウザ(Chrome, Firefox, Safari, Edge) はもちろん,iPhone/iPadのSafari, AndroidのChromeでも動作するのが特徴です.

WebRTCの通信方法は,P2Pベースの1対1通信,サーバが仲介する多対多通信の2通りがあります.P2Pの場合は,最初に2つの通信先にIPアドレスなどを仲介するシグナリングサーバが必要です.また,P2P通信を3人以上の参加者すべての間で行うフルメッシュ型通信というのもあります.多対多の場合は,MCU (Multipoint Control Unit)かSFU (Selective Forwarding Unit) と呼ばれるサーバが必要になります.MCUはサーバで映像や音声の合成処理を行いますが,SFUでは単にクライアントから受け取った映像・音声のストリームを選択し,そのままクライアントに転送するだけです.Zoomなどでは喋っている人の音声と映像に自動的に切り替わりますが,SFUで配信対象ストリームが自動的に選択されているためだと推測できます.SFUは信号の加工を行わないため遅延が小さいですが,MCUでは加工を行うためサーバに負荷が発生し,遅延が発生しやすくなります.通常はSFUですが,遅延があまり問題にならないZoomの参加者16名までの合成映像などはMCUによって処理されているものと推測できます.各クライアントとサーバの間は通常のサーバクライアント通信です.

 オリジナルの通信ツールを作るには,いずれにしてもサーバが必要です.多数の参加が可能なSFU/MCUがどのように用意するかがポイントになりそうです.P2Pでも5人くらいまでならフルメッシュでなんとかなるでしょう. ⇒ SkyWayの無償SFUサーバを借りるのが現実的な解のようです.活用事例集 (SkyWay 2018 Advent Calendar)

MCUもしくはクライアントで以下のような付加価値をつけて研究的なことを行うこともできます.