WebRTC API

WebRTC (Web Real-Time Communications、ウェブリアルタイムコミュニケーション) は、ウェブアプリケーションやウェブサイトにて、仲介を必要とせずにブラウザー間で直接、任意のデータの交換や、キャプチャしたオーディオ/ビデオストリームの送受信を可能にする技術です。 WebRTC に関する一連の標準規格は、ユーザーがプラグインやサードパーティ製ソフトウェアをインストールすることなく、ピア・ツー・ピアにて、データ共有や遠隔会議を実現することを可能にします。

WebRTC は、相互に関連したいくつかの API とプロトコルで構成されており、これらが連携してこれを実現しています。ここで紹介するドキュメントでは、WebRTC の基礎知識、データ接続とメディア接続、両方の設定方法と、使用方法などを理解するのに役立ちます。

相互運用性

WebRTC の実装はまだ進化しており、ブラウザごとにコーデック (en-US)や WebRTC 機能のサポートレベルが異なるため、コードを書き始める前に Google が提供する Adapter.js ライブラリを利用することを強く検討する必要があります。

Adapter.js はシム (Shim) やポリフィル (polyfill) を使用して、サポートしている環境によって異なる WebRTC 実装の違いを滑らかにします。また、接頭辞やその他の名前の違いも Adapter.js が処理することで、WebRTC の開発プロセス全体がより簡単になり、より広範な互換性のある結果が得られるようになります。このライブラリは NPM パッケージとしても提供されています。

Adapter.js の詳細については、WebRTC adapter.js を使用した互換性の向上 (en-US)を参照してください。

WebRTC の概念と使い方

WebRTC は複数の目的に対応しています。Media Capture と Streams API と一緒に使用することで、音声・ビデオ会議、ファイル交換、画面共有、ID 管理、DTMF (タッチトーンダイヤル信号) の送信サポートを含む旧来の電話システムとのインターフェースなど、強力なマルチメディア機能を Web に提供します。ピア間の接続は、特別なドライバやプラグインを必要とせずに行うことができ、多くの場合、中間サーバーを介さずに行うことができます。

2つのピア間の接続は RTCPeerConnection インターフェースで表現されます。接続が確立され、RTCPeerConnection を使用して開かれると、メディアストリーム((MediaStreams))やデータチャンネル (RTCDataChannels) を接続に追加することができます。

メディアストリームは、メディア情報の任意の数のトラックで構成することができます。トラックは、MediaStreamTrack インターフェイスに基づいたオブジェクトで表され、オーディオ、ビデオ、テキスト(字幕やチャプター名など)を含むメディアデータのいくつかのタイプのうちの1つを含むことができます。ほとんどのストリームは少なくとも 1 つのオーディオトラックとビデオトラックで構成されており、ライブメディアや保存されたメディア情報(ストリーミングされた動画など)の送受信に使用することができます。

また、2 つのピア間の接続を使用して、RTCDataChannel インターフェイスを使用して任意のバイナリデータを交換することもできます。これは、バックチャンネル情報、メタデータ交換、ゲームステータスパケット、ファイル転送、あるいはデータ転送のためのプライマリチャンネルとして使用することができます。

より多くの詳細と関連するガイドやチュートリアルへのリンクが必要ですね…。

WebRTC リファレンス

WebRTC は、様々なタスクを達成するために連携して動作する複数のインターフェースを提供しているため、以下のリストのインターフェースをカテゴリ別に分けています。アルファベット順のリストはサイドバーをご覧ください。

接続の設定と管理

以下のインターフェイス、辞書、型は、WebRTC 接続のセットアップ、オープン、管理に使用します。これには、ピアメディア接続、データチャネルおよび、それぞれのピアが双方向メディア接続のために最適な設定を選択する機能に関する情報をやりとりするためのインターフェースが含まれています。

インターフェイス

