本文へスキップ

岩通ソフトシステム株式会社はソフトウェア開発からサービスまでをトータルで提供するソリューションプロバイダです。

WebRTC導入編introduction of Web Real Time Communication

 今回は、WebRTC導入編として、初心者の方にもWebRTCを分かりやすく説明していきます。今回は、
  ●WebRTCとは
  ●通信の始め方
  ●3人以上で通信する
  ●WebRTCのアプリは誰が作る
  ●WebRTCのサービス例
という5項目について説明していきます。技術的な情報もなるべく分かりやすく説明したつもりですが、万人向けにはなっていないので、難しいところは飛ばして興味のある項目だけ読んでいただいても構いません。

WebRTCとは

 WebRTC(Web Real Time Communication)は、Webブラウザの標準機能としてリアルタイムコミュニケーションをサポートすることで、ブラウザ自体が音声、動画、その他のデジタルデータをリアルタイムで通信できるようにする仕組みです。現在、W3CIETFという二つの標準化団体で標準化作業が行われていますが、Chrome、Firefox、Operaの各ブラウザでは既に動作するバージョンが公開されています。
 ブラウザが提供する機能は、WebRTCをサポートするコンテンツページに記述されたJavaScriptによって制御されます。したがって、ブラウザだけあればWebRTCが使えるということではなく、Webページを提供するサーバなど、いくつかのサーバが必要です。

 WebRTCのかなり簡略化した動作イメージは、上の絵のようになり、ブラウザ間の音声、動画データなどの通信は通常サーバなどを介さずブラウザ対ブラウザのPeer To Peer(以後、P2Pと記述します。)で行います。通信を開始するためには、そのためのWebページを提供するWebサーバともう一つシグナリングサーバ(これについては、後で説明します。)が必要です。イントラネットの中だけで使うのであれば、この二つのサーバを追加することでとりあえず運用できます。ただし、INTERNETなどのWANを経由して使用しようとすると、通信経路にはFirewallやNATなどのセキュリティ機器があるので、そう簡単には通信できません。そのため、例えば、下図のようにNATを超える仕組みとしてSTUNサーバが必要になります。
 STUNサーバを利用した仕組みについて、以下で少し説明します。

 通常NATの内側にあるPCはIPアドレスとしてローカルアドレスだけを持っているので、WAN側からはNATやFirewallの陰に隠れて全く見えません。これでは、ブラウザ同士でP2Pの通信はできませんから、何らかの解決策が必要になります。WebRTCで想定している解決策について上の絵を使用して、その動作について説明します。
 なお、下の説明中の数字は、それぞれの説明が上の図中のどのメッセージに該当するかを表しています。また、数字は、ほぼメッセージが送信される順番に基づいて振られています。複数の数字を持ったメッセージは、同じ宛先へ異なるタイミングで異なるメッセージが送信されることを表しています。

 1-2) ブラウザからSTUNサーバに向けて相手ブラウザとの通信で使用するIPアドレス、ポート番号の問合せメッセージを送信し、同時にNATにポートを
    開けることを依頼します。
 3-4) STUNサーバから見たNATのWAN側のIPアドレスとポート番号をブラウザに通知します。
 5-6及び7-8) STUNサーバから通知された「WAN側から見たIPアドレスとポート番号」を使用してシグナリングサーバに相手側と通信したいことを通知します。
 9-10及び11-12) 通信する相手側のIPアドレスとポート番号をシグナリングサーバからブラウザに通知します。
 13-15) シグナリングサーバ経由で通知された「WAN側から見たIPアドレスとポート番号」宛てに音声・動画などのデータを送信することで、相手のブラウザに
     リアルタイムデータを送ります。この二つの片方向通信を一つの双方向通信としてNATに見せることによって、お互いのNATのポートを開けることを
     ホールパンチングと呼びます。

 音声・動画などのリアルタイムデータは、WebRTCではSRTPというセキュアなプロトコルのみを使用し、ベーシックなリアルタイムデータの通信プロトコルであるRTPは使用しません。したがって、SRTPによってWebRTCのリアルタイムデータのセキュリティが守られることになります。

 なお、Webサーバ、シグナリングサーバ、STUNサーバは、同一のサーバにあっても、それぞれが別のサーバにあっても構いません。また、NATを超える仕組みとしては、STUNの他に、ICE、TURNなどの仕組みがあります。

