2026/03/27
R.Suzuki
WebRTC DataChannelで何本のストリームが確立できるのかChromeで実験します。
こんにちは。鈴木です。
リアルタイムコミュニケーション(RTC)仕様の標準化と,キャリア網機能を提供するAPIの標準化を担当し,技術調査・仕様提案を行っています。
本記事では,WebRTC関連実験のひとつとして,Chromeにおいて WebRTC DataChannelで何本のストリームが確立できるのかを調査します。
2026-09-09追記:
ChromeのWebRTC DataChannelのストリーム数上限が緩和されたため,補足記事 をご参照ください。
| 環境 | version |
|---|---|
| Windows 11 | 25H2 (26200.7623) |
| Chrome | 145.0.7632.117 |
本実験では,1つのブラウザタブ内で2つのRTCPeerConnectionを作成し,ローカルでSDP交換を行うことでWebRTCセッションを確立します。確立したセッション上でDataChannelを順次作成し,エラーが発生するまでの本数を計測します。

DataChannelの作成にはRTCPeerConnection.createDataChannel()を使用します。テストではnegotiated: trueを指定し,明示的に引数でストリームIDを指定するモードで実験しました。
// negotiated モードでのDataChannel作成
const dc = pc.createDataChannel("test", { negotiated: true, id: streamId });
また,SCTP層がネゴシエーションした最大チャネル数はRTCSctpTransport.maxChannelsプロパティから取得できます。このプロパティはSCTPトランスポートが"connected"状態になった後に値を返します。
// SCTPトランスポートの情報取得
console.log(pc.sctp.maxChannels); // ネゴシエーション済みの最大チャネル数
console.log(pc.sctp.maxMessageSize); // 最大メッセージサイズ
WebRTC DataChannelは,DTLS上のSCTP (Stream Control Transmission Protocol) を利用して実現されています(RFC 8831)。各DataChannelはSCTPの「ストリーム」に1対1で対応し,SCTPストリームIDがそのままDataChannelのIDとなります(RFC 8832)。SCTPストリームIDは16ビットで表現され,プロトコル仕様上は最大で65535本(IDは0~65534)のDataChannelを確立できることになります。
Chromeでnegotiated: trueモードを使い,ストリームIDを0から順に増やしながらDataChannelを作成した結果を以下に示します。
| 成功した最大ID | 作成できた本数 | maxChannels |
発生したエラー |
|---|---|---|---|
| 1023 | 1024 | 1024 | OperationError |
ストリームID値 0~1023の1024本のDataChannelを作成できました。ID値 1024を指定した時点でOperationErrorが発生します。
またストリームIDを900から順に増やした場合は,ID値 900~1023の124本のDataChannelを作成できました。1本ずつDataChannelの作成・切断を繰り返す場合も,ID値1023までは問題なく作成可能で,IDに1024以上を指定するとエラーとなります。
以上から指定できるストリームIDに上限(1023)があることが確認されました。
ChromiumがバンドルするWebRTCライブラリのlibwebrtcでは,SCTPトランスポートの実装において最大ストリーム数を定義する定数kMaxSctpStreamsが1024と設定されています。
ソースコード上の該当箇所は以下のファイルです。
api/sctp_transport_interface.h — kMaxSctpStreams = 1024 の定義ChromiumのSCTP実装(dcSCTP)のライブラリ自体はデフォルトで65535本のストリームをサポートしていますが,Chromiumはこの値を1024に上書きしています。この値がSCTPのINITチャンクで相手側に通知され,接続確立後にRTCSctpTransport.maxChannelsとして1024が返されます。
従来のSCTP実装(usrsctp)ではストリームごとに管理用のデータ構造を事前に確保する設計であり,64ビット環境ではストリームペアあたり約100バイトのメモリを消費したとされています。65535本分すべて確保すると1接続あたり約6MBとなり,多数のPeerConnectionを扱うアプリケーションでは無視できないコストとなるため,このような制限が設けられているものと想定されます。
本記事では,ChromeにおけるWebRTC DataChannelの作成上限の調査に関してご紹介しました。
| 項目 | 値 |
|---|---|
| 作成可能なDataChannel数 | 1024 |
| 使用可能な最大ストリームID | 1023 |
| 上限超過時のエラー | OperationError |
プロトコル上は16ビットのストリームIDにより65535本程度が上限ですが,Chromiumの実装では1024本に制限されています。DataChannelを多数使用するアプリケーションを設計する際は,この実装上の制限に注意が必要です。
2026-09-09追記:
ChromeのWebRTC DataChannelのストリーム数上限が緩和されたため,補足記事 をご参照ください。
本記事は,NTTネットワークサービスシステム研究所 ネットワーク基盤技術研究プロジェクト ノード処理基盤研究グループの RTC (Real-Time Commmunication) チームが執筆しています。 当チームでは,商用サービス開発とは独立した立場から,将来のRTCサービスを支える基盤技術の創出を目的としたコア研究として,RTC関連技術の研究開発および3GPPやCAMARA等における標準化活動に取り組んでいます。
本記事に関するお問い合わせは,下記アドレスまでご連絡ください。