WebRTC

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

 Local system support functions 
 プライバシー懸念の解消は必須（例: カメラアクセス認可）
 endpoint はの processing functions を必ず実装

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

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

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

 規格書 
W3C や IETF において WebRTC の規格が策定されている。以下はその一部である：
+表. WebRTC 規格規格書名規格種別発行日WebRTC: Real-Time Communication in Browsers W3C Recommendation2023-03-06WebRTC 1.0: Real-Time Communication Between BrowsersW3C Recommendation2021-01-26RFC 8835 Transports for WebRTCRFC Proposed Standard2021-01-18RFC 8834 Media Transport and Use of RTP in WebRTCRFC Proposed Standard2021-01-18RFC 8832 WebRTC Data Channel Establishment ProtocolRFC Proposed Standard2021-01-18RFC 8831 WebRTC Data ChannelsRFC Proposed Standard2021-01-18RFC 8826 Security Considerations for WebRTCRFC Proposed Standard2021-01-18RFC 8825 Overview: Real-Time Protocols for Browser-Based ApplicationsRFC Proposed Standard2021-01-18RFC 7874 WebRTC Audio Codec and Processing RequirementsRFC Proposed Standard2016-05-25