WebRTC API
WebRTC (Web Real-Time Communication、ウェブリアルタイムコミュニケーション) は、ウェブアプリケーションやウェブサイトにて、仲介を必要とせずにブラウザー間で直接、任意のデータの交換や、キャプチャした音声/映像ストリームの送受信を可能にする技術です。 WebRTC に関する一連の標準規格は、ユーザーがプラグインやサードパーティ製ソフトウェアをインストールすることなく、ピアーツーピアーにて、データ共有や遠隔会議を実現することを可能にします。
WebRTC は、相互に関連したいくつかの API とプロトコルで構成されており、これらが連携してこれを実現しています。ここで紹介するドキュメントでは、WebRTC の基礎知識、データ接続とメディア接続、両方の設定方法と、使用方法などを理解するのに役立ちます。
WebRTC の概念と使い方
WebRTC は複数の目的に対応しています。メディアキャプチャとストリーム API と一緒に使用することで、音声・ビデオ会議、ファイル交換、画面共有、ID 管理、DTMF (タッチトーンダイヤル信号) の送信サポートを含む旧来の電話システムとのインターフェイスなど、強力なマルチメディア機能をウェブに提供します。ピアー間の接続は、特別なドライバーやプラグインを必要とせずに行うことができ、多くの場合、中間サーバーを介さずに行うことができます。
2 つのピアー間の接続は RTCPeerConnection
インターフェイスで表現されます。接続が確立され、RTCPeerConnection
を使用して開かれると、メディアストリーム (MediaStream
) やデータチャンネル (RTCDataChannel
) を接続に追加することができます。
メディアストリームは、メディア情報の任意の数のトラックで構成することができます。トラックは、MediaStreamTrack
インターフェイスに基づいたオブジェクトで表され、音声、映像、テキスト(字幕やチャプター名など)を含むメディアデータのいくつかの型のうちの 1 つを含むことができます。ほとんどのストリームは少なくとも 1 つの音声トラックと映像トラックで構成されており、ライブメディアや保存されたメディア情報(ストリーミングされた動画など)の送受信に使用することができます。
また、2 つのピアー間の接続を使用して、RTCDataChannel
インターフェイスを使用して任意のバイナリーデータを交換することもできます。これは、バックチャンネル情報、メタデータ交換、ゲームステータスパケット、ファイル転送、あるいはデータ転送のためのプライマリーチャンネルとして使用することができます。
相互運用性
WebRTC は現行のブラウザーでは概ね対応していますが、一部非互換性も残っています。 adapter.js ライブラリーは、これらの非互換性からアプリを保護するための補助的なものです。
WebRTC リファレンス
WebRTC は、様々なタスクを達成するために連携して動作する複数のインターフェイスを提供しているため、以下のリストのインターフェイスをカテゴリー別に分けています。アルファベット順のリストはサイドバーをご覧ください。
接続の設定と管理
以下のインターフェイス、辞書、型は、WebRTC 接続のセットアップ、オープン、管理に使用します。これには、ピアーメディア接続、データチャネルおよび、それぞれのピアーが双方向メディア接続のために最適な設定を選択する機能に関する情報をやりとりするためのインターフェイスが含まれています。
インターフェイス
RTCPeerConnection
-
ローカルコンピュータとリモートピアー間の WebRTC 接続を表します。これは、 2 つのピアー間のデータの効率的なストリーミングを処理するために使用されます。
RTCDataChannel
-
接続の 2 つのピアー間の双方向データチャネルを表します。
RTCDataChannelEvent
-
RTCDataChannel
をRTCPeerConnection
に装着している間に発生するイベントを表します。このインターフェイスで送信されるイベントは、データチャネルdatachannel
のみです。 RTCSessionDescription
-
セッションの引数を表します。各
RTCSessionDescription
は、オファー/アンサーネゴシエーションプロセスの、どの部分を記述するかを示す記述型 (type
) と、セッションの SDP 記述子で構成されます。 RTCStatsReport
-
接続または接続上の個々のトラックの統計情報の詳細を提供します。
RTCPeerConnection.getStats()
を呼び出すと報告を取得できます。 RTCIceCandidate
-
RTCPeerConnection
を確立するための ICE(インタラクティブ接続確立) サーバーの候補を表します。 RTCIceTransport
-
ICE トランスポートに関する情報を表します。
RTCPeerConnectionIceEvent
-
ターゲットとの ICE 候補 (通常は
RTCPeerConnection
) に関連して発生するイベントを表します。この型のイベントはicecandidate
1 つだけです。 RTCRtpSender
-
RTCPeerConnection
上のMediaStreamTrack
のデータのエンコードと送信を管理します。 RTCRtpReceiver
-
RTCPeerConnection
上のMediaStreamTrack
のデータの受信とデコードを管理します。 RTCTrackEvent
-
このインターフェイスは
track
イベントを表すもので、RTCRtpReceiver
オブジェクトがRTCPeerConnection
オブジェクトに追加されたことを示すトラックイベントを表現するために使用されるインターフェイスで、新しい着信 (incoming)MediaStreamTrack
が生成され、RTCPeerConnection
に追加されたことを示します。 RTCSctpTransport
-
Stream Control Transmission Protocol (SCTP) トランスポートを説明する情報を提供し、
RTCPeerConnection
のすべてのRTCPeerConnection
のデータチャネルの SCTP パケットが送受信される Datagram Transport Layer Security (DTLS) トランスポートにアクセスする方法も提供します。
イベント
bufferedamountlow
-
データチャネルの
bufferedAmount
プロパティで示される、現在バッファリングされているデータ量が、bufferedAmountLowThreshold
で指定されたチャンネルの最小バッファリングデータサイズ以下に減少したときに発行されます。 close
-
データチャネルを閉じる処理が完了し、現在
closed
の状態です。この点で、基礎となるデータトランスポートは完全に閉じられています。closing
イベントを監視することで、閉じる処理が完了する前に通知を受けることができます。 closing
-
RTCDataChannel
がclosing
状態に遷移し、まもなく閉じられることが示された。close
イベントを監視することで、閉じる処理の完了を検出することができます。 connectionstatechange
-
connectionState
でアクセスできる接続の状態が変更された。 datachannel
-
リモートピアーが新しいデータチャネルを開いた後、新しい
RTCDataChannel
が利用可能です。このイベント型はRTCDataChannel
です。 error
-
RTCErrorEvent
で、データチャネルでエラーが発生したことを示します。 error
-
RTCErrorEvent
で、RTCDtlsTransport
においてエラーが発生したことを示します。このエラーはdtls-failure
またはfingerprint-failure
のどちらかになります。 gatheringstatechange
-
RTCIceTransport
の収集状態が変更されました。 icecandidate
-
RTCPeerConnectionIceEvent
は、ローカルデバイスがローカルピアーに追加する必要がある新しい ICE 候補を特定したときに、setLocalDescription()
を呼び出して送信されるものです。 icecandidateerror
-
ICE 候補の収集中にエラーが発生したことを示す
RTCPeerConnectionIceErrorEvent
。 iceconnectionstatechange
-
ICE 接続の状態(
iceconnectionstate
プロパティで得られる)が変化したときにRTCPeerConnection
に送られます。 icegatheringstatechange
-
ICEの収集状態(
icegatheringstate
プロパティで得られる)が変化したときにRTCPeerConnection
に送られます。 message
-
データチャネルでメッセージを受信した。このイベントの型は
MessageEvent
です。 negotiationneeded
-
domxref("RTCPeerConnection.createOffer", "createOffer()")}} に続いて
setLocalDescription()
を呼び出し、RTCPeerConnection
にセッション交渉を行う必要があることを通知します。 open
-
RTCDataChannel
の基礎となるデータトランスポートが正常にオープンまたは再オープンされました。 selectedcandidatepairchange
-
イベントが発行された
RTCIceTransport
において、現在選択されている ICE 候補のペアが変更されました。 track
-
track
イベントはRTCTrackevent
の型で、メディアのストリーミングの交渉が成功した後に新しいトラックが接続に追加されるとRTCPeerConnection
に送信されます。 signalingstatechange
-
ピアー接続の
signalingstate
が変更されたときに送信されます。これはsetLocalDescription()
またはsetRemoteDescription()
のいずれかが呼び出された結果発生するものです。 statechange
-
RTCDtlsTransport
の状態が変化した。 statechange
-
RTCIceTransport
の状態が変化した。 statechange
-
RTCSctpTransport
の状態が変化した。 rtctransform
-
エンコードされた動画や音声のフレームは、ワーカーで変換ストリームを使用して処理する準備ができています。
型
RTCSctpTransport.state
-
RTCSctpTransport
インスタンスの状態を示します。
アイデンティティとセキュリティ
これらの API は、セキュリティとアイデンティティを管理し、ユーザーの接続を認証するために使われます。
RTCIdentityProvider
-
ユーザーエージェントが ID アサーションの生成または検証を要求できるようにします。
RTCIdentityAssertion
-
現在の接続のリモートピアーの ID を表します。まだピアーが設定されておらず、検証されていない場合、このインターフェイスは
null
を返します。一度設定すると変更することはできません。 RTCIdentityProviderRegistrar
-
ID プロバイダー (idP) を登録します。
RTCCertificate
-
RTCPeerConnection
が認証に使用する証明書を表します。
電話回線
これらのインターフェイスとイベントは、公衆交換電話網 (PSTN) との相互作用に関連するものです。これらは主に、トーンダイヤルの音、またはその音を表すパケットをネットワーク経由でリモートピアーに送信するために使用されます。
インターフェイス
RTCDTMFSender
-
RTCPeerConnection
のデュアルトーン多周波 (DTMF) シグナリングのエンコーディングと送信を管理します。 RTCDTMFToneChangeEvent
-
DTMF トーンの開始または終了を示すために
tonechange
イベントで使用されます。このイベントは(特に明記されている場合を除き)バブリングせず、(特に明記されている場合を除き)キャンセルもできません。
イベント
tonechange
-
新しい DTMF トーンが接続上で再生され始めたか、
RTCDTMFSender
のtoneBuffer
にある最後のトーンが送信されてバッファが空になったか、どちらかです。このイベントの型はRTCDTMFToneChangeEvent
です。
エンコードされた変換
これらのインターフェイスとイベントは、ワーカーで実行する変換ストリームを使用して、入出力されるエンコード方式の動画と音声フレームを処理するために使用します。
インターフェイス
RTCRtpScriptTransform
-
ワーカーで実行する変換ストリームを RTC パイプラインに挿入するインターフェイスです。
RTCRtpScriptTransformer
-
メインスレッドからオプションを渡す
RTCRtpScriptTransform
に対応するワーカーサイドのもので、TransformStream
を通してエンコードされたフレームをパイプするために使用することができる読み取り可能なストリームと書き込み可能なストリームも一緒に渡します。 RTCEncodedVideoFrame
-
RTC パイプラインで変換されるエンコードされた動画フレームを表します。
RTCEncodedAudioFrame
-
RTC パイプラインで変換されるエンコードされた音声フレームを表します。
プロパティ
RTCRtpReceiver.transform
-
エンコードされた映像および音声フレームが受信パイプラインに変換ストリームを挿入するために使用するプロパティです。
RTCRtpSender.transform
-
エンコードされた映像および音声フレームの送信パイプラインに変換ストリームを挿入するために使用するプロパティです。
イベント
rtctransform
-
RTC 変換がワーカーで実行する準備ができているか、エンコードされた動画や音声フレームを処理する準備ができています。
ガイド
- WebRTC プロトコル入門
-
この記事では、WebRTC API の基礎となっているプロトコルについて説明しています。
- WebRTC 接続
-
WebRTC 接続がどのように動くかを説明するガイド。どのように様々なプロトコルとインターフェイスが協調して用いられることで強力なコミュニケーションアプリを構築することができるかについて説明しています。
- WebRTC セッションのライフタイム
-
WebRTCは任意のデータ、音声、映像またはそれらの組み合わせをやりとりするピアーツーピアー通信をブラウザーアプリケーション上に構築することができます。この記事では、接続の確立から不要となり閉じられるまでの WebRTC のライフタイムについて見ていきます。
- 接続の確立: 完全なネゴシエーションパターン
-
完全なネゴシエーションはシグナリングプロセスが従うべき推奨されるデザインパターンです。二者を区別するためにたくさんのコーディングを必要とせずに、双方をオファー側とアンサー側のどちらにもなれることを可能にするネゴシエーションにおける透過性を提供します。
- シグナリングと双方向映像通話
-
以前の例で作成したウェブソケットベースのチャットシステムに参加者同士の映像通話機能を追加するチュートリアルと例。チャットサーバーのウェブソケット接続は WebRTC のシグナリングとして用いられます。
- WebRTC で用いられるコーデック
-
WebRTC を用いる上でブラウザーが対応すべきコーデックと様々な有名なブラウザーで対応されている追加的なコーデックについてのガイド。必要に応じたベストなコーデックの選び方についてのガイドも含みます。
- WebRTC データチャネルを使う
-
このガイドでは、ピアー接続と関連する
RTCDataChannel
を使用して、2 つのピアー間で任意のデータを交換する方法について説明します。 - WebRTC での DTMF の使用
-
RTCDTMFSender
インターフェイスを用いた DTMF トーン送信サポートを含む、旧式の電話システムとのゲートウェイとやりとりを行うための WebRTC 対応について、このガイドでは、その方法を説明します。 - WebRTC エンコード変換
-
このガイドでは、ワーカーで実行する
TransformStream
を使用して、ウェブアプリケーションが入出力する WebRTCのエンコードされた映像および音声フレームを変更する方法を示します。
チュートリアル
- WebRTC adapter.js を使用した互換性の向上
-
WebRTC 組織は、異なるブラウザーの WebRTC 実装における互換性の問題を回避するため adapter.js を提供しています。このアダプターは JavaScript のはシム (Shim) で、あなたのコードを仕様に合わせて記述することで、WebRTC に対応しているすべてのブラウザーで「ただ動く (just work) 」ようにしてくれます。
- シンプルな RTCDataChannel のサンプル
-
RTCDataChannel
インターフェイスは、2つのピアー間で任意のデータを送受信するためのチャネルを開くことができる機能です。このAPIは意図的に WebSocket API に似せているので、それぞれに同じプログラミングモデルを使用することができます。 - Peer.js によるインターネット接続電話の構築
-
このチュートリアルは、 Peer.js を使用して電話を構築する方法を段階を追ってガイドします。
仕様書
Specification |
---|
WebRTC: Real-Time Communication in Browsers |
Media Capture and Streams |
Media Capture from DOM Elements |
WebRTC-proper プロトコル
関連する補助プロトコル
- 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
関連情報
MediaDevices
MediaStreamEvent
MediaStreamTrack
MessageEvent
MediaStream
- メディアキャプチャとストリーム API
- Firefox multistream and renegotiation for Jitsi Videobridge
- Peering Through the WebRTC Fog with SocketPeer
- Inside the Party Bus: Building a Web App with Multiple Live Video Streams + Interactive Graphics
- ウェブメディア技術