コロナウイルスのせいでweb会議やらweb飲み会が流行っていますが、頻繁に使用されるのはMeetかwherebyかZoomなような気がしています。
wherebyなんかは正にweb RTCをつかったアプリって感じです。
ただZoomはどうやら違うようです。何やらWebRTCの機能をいいとこ取りして、より最適化をおこなったアプリのようです。
以下の記事をみていき、なんとなくですがまとめました。
When will Zoom use WebRTC? • BlogGeek.me
How Zoom's web client avoids using WebRTC (DataChannel Update) - webrtcHacks
ただ最近Zoomはセキュリティ面でかなり非難されていて、一部界隈では使用禁止になっていますよね。。
技術にこだわりすぎた結果、セキュリティが甘くなってしまったのでしょうか。。。
- P2Pは使用していない
- 使ってないのはより最適化できるから
- 代わりに使っているのはwebsocketとwebassembly
P2Pは使用していない
WebRTCっていうのはP2Pでの通信をサポートした規格です。
getUserMediaやgetDisplayMediaを通じてwebブラウザ上でカメラや音声の通信を可能にして、P2P通信でそれらを通信していると。
ZoomではgetUserMediaやgetDisplayMediaは使用しているものの、P2Pをつかていないそうです。(代わりに使用しているのは後述のwebsocketとwebassemblyです。)
また、DataChannelという機能も使用されているようで。こちらを使用することで、ネイティブアプリとしてアプリのインストールをする必要がなくなるそうです。
なのでWebRTCを使用していないとはいいつつも、必要なところは使っている、といった感じのようですね
使ってないのはより最適化できるから
圧縮規格にH.264というものを採用しているようで。
正直あまり理解できたものではなかったですが、Zoomはこれを独自のものとして使用しているようです。
そもそもwebRTCでこの規格はサポートされているのですが、Zoom社はこれを独自開発している
このような、最適化を複数おこなっているのでしょう。。
代わりに使っているのはwebsocketとwebassembly
WebRTCではUDPが使用されています。それに対して、websocketではTCPが使用されています。
ここでwebsocket通信を採用するとなると、WebRTCのTCP versionと言うことができそうです。
ではなぜwebsocketをここで使うのか?それはWebRTCでは突破できないファイアウォールをwebsocketだと突破することができるからだそうです。
WebRTCではTURNというサーバを経由する必要があります。正直ここからはちょっと理解しきれていない部分ではあるのですが、TURNサーバの認証の問題をwebsoket通信だと解決できる、、といった利点があるそうです。
その後websocketを通して送信されたバイナリデータはブラウザ上でエンコードとデコードを行われます。その際に使用されるのが、webassembly。これはブラウザ上で動くバイナリコードの新しいフォーマットだそうです。
このようにwebRTCの一部を最適化しているんですね。webRTCを用いたアプリの構築は単純なものだとSkyway APIを用いることでとてもかんたんにできますが、それとはレベチな世界ですねorz