--- title: WebRTC API slug: Web/API/WebRTC_API tags: - API - Audio - Conferencing - Landing - Media - Networking - Video - WebRTC - WebRTC API - streaming - ストリーミング - ネットワーク translation_of: Web/API/WebRTC_API ---
{{WebRTCSidebar}}

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

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

相互運用性

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

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

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

WebRTC の概念と使い方

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

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

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

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

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

WebRTC リファレンス

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

接続の設定と管理

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

インターフェイス

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

辞書

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

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

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

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

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

電話通信

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

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

ガイド

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

チュートリアル

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

リソース

プロトコル

WebRTC-proper プロトコル

WebRTC 統計情報

仕様書

仕様書 状態 備考
{{SpecName('WebRTC 1.0')}} {{Spec2('WebRTC 1.0')}} WebRTC API の初期定義。
{{SpecName('Media Capture')}} {{Spec2('Media Capture')}} メディアコンテンツのストリームを伝達するオブジェクトの初期定義。
{{SpecName('Media Capture DOM Elements')}} {{Spec2('Media Capture DOM Elements')}} DOM 要素からコンテンツのストリームを取得する方法の初期定義。

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

関連項目