QCon New York 2013で、Gustavo Garcia氏は、WebRTC、HTML5の新しいリアルタイム通信コンポーネントに関する講演を行った。WebRTCは、ピア間のリアルタイム、低レイテンシな通信が可能になる一連の技術で、例えば、ビデオとオーディオ会議そしてゲームで使用できる。リアルタイムな通信は、典型的にはWebSocketを使用して実装され、WebRTCは、直接ピア・ツー・ピア接続を確立しようとし、例えばNATまたはファイアウォールにより直接接続が確立できない場合にのみ(トンネル)間のホップを使用することによって、劇的にレイテンシを下げる。
Garcia 氏はWeb技術を使用してビデオやオーディオ会議システムを構築するために必要な様々な構成要素を説明した。一対一の通話を確立することは、おそらく最も簡単なユースケースだ。これのために、ブラウザが以下のことをサポートする必要があるだろう。
- ストリーミングビデオとオーディオをデコードし、表示する機能
- (ウェブ)カメラからのストリーミングビデオとオーディオをキャプチャする機能
- コールをネゴシエートする(シグナリングなど)プロトコル
- 効率的なオーディオおよびビデオの符号化および復号化を行うためのコーデック
- エコーキャンセル、ノイズの抑制、ビットレート適応(帯域幅の変化にストリームを適応させる)そして他の多くの側面に対処するためのアルゴリズム
これらの多くは、今ではHTML5の一部である。その中にはストリーミングビデオとオーディオと getUserMediaによるビデオやオーディオのキャプチャがある。getUserMedia APIは、オーディオとビデオをキャプチャするために使用されるが、現在Chromeの新しいビルドに実装されている実験的な拡張では画面のキャプチャや個々のブラウザのタブやWebページの一部のキャプチャにも使われている。
WebRTCの1つの顕著な手抜きは、シグナリングの直接サポートである。シグナリングは、コールのセットアップを処理する:誰が誰にコールしようとしているのか、その人はそのコールを受け付けるのか、など。このシグナリングは、例えばWebSocketやまたはHTTPロングポーリングを使って、開発者が自分で実装する必要がある。開発者が自分自身でデプロイする必要のあるインフラの他の部分は、NATトラバーサルを必要とするユーザーと限定的ファイアウォールを持つユーザーのための仲介者として動くトンネルサーバーだ。氏によると、すべてのコールの8%は、そのような中間トンネルサーバが必要だ。
Garcia氏はWebRTCの様々なユースケースを説明している。
- 一対一のビデオとオーディオコール は WebRTCを使用して実装できる最も単純なものである。
- マルチ参加者コール は、実装することがより困難である。1つのオプションは、各参加者が他のすべての参加者に接続するフルメッシュネットワークであるが、高CPUと高帯域幅の使うために、このアプローチは5-6人の参加者を超える拡張ができない。代替案は、すべてのストリームを集約し、それらを他の全ての参加者に、別々にあるいは単一のストリームにマージして、ブロードキャストする中間サーバーを使うことだ。
- Telephonyによって、WebRTCが固定電話網に接続することができ、Webブラウザを介して通常の固定電話に電話をかけることができる。
- Gamingによって、WebGLのような他のHTML5の技術と組み合わせて、リアルタイムなマルチプレイヤーゲームができる。
- ファイル転送、WebRTCは、任意のデータのピアツーピア転送をサポートしているので、この技術は、ユーザ間でファイルを転送するために使用することができる。例えば、この方法でBitTorrentのようなアプリケーションを作成することを想像できるだろう。
WebRTCサポートはまだ今日のブラウザでは始まったばかりだが(現在のところ唯一の新しいバージョンのChromeとFirefoxがそれをサポートしている)、多くのユースケースが存在する。もっと技術の詳細について知りたければwebrtc.org あるいは関連の W3C 標準を見て欲しい。