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
を使用して開かれると、メディアストリーム((MediaStream
s))やデータチャンネル (RTCDataChannel
s) を接続に追加することができます。
メディアストリームは、メディア情報の任意の数のトラックで構成することができます。トラックは、MediaStreamTrack
インターフェイスに基づいたオブジェクトで表され、オーディオ、ビデオ、テキスト(字幕やチャプター名など)を含むメディアデータのいくつかのタイプのうちの1つを含むことができます。ほとんどのストリームは少なくとも 1 つのオーディオトラックとビデオトラックで構成されており、ライブメディアや保存されたメディア情報(ストリーミングされた動画など)の送受信に使用することができます。
また、2 つのピア間の接続を使用して、RTCDataChannel
インターフェイスを使用して任意のバイナリデータを交換することもできます。これは、バックチャンネル情報、メタデータ交換、ゲームステータスパケット、ファイル転送、あるいはデータ転送のためのプライマリチャンネルとして使用することができます。
より多くの詳細と関連するガイドやチュートリアルへのリンクが必要ですね…。
WebRTC リファレンス
WebRTC は、様々なタスクを達成するために連携して動作する複数のインターフェースを提供しているため、以下のリストのインターフェースをカテゴリ別に分けています。アルファベット順のリストはサイドバーをご覧ください。
接続の設定と管理
以下のインターフェイス、辞書、型は、WebRTC 接続のセットアップ、オープン、管理に使用します。これには、ピアメディア接続、データチャネルおよび、それぞれのピアが双方向メディア接続のために最適な設定を選択する機能に関する情報をやりとりするためのインターフェースが含まれています。
インターフェイス
RTCPeerConnection
- ローカルコンピュータとリモートピア間の WebRTC 接続を表します。これは、2つのピア間のデータの効率的なストリーミングを処理するために使用されます。
RTCDataChannel
- 接続の2つのピア間の双方向データチャネルを表します。
RTCDataChannelEvent
RTCPeerConnection
にRTCDataChannel
をアタッチしている間に発生するイベントを表します。このインタフェースで送信されるイベントは、データチャネル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
RTCPeerConnection
のRTCPeerConnection
の構成オプションを提供するために使用します。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
に対して行われます。このタイプでは、idpassertionerror
とidpvalidationerror
の 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 オーディオコーデックと処理要件
- RTCWeb Data Channels
- RTCWeb Data Channel Protocol
- ウェブリアルタイム通信 (WebRTC): メディアトランスポートとRTPの利用
- WebRTC セキュリティアーキテクチャ
- RTCWEB用トランスポート
関連する補助プロトコル
- Interactive Connectivity Establishment (ICE): A Protocol for Network Address Translator (NAT) Traversal for Offer/Answer Protocol
- Session Traversal Utilities for NAT (STUN)
- URI Scheme for the Session Traversal Utilities for NAT (STUN) Protocol
- Traversal Using Relays around NAT (TURN) Uniform Resource Identifiers
- An Offer/Answer Model with Session Description Protocol (SDP)
- Session Traversal Utilities for NAT (STUN) Extension for Third Party Authorization
WebRTC 統計情報
仕様書
仕様書 | 状態 | 備考 |
---|---|---|
WebRTC 1.0: Real-time Communication Between Browsers | 勧告候補 | WebRTC API の初期定義。 |
Media Capture and Streams | 勧告候補 | メディアコンテンツのストリームを伝達するオブジェクトの初期定義。 |
Media Capture from DOM Elements | 草案 | DOM 要素からコンテンツのストリームを取得する方法の初期定義。 |
これらの API 仕様に加えて、Web RTC は リソース に示されているさまざまなプロトコルを用いる必要があります。