最近は会議やセミナーを対面ではなくWEB会議システムを使って行うことが多く、WEB会議は業務の一部に溶け込んできたように感じております。普段なんとなく使っていたWEB会議システムですが、ふと、どんな技術が使われているのか気になったので軽く調べてみました。その中で音声と映像の配信に使われているWebRTCについてざっくり理解してみたいと思います。
WebRTCはどんな技術
WebRTC(Web Real Time Communication)は言葉の意味の通り、ウェブのリアルタイムコミュニケーション。
音声、ビデオ、データをWebやネイティブアプリを介してリアルタイムで共有することができるオープンソース技術です。
VoIP[*1]ベースのテレビ電話をサポートするインスタントメッセンジャー[*2]をはじめ、よく知られているWeb会議ソリューションにWebRTC技術が使われています。
WebRTCは、従来のストリーミングサービスのように、「クライアント」-「サーバ」構造ではなく、ユーザー間Peer-To-Peer接続でメディア通信を行う技術として始まりました。
WebRTCの機能は、大きく4つに分けることができます。
- ユーザーのdeviceから音声とビデオのデータを抽出
- ユーザーのdeviceから音声とビデオのデータを記録(録画・録音)
- ユーザー間(Peer to Peer)音声とビデオのストリームを配信するための接続を生成
- ユーザー間のリアルタイムでデータの転送を実行
[*1] VoIP(Voice over Internet Protocol)とは、IPを利用して通話をする技術のこと。[*2] インスタントメッセンジャー(Instant Messenger)とは、コンピュータネットワーク(主にインターネット)を通じてリアルタイムコミュニケーションを実現するアプリケーション。
WebRTCと使用されている技術
WebRTCは、通信する相手を検索し、お互いがサポートしている接続方法を見つけ、ネットワークの接続を生成します。それから相手に伝達しやすく圧縮されたビデオをインターネットを介して配信する順序で行われます。相手を正しく見つけることをシグナリング(signaling)と呼び、一般的にWebソケット(WebSocket[*3])を使用します。
[*3] WebSocket(ウェブソケット)は、コンピュータネットワーク用の通信規格の1つ。 ウェブアプリケーションにおいて、双方向通信を実現するための技術規格。
ICE(Interactive Connectivity Establishment)
WebRTC peerが互いを高速かつ正確に見つけることができる方法を提供します。
自分の接続可能なパブリックIPアドレスをSTUNを介して把握し、相手に知らせて通信を要請する仕組みです。しかしNAT(Network Address Translation[*4])環境でのインターネット通信は、複雑になります。NATは、一般的に要求していないパケットは、ブロックする特性を持っているのでクライアントに送信されたパケットを防ぎ、P2Pの間の直接接続を不可能にします。
[*4] NAT(Network Address Translation)はIPアドレスを変換する技術。一般的には、プライベート IPアドレスをグローバルIPアドレスに変換する技術とされています。
STUN(Session Traversal Utilities for NAT)
NATを使用する2つのpeerにお互いがどのように接続するかを教えてくれます。
NATデバイスあるいはpeerのグローバルIPとサービス可能なポート番号を把握してP2P接続が可能かどうかを把握します。P2P接続がファイアウォールやNATの設定により失敗した場合は、TURN(Traversal Using Relay NAT)と呼ばれる中継サーバを介して通信を行います。
TURN(Traversal Using Relays around NAT)
P2P接続が不可能なWebRTCクライアントは、インターネット上に配置された中継サーバ(Relay Server)が必要なときに使用します。ユーザーに最も良好なパフォーマンスを提供することができるサーバを選択するために、DNSはIPベースのルーティングを使用してユーザーが増加した分、TURNサービスの容量が増加するようにサーバーのリソースはオートスケーリング(autoscaling)する方式があります。
SFU(Selective Forwarding Unit)
ストリーム配信を会話に参加したすべての人ではなく必要な人にだけ伝え、サーバーとネットワークのリソース使用を抑える方式です。会話に参加した人たちも可変ビットレート方式でサーバから最小のパケットだけを転送されるので、バッファリングや画質が低くなることを防止することができます。すべてのメンバーが直接接続するP2P Mesh方式や、メンバーが伝えたビデオを中継サーバが1つのビデオに統合して再配信するMCU(Multipoint Conferencing Unit)方式より効率的にリソースの使用を抑えることができます。
終わりに
上記意外にも色んな技術が使われていると思いますが、WebRTCを扱うときには先に抑えて置いた方がよさそうと思われるのを羅列してみました。今後はビデオを配信するサービスやリアルタイム性が要求されるシステムはさらに増えていくと思いますので、新たな技術や普段なんとなく使っていたIT技術についてもっと興味を持って観察していきたいと思います。