WebRTC 优先级控制 API

W3C 候选推荐标准快照,

此版本:
https://www.w3.org/TR/2021/CR-webrtc-priority-20210318/
最新发布版本:
https://www.w3.org/TR/webrtc-priority/
编辑草案:
https://w3c.github.io/webrtc-priority/
历史版本:
实现报告:
https://wpt.fyi/results/webrtc-priority?label=experimental&label=master&aligned
测试套件:
https://github.com/web-platform-tests/wpt/tree/master/webrtc-priority
问题跟踪:
GitHub
编辑:
(Google)

摘要

此 API 定义了一个控制界面,用于操控传出 WebRTC 数据包的网络 控制位(DSCP 位),以及拥塞情况下传出 WebRTC 数据包的 排队优先级。

本文档状态

本节描述本文档在其发布时的状态。 其他文档可能会取代本文档。当前 W3C 出版物列表以及本技术报告的 最新修订版本可在 W3C 技术报告 索引 https://www.w3.org/TR/ 中找到。

本文档由 Web 实时 通信工作组作为候选推荐标准快照发布。本文档旨在 成为 W3C 推荐标准。 为确保有机会进行广泛审查,本文档将至少在 之前 保持候选推荐标准状态。

如果你希望就本文档发表评论,请提交 issue 或将意见发送至 public-webrtc@w3.org订阅归档)。 发送电子邮件时, 请在主题中包含文本“webrtc-priority”, 最好采用如下格式: “[webrtc-priority] ……评论摘要……”。 欢迎所有评论。

作为候选推荐标准发布并不意味着得到 W3C 会员的认可。候选 推荐标准快照已经过广泛审查,并旨在 收集实现经验。

本文档进入提议推荐标准阶段的准入条件 是本规范所有特性至少有两个独立且可互操作的实现,这将通过 通过工作组开发的测试套件中定义的测试来判定。 工作组将准备一份实现报告以跟踪进展。

本文档由一个依照 W3C 专利政策运作的小组制作。 W3C 维护一份与该小组交付成果相关的任何专利披露的 公开列表; 该页面还包含披露专利的说明。 实际知晓某项专利且认为该专利包含必要权利要求的个人,必须按照 W3C 专利 政策第 6 节披露 相关信息。

本文档受 2020 年 9 月 15 日 W3C 流程文档管辖。

1. 引言

本文档将 “priority” 字段定义为 WEBRTC RTCRtpEncodingParameters 结构的一部分,其可能的值为 "very-low"、 "low"、"medium" 和 "high"。

此特性最初是 [WEBRTC] 规范的一部分,但由于缺乏实现 经验,于 2019 年 11 月被 移除。它现在是本文档的一部分。

此外,本规范向 RTCRtpEncodingParameters 添加了字段,允许控制 DSCP 标记,而不影响本地 优先级划分,反之亦然。

2. 优先级与 QoS 模型

许多应用具有多个相同数据类型的媒体流,而且 其中一些流通常比其他流更重要。WebRTC 使用 [rfc8835][rfc8837] 中描述的优先级和服务质量(QoS)框架, 为数据包提供优先级和 DSCP 标记,这有助于在某些网络 环境中提供 QoS。优先级设置可用于指示 各种流的相对优先级。优先级 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 相同的效果, 但它只影响所生成数据包的 DSCP 标记, 如 [rfc8835] 第 4.2 节所述。

如果未设置 networkPriority, 则所生成数据包的 DSCP 标记由 priority 成员控制。

4. RTCDataChannel 扩展

partial interface RTCDataChannel {
  readonly attribute RTCPriorityType priority;
};

partial dictionary RTCDataChannelInit {
  RTCPriorityType priority = "low";
};

4.1. 新的 RTCDataChannel 属性

priority, 类型为 RTCPriorityType,只读

priority 属性返回 此 RTCDataChannel 的优先级。 该优先级由用户代理在通道创建时 分配。在获取时,该属性必须返回 [[DataChannelPriority]] 槽的值。

4.2. 新的 RTCDataChannelInit 成员

priority, 类型为 RTCPriorityType,默认为 "low"

