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 参数的过程中:
-
将 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 清洗——始终将 DSCP 标记归零或忽略它们。拥塞控制(对 WebRTC 始终是强制性的)将在大多数情况下防止网络过载。