RTCPeerConnection
ローカルコンピュータとリモートピア間の WebRTC 接続を表します。これは、2つのピア間のデータの効率的なストリーミングを処理するために使用されます。
RTCDataChannel
接続の2つのピア間の双方向データチャネルを表します。
RTCDataChannelEvent
RTCPeerConnectionRTCDataChannel をアタッチしている間に発生するイベントを表します。このインタフェースで送信されるイベントは、データチャネル datachannel のみです。
RTCSessionDescription
セッションのパラメータを表します。各 RTCSessionDescription は、オファー/アンサーネゴシエーションプロセスの、どの部分を記述するかを示す記述型 (type (en-US)) と、セッションの SDP (en-US) 記述子で構成されます。
RTCStatsReport (en-US)
接続または接続上の個々のトラックの統計情報の詳細を提供します。RTCPeerConnection.getStats() (en-US) を呼び出すと報告を取得できます。    WebRTC 統計情報の使用に関する詳細は、 WebRTC 統計 API (en-US) を参照してください。
RTCIceCandidate (en-US)
RTCPeerConnection を確立するための ICE(インタラクティブ接続確立) サーバの候補を表します。
RTCIceTransport (en-US)
ICE トランスポートに関する情報を表します。
RTCPeerConnectionIceEvent
ターゲットとの ICE 候補(通常は RTCPeerConnection )に関連して発生するイベントを表します。このタイプのイベントは icecandidate 1つだけです。
RTCRtpSender (en-US)
RTCPeerConnection 上の MediaStreamTrack のデータのエンコードと送信を管理します。
RTCRtpReceiver (en-US)
RTCPeerConnection 上の MediaStreamTrack のデータの受信とデコードを管理します。
RTCTrackEvent (en-US)
このインターフェイスは track (en-US) イベントを表すもので、 RTCRtpReceiver (en-US) オブジェクトが RTCPeerConnection オブジェクトに追加されたことを示すトラックイベントを表現するために使用されるインターフェースで、新しい着信 (incoming) MediaStreamTrack が生成され、RTCPeerConnection に追加されたことを示します。
RTCSctpTransport (en-US)
Stream Control Transmission Protocol (SCTP (en-US)) トランスポートを説明する情報を提供し、 RTCPeerConnection のすべてのRTCPeerConnection のデータチャネルの SCTP パケットが送受信される Datagram Transport Layer Security (DTLS (en-US)) トランスポートにアクセスする方法も提供します。

辞書

RTCConfiguration
RTCPeerConnectionRTCPeerConnection の構成オプションを提供するために使用します。
RTCIceServer (en-US)
(STUN (en-US)TURN (en-US) サーバのような) 単一の ICE サーバーを定義します。
RTCRtpContributingSource (en-US)
ソース貢献されているパケットが再生された直近の時刻を含む、特定の貢献ソース (contributing source; CSRC)に関する情報が含まれています。

RTCSctpTransportState (en-US)
RTCSctpTransport (en-US) インスタンスの状態を示します。
RTCSessionDescriptionCallback
RTCSessionDescriptionCallback は、オファーやアンサーの作成を要求する際に RTCPeerConnection オブジェクトに渡されます。

アイデンティティとセキュリティ

これらの API は、セキュリティとアイデンティティを管理し、ユーザーの接続を認証するために使われます。

RTCIdentityProvider
ユーザー・エージェントが ID アサーションの生成または検証を要求できるようにします。
RTCIdentityAssertion (en-US)
現在の接続のリモートピアの ID を表します。まだピアが設定されておらず、検証されていない場合、このインターフェイスは null を返します。一度設定すると変更することはできません。
RTCIdentityProviderRegistrar
ID プロバイダ(idP)を登録します。
RTCIdentityEvent
ID プロバイダ (idP) によって生成された ID アサーションを表します。これは通常、RTCPeerConnection に対して行われます。このタイプで送信されるイベントは identityresult のみです。
RTCIdentityErrorEvent
ID プロバイダ (idP) に関連するエラーを表します。これは通常、 RTCPeerConnection に対して行われます。このタイプでは、 idpassertionerroridpvalidationerror の 2 つのイベントが送信されます。
RTCCertificate (en-US)
RTCPeerConnection が認証に使用する証明書を表します。

電話通信

