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

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

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

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

WebRTC関連リンク
WebRTCベースのOSS Web会議システム
  • JITSI WebRTCベースのオープンソースのビデオ会議システムgithub サーバベースの多対多通信をサポートしていて,サーバのコードも含まれています.
  • Intel Open WebRTC ToolKit SFU + MCUの両方入ってます.github The usage scenarios for real-time media stream analytics including but not limited to movement/object detectionと書かれているので,サーバに画像処理追加可能です.
  • Kurento an Open Source Software WebRTC media server. Seamlessly OpenCV integration と書かれているのでかなり期待できそう.Documentが充実しています.Media serverにmedia processing moduleを簡単に追加できるそうです.リアルタイム画像変換入れるにはこれが最適そう.
  • Licode Server/Clientともに,APIが整備されている.Client APIのgetVideoFrame()をvideo streamをcanvasに取り込めて,Javascript上で画像処理できます.Server APIでは,streamは取り込めない.
  • NTTコムのSkyWay SDK OSSではないですが,サーバインストールしないで済ますには,無償のNTTコムのSkyWayサーバを利用することを前提にSkyWayのSDKを使って見る手があります.活用事例集 (SkyWay 2018 Advent Calendar)

昔は,ブラウザからマイクやカメラにアクセスするには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によって処理されているものと推測できます.各クライアントとサーバの間は通常のサーバクライアント通信です.

オリジナルの通信ツールを作るには,OSSのmedia serverを利用するのが良さそうです.いずれもJavascriptのclient sample codeがあるので,改造は容易です.Kuretoがドキュメントが充実しているので,良さそうです.

こちらはクライアントでの処理の例です.こちらはサーバ処理よりも敷居が低いです.

J専攻学生が作ったコロナ対応OSS