1. 導入
この文書は、WEBRTC の RTCRtpEncodingParameters
構造体の一部として、取り得る値が "very-low"、
"low"、"medium"、"high" である "priority" フィールドを定義します。
この機能はもともと [WEBRTC] 仕様の一部でしたが、 実装経験が不足していたため 2019 年 11 月に 削除されました。現在はこの文書の一部です。
さらに、この仕様は RTCRtpEncodingParameters
にフィールドを追加し、ローカルの優先順位付けに影響を与えずに
DSCP マーキングを制御できるようにします。またその逆も可能にします。
2. 優先度と QoS モデル
多くのアプリケーションは同じデータ型の複数のメディアフローを持ち、
しばしば一部のフローは他より重要です。WebRTC は、[rfc8835] および [rfc8837]
で説明される優先度および Quality of Service(QoS)フレームワークを使用して、
一部のネットワーク環境で QoS の提供に役立つパケットの優先度と
DSCP マーキングを提供します。優先度設定は、さまざまなフローの相対的な
優先度を示すために使用できます。優先度 API により、JavaScript
アプリケーションは、priority プロパティを設定して、
特定のメディアフローがアプリケーションにとって high、
medium、low、または very low の重要度であるかをブラウザーに伝えられます。
RTCRtpEncodingParameters
オブジェクトの値を、以下で定義される値のいずれかに設定します。
3. メディア優先度の拡張
3.1. RTCPriorityType 列挙型
enum {RTCPriorityType "very-low" ,"low" ,"medium" ,"high" };
| 列挙の説明 | |
|---|---|
very-low
| [rfc8835] の第 4.1 節および第 4.2 節を参照。 [rfc8831] で定義される "below normal" に対応します。 |
low
| [rfc8835] の第 4.1 節および第 4.2 節を参照。 [rfc8831] で定義される "normal" に対応します。 |
medium
| [rfc8835] の第 4.1 節および第 4.2 節を参照。 [rfc8831] で定義される "high" に対応します。 |
high
| [rfc8835] の第 4.1 節および第 4.2 節を参照。 [rfc8831] で定義される "extra high" に対応します。 |
この API を使用するアプリケーションは、重要なものの優先度を上げるよりも、 それほど重要でないものの優先度を下げる方が、多くの場合、 全体的なユーザー体験をより良くできることに注意する必要があります。
3.2. RTCRtpEncodingParameters への拡張
partial dictionary RTCRtpEncodingParameters {RTCPriorityType priority = "low";RTCPriorityType networkPriority ; };
priority, 型は RTCPriorityType、既定値は"low"-
RTCRtpSenderの優先度を示し、RTCRtpSenderオブジェクト間の帯域幅割り当てに影響します。これは [rfc8835] 第 4 節で指定されています。 ユーザーエージェントは、RTCRtpSenderのエンコーディング間で帯域幅を自由に細分配分できます。 -
networkPriority, 型は RTCPriorityType -
これは
priorityと同じ効果を持ちますが、[rfc8835] 第 4.2 節で説明されるように、生成されるパケットの DSCP マーキングにのみ影響します。networkPriorityが未設定の場合、生成されるパケットの DSCP マーキングはpriorityメンバーによって制御されます。
4. RTCDataChannel の拡張
partial interface RTCDataChannel {readonly attribute RTCPriorityType priority ; };partial dictionary RTCDataChannelInit {RTCPriorityType priority = "low"; };
4.1. 新しい RTCDataChannel 属性
priority, 型は RTCPriorityType、readonly-
priority属性は、 このRTCDataChannelの優先度を返します。 優先度は、チャンネル作成時にユーザーエージェントによって割り当てられます。 取得時、この属性は [[DataChannelPriority]] スロットの値を返さなければなりません。
4.2. 新しい RTCDataChannelInit メンバー
priority, 型は RTCPriorityType、既定値は"low"-
このチャンネルの優先度。
4.3. RTCDataChannel 処理手順
次の手順が DataChannel の初期化手順に追加されます:
DataChannel が内部スロット [[DataChannelPriority]] を持つものとします。
DataChannel を初期化する処理手順において、option 引数の処理に次の 手順を挿入します:
-
channel.[[DataChannelPriority]] を option の
priorityメンバーに初期化します。 -
受信 DataChannel については、次の対応表に従って、configuration 内の 整数の優先度値に基づき、channel.[[DataChannelPriority]] を初期化します。
| configuration の優先度値 | RTCPriorityType
値
|
|---|---|
| 0 から 128 | very-low
|
| 129 から 256 | low
|
| 257 から 512 | medium
|
| 513 以上 | high
|
5. セキュリティとプライバシーに関する考慮事項
この API 拡張は、それ自体として新しい情報を公開するものではなく、この拡張を通じて 扱われるデータはいずれも機微な情報または個人を識別可能な情報とは見なされません。
ネットワークトラフィックを監視する能力と組み合わせると、この拡張を使用して、 仕様のどの部分が実装によって実際に尊重されているかを把握できる可能性があります。 特に、優先度を設定することで、生成されるパケットの DSCP マーキングが 変更されるかどうかを把握できます。
この仕様は、ネットワークトラフィックの優先順位付けに一般的に使用される ネットワークヘッダーの一部(DSCP マーキング)をある程度制御できるようにします。 UA が接続されているネットワークが誤って設定されているか、容量不足である場合、 設定が想定しない DSCP マーキング付きのパケットを送出することにより、 ローカルネットワーク環境に影響を与える可能性があります。
このリスクに対する対策には、適切な設定が含まれます。最も単純な設定は DSCP bleaching、つまり DSCP マーキングを常にゼロにする、または無視することです。 輻輳制御(WebRTC では常に必須)は、多くの場合ネットワーク過負荷を防ぎます。