通信の始め方

 NATやFirewallを超えて通信する方法は分かりましたが、それでは、どのようにして、通信を開始するのでしょうか? 電話ではありませんから、電話番号は使えませんので、何らかの相手を識別する仕組みが必要になります。これを行うのが、シグナリングサーバです。シグナリングとは、自分と相手をつないだり、切ったりする時に使われる手順のことを表します。少し難しくなりますが、WebRTCではシグナリングのプロトコルは、標準化されていません。ということは、シグナリングは、システムを開発する人が要求された機能に対して一番良いと思う方法を選んで実装することになります。既にH.323、SIP、Jingleなどのプロトコルスタックを持っている場合には、これらを利用することもできますし、独自のプロトコルを開発して使用することもできます。

  弊社の作成したプロトタイプを例に、どうやって通信を開始するかを説明します。もちろんこれ以外の方法もたくさん存在します。
  弊社のプロトタイプでは、シグナリングサーバにWebサーバが同居しており、シグナリングサーバにログインするためのWebページを提供しています。WebRTCを利用したい人は、ログイン画面でユーザ名とパスワードを入力し、システムから正しいユーザであることを認証されるとログインすることができます。ログインすると呼び出せる候補者の一覧が表示され、この中から呼び出したい相手を選びます。
 下の図では、AAAさんとBBBさんは既にシグナリングサーバにログインしています。この状態でCCCさんがログインすると、CCCさんのブラウザからシグナリングサーバにログイン通知が送信され、その結果、AAAさん、BBBさんにCCCさんのログイン情報が送信されます。また、CCCさんには既にログイン済の人の情報が送信されます。各自の画面は、矢印の先に遷移して、それぞれの呼び出せる相手が更新されます。


 この状態で、AAAさんがCCCさんへの発信ボタンを押すと、AAAさんからシグナリングサーバにoffer通知が送信され、シグナリングサーバにAAAさんがCCCさんを呼び出していることを通知します。シグナリングサーバは、BBBさんには、AAAさんとCCCさんがビジーになったことを通知するメッセージを送信します。CCCさんには、offer通知を送信し、AAAさんから呼び出されていることを通知します。


 これは、あくまでも簡単なシグナリングサーバの動作の例ですが、シグナリングが標準化されていないため、逆に、いろいろな機能を持たせることができます。

3人以上で通信する

 説明の最初で、WebRTCはP2Pの通信が基本であると書きましたが、それでは、複数の人と同時に通信することはできないのかという疑問を持たれた方もいらっしゃると思います。
 複数の人から送られてくる動画や音声をミキシングしたり、動画については拡大・縮小したり、音声についてはエコーの消去なども行いながら、出力することになりますが、ブラウザでこれらを行うとかなりの負荷がかかってしまい、スムーズに動作し難くなってしまいます。
 そこで、ミキシングやエコー消去を行う別の機器が必要になります。この機能を持った機器は、MCU(Multi-Point Control Unit)やメディアサーバなどと呼ばれます。2者以上と通信する場合にも、MCUやメディアサーバとブラウザはP2Pで通信を行います。自分側から送信するメッセージは、P2Pの相手がブラウザの時と変わりませんが、送られてくるメッセージはミキシングやエコー消去が行われた音声のメッセージであったり、複数の動画を一つに合成した動画のメッセージになります。
 現在のところ、WebRTC用に無料で使用できるMCUは筆者の知る限りではINTERNET上にはありませんので、WebRTCのサービスを行う事業者がMCUを設置することになります。 

WebRTCアプリは誰が作る

 企業のホームページなどでWebRTCを提供する場合には、どこに開発を頼めば良いのでしょうか? グラフィックデザイン会社にお願いしても、JavaScriptでプログラミングができるとは限りませんし、シグナリングサーバを開発するのは大変だと思います。WebRTCを制御するためには、今まで説明してきたような通信にかかわる技術が必要ですから、WebRTCでの通信について良く知っているソフトウェアの開発会社とWebコンテンツの制作会社などのコラボレーションが必要になります。
 弊社は、ソフトウェアの開発会社ですが、デザインはパートナのグラフィックデザイン会社に弊社から作成を依頼しますので、ワンストップで開発もデザインもお受けすることができます。

WebRTCのサービス例

 WebRTCは、電話のように、基本的には用途を選びませんが、WebRTCを使うことによってメリットを多く得られるサービス例を以下に記述します。

  ●コールセンタシステム
   社内外のお客様へのサポートや相談を行うイントラネット・インターネットを活用したコールセンタやヘルプデスク

  ●営業支援ツール
   電話だけでは伝えられることが限られてしまうような時にWebなどを活用する営業支援システム

  ●会議システム
   1対1ベースのテレビ電話システム、MCUなどのシステムの導入による会議システム、ホールパンチング(NATやFirewall越しの通信)の必要がない
   イントラネット内だけであれば、比較的シンプルなシステムで構築

  ●プレゼンテーションシステム
   新商品、新サービスの発表など、不特定多数の視聴者にプレゼンを行うシステム

  ●教育システム
   講義、セミナー、カンファレンスなどの教育システム

  ●監視システム
   複数の遠隔地の状況をどこからでも監視できるシステム


WebRTCを使用したこれらのシステムの利点を以下に記述します。

  ●利用者側ではヘッドセットまたはマイク、スピーカ、必要であればWebカメラなど一般的で安価な機器だけで構成でき、専用の機器を使用する必要が
   ありません。ただし、サーバは別途用意する必要があります。

  ●ブラウザの基本機能を使用するため、アプリケーションソフトウェアやプラグインなどのインストールが必要ありません。PCなどの環境を変更する
   ことなく使用できます。

  ●ホームページからWebRTCを使用したリアルタイム通信を起動できるため、自然なワークフローで手軽に利用できます。

  ●WebRTCを利用するアプリケーションごとに使う機能を決められます。例えば、ミニマムなものではチャットだけ、音声だけ、テレビ電話、
   さらにデータチャネルを使用した独自の機能などサービスを提供する単位で決めることができますので、柔軟なサービスを構築することができます。
   また、使用するシグナリングプロトコルにも自由度がありますので、一番適切なシグナリングプロトコルを使用することができます。

 ざっとあげただけでも、これら多くの利点があります。WebRTCは、今後のリアルタイム通信において大きなウエイトを占めるようになるのではと考えています。      


参考:WebRTC標準化団体
    http://www.w3.org/2011/04/webrtc-charter.html
    http://tools.ietf.org/wg/rtcweb/charters
   WebRTCのGoogleの情報サイト
     http://www.webrtc.org/