以下のインターフェイスは、公衆電話網 (public-switched telephone networks; PTSNs) と通信するために利用します。

RTCDTMFSender (en-US)
RTCPeerConnection のデュアルトーン多周波 (DTMF) シグナリングのエンコーディングと送信を管理します。
RTCDTMFToneChangeEvent (en-US)
DTMF トーンが開始または終了したことを示すためにtonechange (en-US) イベントで使用されます。このイベントは(別段の記載がある場合を除き)泡立たず (bubble) 、(別段の記載がある場合を除き)キャンセルできません。

ガイド

WebRTC プロトコル入門
この記事では、WebRTC API の基礎となっているプロトコルについて説明しています。
WebRTC 接続
WebRTC 接続がどのように動くかを説明するガイド。どのように様々なプロトコルとインターフェースが協調して用いられることで強力なコミュニケーションアプリを構築することができるかについて説明しています。
WebRTC セッションのライフタイム (en-US)
WebRTCは任意のデータ、音声、映像またはそれらの組み合わせをやりとりするピアツーピア通信をブラウザアプリケーション上に構築することができます。この記事では、接続の確立から不要となり閉じられるまでのWebRTCのライフタイムについて見ていきます。
接続の確立: 完全なネゴシエーションパターン (en-US)
完全なネゴシエーションはシグナリングプロセスが従うべき推奨されるデザインパターンです。二者を区別するためにたくさんのコーディングを必要とせずに、双方をオファー側とアンサー側のどちらにもなれることを可能にするネゴシエーションにおける透過性を提供します。
シグナリングと双方向ビデオ通話 (en-US)
以前の例で作成したウェブソケットベースのチャットシステムに参加者同士のビデオ通話機能を追加するチュートリアルと例。チャットサーバのウェブソケット接続は WebRTC のシグナリングとして用いられます。
WebRTC で用いられるコーデック (en-US)
WebRTC を用いる上でブラウザがサポートしているべきコーデックと様々なポピュラーなブラウザでサポートされている追加的なコーデックについてのガイド。必要に応じたベストなコーデックの選び方についてのガイドも含みます。
WebRTC データチャネルを使う (en-US)
このガイドでは、ピア接続と関連する RTCDataChannel を使用して、2 つのピア間で任意のデータを交換する方法について説明します。
DTMFをWebRTCと共に用いる (en-US)
RTCDTMFSender (en-US)インターフェースを用いたDTMFトーン送信サポートを含む、旧式の電話システムとのゲートウェイとやりとりを行うためのWebRTCサポートについて、このガイドでは、その方法を説明します。

チュートリアル

Improving compatibility using WebRTC adapter.js (en-US)
WebRTC 組織は、異なるブラウザの WebRTC 実装における互換性の問題を回避するため adapter.js を提供しています。このアダプタは JavaScript のはシム (Shim) で、あなたのコードを仕様に合わせて記述することで、WebRTC をサポートしているすべてのブラウザで「ただ動く (just work) 」ようにしてくれます。
WebRTC で静止画を撮る (en-US)
この記事では、WebRTC に対応したパソコンや携帯電話でWebRTCを使ってカメラにアクセスして写真を撮る方法を紹介しています。
シンプルな RTCDataChannel のサンプル (en-US)
RTCDataChannel インターフェイスは、2つのピア間で任意のデータを送受信するためのチャネルを開くことができる機能です。このAPIは意図的に WebSocket API (en-US) に似せているので、それぞれに同じプログラミングモデルを使用することができます。

リソース

プロトコル

WebRTC-proper プロトコル

WebRTC 統計情報

仕様書

仕様書 状態 備考
WebRTC 1.0: Real-time Communication Between Browsers 勧告候補 WebRTC API の初期定義。
Media Capture and Streams 勧告候補 メディアコンテンツのストリームを伝達するオブジェクトの初期定義。
Media Capture from DOM Elements 草案 DOM 要素からコンテンツのストリームを取得する方法の初期定義。

これらの API 仕様に加えて、Web RTC は リソース に示されているさまざまなプロトコルを用いる必要があります。

関連項目