此通道的优先级。

4.3. RTCDataChannel 处理步骤

以下步骤被添加到 DataChannel 的初始化步骤中:

令 DataChannel 具有一个内部槽 [[DataChannelPriority]]

在初始化 DataChannel 的处理步骤中,将以下 步骤插入到处理 option 参数的过程中:

configuration 优先级值 RTCPriorityType
0 至 128 very-low
129 至 256 low
257 至 512 medium
513 及以上 high

5. 安全与隐私考量

此 API 扩展本身不会暴露任何新信息,并且通过 此扩展处理的任何数据都不能被视为敏感信息或个人可识别信息。

结合监视网络流量的能力,可以使用此 扩展来弄清楚实现实际上遵循了规范的哪些部分; 特别是设置优先级是否会导致所生成数据包上的 DSCP 标记 被修改。

本规范允许对网络头部中通常用于网络流量 优先级划分的部分(DSCP 标记)进行一定控制。如果 UA 所连接的网络 配置错误或供给不足,这可能会通过发出带有 配置未预期的 DSCP 标记的数据包来影响本地网络环境。

针对这一风险的对策包括正确配置;最简单的配置是 DSCP 清洗——始终将 DSCP 标记归零或忽略它们。拥塞控制(对 WebRTC 始终是强制性的)将在大多数情况下防止网络过载。

一致性

文档 约定

一致性要求通过描述性断言 与 RFC 2119 术语的组合来表达。 本文档规范性部分中的关键词 “MUST”、“MUST NOT”、“REQUIRED”、“SHALL”、“SHALL NOT”、“SHOULD”、“SHOULD NOT”、“RECOMMENDED”、 “MAY” 和 “OPTIONAL” 应按 RFC 2119 中的描述进行解释。 然而,为了可读性, 这些词在本规范中并不会全部以大写字母出现。

本规范的所有文本均为规范性内容, 但明确标记为非规范性的章节、示例和注释除外。 [RFC2119]

本规范中的示例以 “for example” 一词引入, 或使用 class="example" 与规范性文本分隔开, 如下所示:

这是一个资料性示例的例子。

资料性注释以 “Note” 一词开头, 并使用 class="note" 与规范性文本分隔开, 如下所示:

Note,这是一个资料性注释。

一致性 算法

作为算法一部分以祈使语气表述的要求 (例如 "strip any leading space characters" 或 "return false and abort these steps") 应按引入该算法时使用的关键词 ("must"、"should"、"may" 等) 的含义进行解释。

索引

由本 规范定义的术语

由 引用定义的术语

引用

规范性引用

[RFC2119]
S. Bradner. 用于 RFC 中表示要求 级别的关键词. 1997 年 3 月. 最佳当前实践. URL: https://tools.ietf.org/html/rfc2119
[RFC8831]
R. Jesup; S. Loreto; M. Tüxen. WebRTC 数据 通道. 2021 年 1 月. 提议标准. URL: https://datatracker.ietf.org/doc/html/rfc8831
[RFC8835]
H. Alvestrand. WebRTC 的传输. 2021 年 1 月. 提议标准. URL: https://datatracker.ietf.org/doc/html/rfc8835
[RFC8837]
P. Jones; et al. 用于 WebRTC QoS 的差分服务代码点 (DSCP)数据包标记. 2021 年 1 月. 提议标准. URL: https://datatracker.ietf.org/doc/html/rfc8837
[WEBRTC]
Cullen Jennings; Henrik Boström; Jan-Ivar Bruaroey. WebRTC 1.0: 浏览器之间的实时通信. 2021 年 1 月 26 日. REC. URL: https://www.w3.org/TR/webrtc/

IDL 索引

enum RTCPriorityType {
  "very-low",
  "low",
  "medium",
  "high"
};

partial dictionary RTCRtpEncodingParameters {
  RTCPriorityType priority = "low";
  RTCPriorityType networkPriority;
};

partial interface RTCDataChannel {
  readonly attribute RTCPriorityType priority;
};

partial dictionary RTCDataChannelInit {
  RTCPriorityType priority = "low";
};