WebRTC API

この記事は翻訳が完了していません。 この記事の翻訳にご協力ください

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

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

相互運用性

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

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

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

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) と、セッションの SDP 記述子で構成されます。
RTCSessionDescriptionCallback
RTCSessionDescriptionCallback は、オファーやアンサーの作成を要求する際に RTCPeerConnection オブジェクトに渡されます。
RTCStatsReport
接続または接続上の個々のトラックの統計情報の詳細を提供します。WebRTC 統計情報の使用に関する詳細は、RTCPeerConnection.getStats() を参照してください。
RTCIceCandidate
RTCPeerConnection を確立するための ICE(インタラクティブ接続確立) サーバの候補を表します。
RTCIceTransport
ICE トランスポートに関する情報を表します。
RTCIceServer
(STUNTURN サーバのような) 単一の ICE サーバーを定義します。
RTCPeerConnectionIceEvent
ターゲットとの ICE 候補(通常は RTCPeerConnection )に関連して発生するイベントを表します。このタイプのイベントは icecandidate 1つだけです。
RTCRtpSender
RTCPeerConnection 上の MediaStreamTrack のデータのエンコードと送信を管理します。
RTCRtpReceiver
RTCPeerConnection 上の MediaStreamTrack のデータの受信とデコードを管理します。
RTCRtpContributingSource
ソース貢献されているパケットが再生された直近の時刻を含む、特定の貢献ソース (contributing source; CSRC)に関する情報が含まれています。
RTCTrackEvent
RTCRtpReceiver オブジェクトが RTCPeerConnection オブジェクトに追加されたことを示すトラックイベントを表現するために使用されるインターフェースで、新しい着信 (incoming) MediaStreamTrack が生成されたことを示します。
RTCConfiguration
RTCPeerConnection の構成オプションを提供するために使用します。
RTCSctpTransport
Stream Control Transmission Protocol (SCTP) トランスポートを説明する情報を提供し、 RTCPeerConnection のすべてのデータチャネルの SCTP パケットが送受信される Datagram Transport Layer Security (DTLS) トランスポートにアクセスする方法も提供します。
RTCSctpTransportState
RTCSctpTransport インスタンスの状態を示します。

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

WebRTC API には、セキュリティとアイデンティティを管理する多数のインターフェイスがあります。

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

電話通信

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

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

ガイド

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

チュートリアル

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

リソース

プロトコル

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 は リソース に示されているさまざまなプロトコルを用いる必要があります。

関連項目