Web Real-Time Communication (略称: WebRTC) は、ウェブブラウザやモバイルアプリケーションにシンプルなAPI経由でリアルタイム通信を提供する自由かつオープンソースのプロジェクトである。

ウェブページ内で直接ピア・ツー・ピア通信を行うことによって、プラグインのインストールやネイティブアプリのダウンロードを行わなくても、ウェブブラウザ間のボイスチャット、ビデオチャット、ファイル共有などを実装できるようになる。WebRTCは、Apple、Google、マイクロソフト、Mozilla、Operaがサポートしている。

WebRTC は 1 つのプロトコル仕様(プロトコルスイート)と 1 つの JavaScript API 仕様からなる。これら仕様は W3C および IETF の複数の規格書に跨って定義されている。

WebRTCの目的は、「ブラウザ、モバイルプラットフォーム、IoTデバイス向けのリッチで高品質なRTPアプリケーションを、開発できるようにし、共通のプロトコルセットで通信できるようにすること」である。リファレンス実装がBSDライセンスの自由ソフトウェアとして公開されている。また、マルチメディアフレームワークのGStreamerをベースに実装されたOpenWebRTCという別のフリー実装も存在する。JavaScriptを発明したブレンダン・アイクは、WebRTCのことを 「妨げなく開かれているウェブへの戦いにおける新たな戦線」であると評している。

## 歴史

ブラウザでリアルタイムなコミュニケーションを可能にするWebRTCは、Googleによってオープンソース化されており、IETFによる関連プロトコルとW3Cによるブラウザ対応APIの標準化が進められてきた。

W3CによるWebRTCのドラフトは、Google ChromeとMozilla Firefoxで特別に実験的に実装が行われる。APIはWHATWGに予備的に記述され、ConnectionPeer APIと呼ばれており、Ericsson Labsが仮の標準概念実装として作成している。ウェブリアルタイムコミュニケーションワーキンググループは、この仕様が以下の項目に基づいて進化することを期待している。

- ウェブブラウザでのリアルタイムなコミュニケーションを可能にするこのドキュメントと一緒に一連のプロトコルを定義するためのIETFにおける仲間のRTCWEBグループでの継続的交流の成果
- ローカルキャパシティとローカルストリームを公開する時に発生するプライバシー問題
- 特殊な環境でデータチャネルの実装に関するグループでの技術的ディスカッション
- 初期の実験を通して得られる経験
- 他のグループや個人からのフィードバックの受け取り

## 概要

### 設計

WebRTCを構成する主要な API を次に挙げる。

- `getUserMedia` カメラやマイクなどのメディア入力の利用をユーザーに許可させる。
- `RTCPeerConnection` ピア同士で直接ビデオ・音声をやりとりするためのクラス。シグナリング、コーデックの処理、P2P通信、セキュリティおよび帯域管理を担う。
- `RTCDataChannel` ピア間の双方向通信で任意のデータを扱うためのクラス。WebSocketsと同じAPIを利用しており、レイテンシーが非常に低い。

WebRTC には統計のためのAPIもある。

- `getStats` はWebRTCセッションの統計をWebアプリケーションが取得可能にする。なお、統計に関する仕様は別のW3Cドキュメントになっている。

WebRTC自体には、シグナリング(ピア同士の検索と接続確立のためのプロセス)のためのAPIは含まれない。代わりに、アプリケーションではInteractive Connectivity Establishment(ICE)を用いる。なお、ICEのプロセスではシグナリングやNATトラバーサルのためにサーバーを介した通信が必要な場合がある。

### サポート

WebRTCは以下のブラウザでサポートされている。

- PC
  - Microsoft Edge 12+
  - Google Chrome 28+
  - Mozilla Firefox 22+
  - Safari 11+
  - Opera 18+
  - Vivaldi 1.9+
  - Brave
- Android
  - Google Chrome 28+(デフォルトで有効なのは 29以降)
  - Mozilla Firefox 24+
  - Opera Mobile 12+
- ChromeOS
- Firefox OS
- BlackBerry 10
- iOS
  - MobileSafari/WebKit(iOS 11+)
- Tizen 3.0

## 仕様

次の 6 つの機能グループ(functionality groups)からなる:

表. 機能グループの一覧

|  | グループ名 | 要件・機能例 |
| --- | --- | --- |
| メディア転送基盤 (media transport infrastructure) | |  |
|  | データ転送 (Data transport) | RFC 8835に準拠 |
|  | データフレーミング (Data framing) | RTP 形式・SRTP 実装が必須 非 RTP 形式に関する対応も必須 データチャネル確立プロトコルはRFC 8832準拠 |
|  | データ形式 (Data formats) | 最小限のコーデック・フォーマットを指定 音声: Opus, PCMA, PCMU, comfort noise |
| メディアサービス (media service) | |  |
|  | 接続管理 (Connection management) |  |
|  | 表示と制御 (Presentation and control) |  |
|  | ローカルシステム補助機能 (Local system support functions) | エコー除去、自動利得制御、録音 認証、認可、OSアクセス制御 |

### Local system support functions

- プライバシー懸念の解消は必須(例: カメラアクセス認可)
- endpoint はRFC 7874の processing functions を必ず実装

### 用語

以下は WebRTC の文脈で専門用語として意味が定義された用語の一例である。

#### リアルタイムメディア

WebRTC におけるリアルタイムメディア (Real-Time Media) はコンテンツの生成と提示が時間的に密接して起きるよう意図されたメディアである(生成-表示遅延が数 100 ミリ秒以内)。

電話やビデオ会議はリアルタイムメディアといえる。WebRTC はリアルタイムメディアの仕様である。

### 規格書

W3C や IETF において WebRTC の規格が策定されている。以下はその一部である:

表. WebRTC 規格

| 規格書名 | | 規格種別 | 発行日 |
| --- | --- | --- | --- |
| WebRTC: Real-Time Communication in Browsers | | W3C Recommendation | 2023-03-06 |
|  | WebRTC 1.0: Real-Time Communication Between Browsers | W3C Recommendation | 2021-01-26 |
| RFC 8835 Transports for WebRTC | | RFC Proposed Standard | 2021-01-18 |
| RFC 8834 Media Transport and Use of RTP in WebRTC | | RFC Proposed Standard | 2021-01-18 |
| RFC 8832 WebRTC Data Channel Establishment Protocol | | RFC Proposed Standard | 2021-01-18 |
| RFC 8831 WebRTC Data Channels | | RFC Proposed Standard | 2021-01-18 |
| RFC 8826 Security Considerations for WebRTC | | RFC Proposed Standard | 2021-01-18 |
| RFC 8825 Overview: Real-Time Protocols for Browser-Based Applications | | RFC Proposed Standard | 2021-01-18 |
| RFC 7874 WebRTC Audio Codec and Processing Requirements | | RFC Proposed Standard | 2016-05-25 |