WebRTC 的可伸缩视频编码(SVC)扩展

W3C 工作草案

有关本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/WD-webrtc-svc-20260914/
最新发布版本:
https://www.w3.org/TR/webrtc-svc/
最新编辑草案:
https://w3c.github.io/webrtc-svc/
历史:
https://www.w3.org/standards/history/webrtc-svc/
提交历史
编辑:
Henrik Boström (Google)
前任编辑:
Peter Thatcher (Microsoft Corporation) - 任职至
Bernard Aboba (Microsoft Corporation)
反馈:
GitHub w3c/webrtc-svc (拉取请求新建议题开放议题)
public-webrtc@w3.org 主题行使用 [webrtc-svc] … 消息主题 … (存档)
参与
邮件列表
IETF AVTCORE 工作组

摘要

本文档定义了一组以 WebIDL 编写的 ECMAScript API,用于扩展 WebRTC 规范,以支持可伸缩视频编码(SVC)编码参数的配置。SVC 编码器和解码器能力的发现 由 Media Capabilities 规范处理。

本文档状态

本节描述本文档 发布时的状态。当前 W3C 出版物列表以及本技术报告的最新修订版可在 W3C 标准和草案 索引中找到。

此 API 基于 W3C ORTC 社区组所完成的初步工作。

本文档由 Web 实时 通信工作组使用 推荐标准 流程作为工作草案发布。

作为 工作草案发布并不意味着 获得 W3C 及其成员的认可。

这是一份草案文档,可能随时被其他 文档更新、取代或废弃。除将其视为 进行中的工作外,不宜引用本文档。

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

本文档受 2025 年 8 月 18 日 W3C 流程文档管辖。

1. 简介

本节为非规范性内容。

本规范扩展了 WebRTC 规范 [WEBRTC],以 支持配置可伸缩视频 编码(SVC)的编码参数。SVC 编码器和解码器能力的发现 由媒体能力 API [Media-Capabilities] 处理。

本规范不会改变 WebRTC 对象和 方法的行为。因此,与提议/应答协商和 编码参数相关的限制仍然有效,如 [WEBRTC] 第 5.2 节所述: “setParameters() 不会导致 SDP 重新协商,并且 只能用于在提议/应答所协商的范围内更改媒体栈正在发送或接收的内容。”

因此,本规范可以为 不在提议/应答中协商 SVC 支持的编解码器配置编码参数,例如 VP8 [RFC6386]、VP9 [VP9] 和 AV1 [AV1] 编解码器。 H.264 [ITU-T-REC-H.264] 和 H.265 [ITU-T-REC-H.265] 编解码器也可以支持时间可伸缩性配置。

2. 一致性

除标记为非规范性的章节外,本规范中的所有编写指南、图示、示例和注释 均为非规范性内容。本规范中的其他所有内容均为规范性内容。

本文档中的关键字 可以必须应该 应按照 BCP 14 [RFC2119] [RFC8174] 中所述进行解释,但仅当它们像这里所示那样全部 使用大写形式出现时才如此。

本规范定义了适用于单一 产品的一致性标准:实现本规范所包含接口的用户代理。

以算法或特定步骤表述的一致性要求可以 采用任何方式实现,只要最终结果等效即可。特别是, 本规范定义的算法旨在 易于理解,而不是为了获得高性能。

使用 ECMAScript 实现本规范中所定义 API 的实现 必须以与 Web IDL 规范 [WEBIDL] 中定义的 ECMAScript 绑定一致的方式实现它们,因为 本规范使用了该规范及其术语。

3. 术语

“联播包络”一词在 [WEBRTC] 第 5.4.1 节中定义。

本规范引用了 [WEBRTC] 中定义的对象、方法、内部槽 和字典。

对于可伸缩视频编码(SVC),“单会话传输” (SST)和“多会话 传输”(MST)这两个术语 定义于 [RFC6190]。本规范仅 支持 SST,而 不支持 MST

“单实时传输协议流单传输” (SRST)一词定义于 [RFC7656] 第 3.7 节,指在单一传输中传输所有层的 SVC 实现, 使用单一实时传输协议(RTP)流和 同步源(SSRC)。“多 RTP 流单 传输”(MRST)一词同样 定义于 [RFC7656] 第 3.7 节, 指在单一 传输中传输所有层的实现,它使用多个 RTP 流,并为每一层使用不同的 SSRC。 本规范仅支持 SRST,不支持 MRST。其 RTP 载荷规范 支持 SRST 的编解码器包括 VP8 [RFC7741]、VP9 [VP9-PAYLOAD]、AV1 [AV1-RTP-SPEC]、H.264 [RFC6184] 和 H.265 [RFC7798]。

“S 模式”一词指在同一个 SSRC 上发送多个 编码的可伸缩性模式。这包括 "S2T1""S2T1h""S2T2""S2T2h""S2T3""S2T3h""S3T1""S3T1h""S3T2""S3T2h""S3T3""S3T3h" scalabilityMode 值。

术语 选择性转发中间盒 (SFM)定义于 [RFC7667] 第 3.7 节。

4. 配置

本规范通过扩展 RTCRtpEncodingParameters 字典,使得能够配置 SVC 的编码参数。

4.1 RTCRtpEncodingParameters 字典扩展

WebIDLpartial dictionary RTCRtpEncodingParameters {
             DOMString scalabilityMode;
};

字典 RTCRtpEncodingParameters 成员

scalabilityMode,类型为 DOMString

仅当发送方的 kind"video" 时,此成员才可以存在。 当其存在时,表示要用于此流的 区分大小写的 可伸缩性模式标识符。可伸缩性模式定义于 第 5 节。

4.2 行为

[WEBRTC] 描述了 addTransceiver() (第 5.1 节)和 setParameters() (第 5.2 节)中的错误处理, 包括使用 RTCError 来表示由于 不受支持的编码参数而导致的 “hardware-encoder-error”, 以及其他错误。 当向 setParameters()addTransceiver() 提供无效的 scalabilityMode 值时, 实现会按照规定方式使用 RTCError 和其他错误。

4.2.1 addTransceiver()

[WEBRTC] 第 5.1 节描述了 addTransceiver() 中对 sendEncodings 的验证。 为了验证 scalabilityMode, 请在 addTransceiver sendEncodings 验证步骤的第 3 步之后添加 以下步骤:

  1. 如果 sendEncodings 包含任何这样的编码:其 codeccodec 存在,并且同一编码的 scalabilityMode 值不受 codec 支持,则抛出一个 OperationError
  2. 否则,如果 sendEncodings 包含任何这样的编码:其 scalabilityMode 值不受 kind已实现发送编解码器 列表中的任何编解码器支持,则抛出一个 OperationError
  3. 如果存储在 sendEncodings 中的 RTCRtpEncodingParameters 包含多个 active 成员值为 true 的编码,并且 sendEncodings 包含任何这样的编码:其 scalabilityMode 值表示“S 模式”,且其 active 成员的 值为 true,则抛出一个 OperationError

addTransceiver()setCodecPreferences() 方法在提议/应答协商完成之前被调用时, 协商出的 编解码器及其能力可能尚未知晓。在这种情况下, sendEncodings 中配置的 scalabilityMode 值可能不受最终协商出的编解码器支持。 但是,只有当请求的 scalabilityMode 值对任何受支持的编解码器都无效,或者请求了混合联播传输时, 才会产生错误。

为了确保所需的 scalabilityMode 值能够应用,可以使用 setCodecPreferences() 来优先选择或仅包含支持所需配置的编解码器。 例如,如果希望将时间可伸缩性与空间联播结合使用, 则在调用 addTransceiver() 时, 可以配置 sendEncodings 以发送多个具有不同分辨率的 联播流,并让每个流 使用时间可伸缩性。如果只有 VP8、VP9 和 AV1 编解码器实现 支持时间可伸缩性,则可以使用 setCodecPreferences() 从提议中移除 H.264/AVC 编解码器,从而提高 协商出支持时间可伸缩性的编解码器的可能性。

当使用 sendEncodings 通过 addTransceiver() 请求发送多个联播流时, 不能请求“S 模式”。 浏览器只能配置为使用多个 SSRC 和 RID 发送 联播编码,或者 将所有联播编码发送到单一 RTP 流上。不允许同时使用这两种联播传输 技术。

4.2.2 setParameters()

[WEBRTC] 第 5.2 节描述了 setParameters() 中对 parameters 的验证。 将以下 条件插入导致该操作返回以 InvalidModificationError 拒绝的 promise 的条件列表中(第 6 步),该列表位于 setParameters 验证 步骤中:

"L1T1" 可伸缩性模式允许使用 setParameters() 关闭 SVC 编码。 如果使用 setParameters() 设置了 "L1T1", 则它将在 getParameters() 的响应中返回。

4.2.3 getParameters()

在初始协商完成之前, getParameters() 会返回 encodings 中每个 编码的 scalabilityMode 值,即最近一次由 addTransceiver()setParameters() 设置的值。 如果没有为 encodings 中的某个编码 提供 scalabilityMode 值, 或者某个值未成功设置,则 getParameters() 将不会为该编码返回 scalabilityMode 值。

初始协商完成后,getParameters() 会为 encodings 中在初始协商前具有值的每个编码返回当前配置的 scalabilityMode 值。该值可以不同于 addTransceiver()setParameters() 中请求的值。 例如,如果协商期间选中的编解码器不包括 支持所需 scalabilityMode 值的编码器,则用户代理可以选择另一个值。如果配置 不符合要求,可以使用 setParameters() 更改它。

如果 addTransceiver()setParameters() 没有为 encodings 中的某个编码提供 scalabilityMode 值,则在初始协商 完成后,getParameters() 将不会返回 scalabilityMode 值,而编码器将对该编码的 RTP 流使用 编解码器的默认 scalabilityMode。 每种编解码器的默认 scalabilityMode 取决于实现。默认 scalabilityMode 应该是 时间可伸缩性模式之一(例如 "L1T1""L1T2""L1T3" 等)。

4.2.4 协商问题

本节为非规范性内容。

SVC 最常用于视频会议,其中会议 服务器(例如 SFM) 会根据参与者的设备 特性和可用带宽选择性地向其转发不同的层。在这种环境中, 应用程序将与 会议服务器协商要发送和接收的编解码器。但是,由于可伸缩性模式不会 在提议/应答中协商,因此应用程序需要通过其他方式确定 浏览器和会议服务器支持 哪些可伸缩性模式。

[Media-Capabilities] API 支持发现编码器 和解码器对可伸缩视频编码的 支持情况。scalabilityMode 用于查询编码器是否支持某个 scalabilityMode 值,以指示它是否 “受支持”、“流畅”且“节能”。

[Media-Capabilities] API 还提供 解码器对空间可伸缩性模式的支持信息。spatialScalability 指示解码器是否具有支持空间预测的能力, 这要求其能够使用分辨率不同于 当前分辨率的帧作为依赖项。如果将 spatialScalability 设置为 true,则解码器可以解码编码器支持的任何 scalabilityMode 值。 如果将 spatialScalability 设置为 false 或不存在,则解码器无法解码空间可伸缩性模式,但可以 解码编码器支持的所有其他 scalabilityMode 值。

一旦应用程序确定了哪些编解码器与 scalabilityMode 值的组合可供其使用, 就需要确定其中哪些组合受 SFM 支持。 一种处理方式是让 SFM 以接收器能力的形式指明它可以转发的编解码器 与可伸缩性模式组合。 收到 SFM 的能力后,应用程序可以计算 浏览器的 RTCRtpSenderSFM 的接收器所支持的 编解码器与 scalabilityMode 值的交集。这样 可以用来确定传递给浏览器 addTransceiver()setParameters() 方法的参数。

以下是一些示例:

  1. 一个解析 编解码器载荷的 SFM 可能只支持不带可伸缩性的 H.264/AVC 编解码器,以及 带时间可伸缩性的 VP8 编解码器。另一方面,浏览器 可能能够使用时间可伸缩性编码 VP8,使用 时间和空间可伸缩性编码 VP9 和 AV1,并使用时间可伸缩性编码 H.264/AVC。 在此示例中,希望使用 SVC 的应用程序只能 使用时间可伸缩性编码 VP8。
  2. 一个 SFM 可能仅支持 使用 AV1 编解码器及 "S2T1""S2T1h" 可伸缩性 模式的单流联播,而浏览器可能支持使用 "S2T1""S2T1h""S3T1""S3T1h" 模式,通过 VP9 和 AV1 编解码器编码单 流联播。在此 示例中,应用程序只能使用 AV1 编解码器进行最多两层的单流联播。 如果应用程序希望 使用三层,那么它可以决定放弃使用单 流联播,转而协商多流联播。

在某些情况下,计算浏览器和 SFM 能力的交集时需要考虑 RTP 标头扩展。如果 SFM 无法解析编解码器载荷 (无论是因为其设计上不这样做,还是因为载荷已加密), 那么可能需要协商某个 RTP 标头扩展(例如 [AV1-RTP-SPEC] 附录 A 中 定义的 AV1 依赖描述符),才能使 SFM 转发特定编解码器。 为考虑这种情况,可以将转发某个 编解码器所需的 RTP 标头扩展添加到 SFM 的接收器能力中。随后,应用程序可以 计算浏览器的 RTCRtpSenderSFM 的接收器所支持的编解码器、标头扩展和 scalabilityMode 值的交集。

5. 可伸缩性模式

本规范支持的 scalabilityMode 值, 以及与其关联的标识符和特征,均列于 下表中。这里给出了 scalabilityMode 值的名称 (区分 大小写),以及 [AV1] 第 6.7.5 节中分配的可伸缩性模式标识符,以及 第 9 节中所提供依赖关系图的链接。

虽然 [AV1] 和 VP9 [VP9] 规范支持表中定义的所有 scalabilityMode 值, 其他编解码器 规范则不支持。例如,VP8 [RFC6386]、H.264 [RFC6184] 和 H.265 [RFC7798] 仅支持 时间可伸缩性(例如 "L1T2""L1T3")。 此外,VP8 [RFC6386]、H.264 [RFC6184] 和 H.265 [RFC7798] 仅允许在不同 SSRC 上 传输 联播,因此不支持“S”模式(其中多个编码 在单个 RTP 流上传输)。

可伸缩性模式标识符 空间层 分辨率比率 时间层 层间依赖关系 AV1 scalability_mode_idc
"L1T1" 1 1 不适用
"L1T2" 1 2 SCALABILITY_L1T2
"L1T3" 1 3 SCALABILITY_L1T3
"L2T1" 2 2:1 1 SCALABILITY_L2T1
"L2T2" 2 2:1 2 SCALABILITY_L2T2
"L2T3" 2 2:1 3 SCALABILITY_L2T3
"L3T1" 3 2:1 1 SCALABILITY_L3T1
"L3T2" 3 2:1 2 SCALABILITY_L3T2
"L3T3" 3 2:1 3 SCALABILITY_L3T3
"L2T1h" 2 1.5:1 1 SCALABILITY_L2T1h
"L2T2h" 2 1.5:1 2 SCALABILITY_L2T2h
"L2T3h" 2 1.5:1 3 SCALABILITY_L2T3h
"L3T1h" 3 1.5:1 1
"L3T2h" 3 1.5:1 2
"L3T3h" 3 1.5:1 3
"S2T1" 2 2:1 1 SCALABILITY_S2T1
"S2T2" 2 2:1 2 SCALABILITY_S2T2
"S2T3" 2 2:1 3 SCALABILITY_S2T3
"S2T1h" 2 1.5:1 1 SCALABILITY_S2T1h
"S2T2h" 2 1.5:1 2 SCALABILITY_S2T2h
"S2T3h" 2 1.5:1 3 SCALABILITY_S2T3h
"S3T1" 3 2:1 1 SCALABILITY_S3T1
"S3T2" 3 2:1 2 SCALABILITY_S3T2
"S3T3" 3 2:1 3 SCALABILITY_S3T3
"S3T1h" 3 1.5:1 1 SCALABILITY_S3T1h
"S3T2h" 3 1.5:1 2 SCALABILITY_S3T2h
"S3T3h" 3 1.5:1 3 SCALABILITY_S3T3h
"L2T2_KEY" 2 2:1 2 SCALABILITY_L3T2_KEY
"L2T2_KEY_SHIFT" 2 2:1 2 SCALABILITY_L3T2_KEY_SHIFT
"L2T3_KEY" 2 2:1 3 SCALABILITY_L3T3_KEY
"L2T3_KEY_SHIFT" 2 2:1 3 SCALABILITY_L3T3_KEY_SHIFT
"L3T1_KEY" 3 2:1 1
"L3T2_KEY" 3 2:1 2 SCALABILITY_L4T5_KEY
"L3T2_KEY_SHIFT" 3 2:1 2 SCALABILITY_L4T5_KEY_SHIFT
"L3T3_KEY" 3 2:1 3 SCALABILITY_L4T7_KEY
"L3T3_KEY_SHIFT" 3 2:1 3 SCALABILITY_L4T7_KEY_SHIFT

5.1 添加 scalabilityMode 值的指南

提出一个 scalabilityMode 值时, 应遵循以下原则:

  1. 所提出的 scalabilityMode 必须定义第 5 节 表中的条目,包括可伸缩性模式标识符、空间层和 时间层、分辨率比率、层间依赖关系以及相应的 AV1 scalability_mode_idc 值(如果已分配)。
  2. 可伸缩性模式标识符应该与现有 命名方案保持一致,该方案 使用 LxTy 表示具有 x 个空间层、使用 2:1 分辨率比率以及 y 个时间层的 scalabilityModeLxTyh 表示具有 x 个空间层、1.5:1 分辨率 比率以及 y 个时间层。SxTy 表示一个 scalabilityMode, 其中有 x 个使用 2:1 分辨率比率的联播编码,每个 联播编码包含 y 个时间层。SxTyh 表示 1.5:1 分辨率比率。LxTy_KEY 表示一个 scalabilityMode, 其中有 x 个使用 2:1 分辨率比率的空间层和 y 个时间层, 其中空间层仅 在关键帧处依赖较低的空间层。LxTy_KEY_SHIFT 模式表示一个 scalabilityMode, 其中有 x 个使用 2:1 分辨率比率的空间层和 y 个时间层,空间层仅在关键 帧处依赖较低的空间层,而后续 帧的时间标识符会向上偏移。
  3. 必须按照第 9 节所给出的格式提供依赖关系图。

6. 示例

6.1 空间联播 和时间可伸缩性

本节为非规范性内容。

此示例扩展了 [WEBRTC] 第 7.1 节(示例 1), 以演示发送三个空间 联播层,每层具有三个时间层,并为每个联播 层使用一个 SSRC 和 RID。仅对原始示例中的 "sendEncodings" 属性进行了更改。

const signaling = new SignalingChannel(); // 处理 JSON.stringify/parse
const constraints = {audio: true, video: true};
const configuration = {'iceServers': [{'urls': 'stun:stun.example.org'}]};
let pc;

// 调用 start() 以开始
async function start() {
  pc = new RTCPeerConnection(configuration);

  // 让 "negotiationneeded" 事件触发提议生成
  pc.onnegotiationneeded = async () => {
    try {
      await pc.setLocalDescription();
      // 将提议发送给另一个对等方
      signaling.send({description: pc.localDescription});
    } catch (err) {
      console.error(err);
    }
  };

  try {
    // 获取本地流,在自视图中显示它,并添加它以便发送
    const stream = await navigator.mediaDevices.getUserMedia(constraints);
    selfView.srcObject = stream;
    pc.addTransceiver(stream.getAudioTracks()[0], {direction: 'sendonly'});
    pc.addTransceiver(stream.getVideoTracks()[0], {
      direction: 'sendonly',
      sendEncodings: [
        {rid: 'q', scaleResolutionDownBy: 4.0, scalabilityMode: 'L1T3'},
        {rid: 'h', scaleResolutionDownBy: 2.0, scalabilityMode: 'L1T3'},
        {rid: 'f', scalabilityMode: 'L1T3'}
      ]
    });
  } catch (err) {
    console.error(err);
  }
}

signaling.onmessage = async ({data: {description, candidate}}) => {
  try {
    if (description) {
      await pc.setRemoteDescription(description);
      // 如果收到提议,则需要以应答进行回复
      if (description.type == 'offer') {
        await pc.setLocalDescription();
        signaling.send({description: pc.localDescription});
      }
    } else if (candidate) {
      await pc.addIceCandidate(candidate);
    }
  } catch (err) {
    console.error(err);
  }
};

这是一个包含两个空间层(比率为 2:1)和三个时间层的示例。

let sendEncodings = [
  {scalabilityMode: 'L2T3'}
];

这是混合编解码器联播的示例,其中每个联播层都有 3 个时间层。

let sendEncodings = [
  {rid: 'q', codec: {clockRate: 90000, mimeType: 'video/AV1'}, scaleResolutionDownBy: 4.0, scalabilityMode: 'L1T3'},
  {rid: 'h', codec: {clockRate: 90000, mimeType: 'video/VP8'}, scaleResolutionDownBy: 2.0, scalabilityMode: 'L1T3'},
  {rid: 'f', codec: {clockRate: 90000, mimeType: 'video/VP8'}, scalabilityMode: 'L1T3'}
];

这是一个在单个 SSRC 上包含三个空间联播层、每层都有三个时间层的示例。

let sendEncodings = [
  {scalabilityMode: 'S3T3'}
]

6.2 SVC 编码器能力

本节为非规范性内容。

这是实现了 [WEBRTC] 和 [Media-Capabilities] 的浏览器返回的 encodingInfo(configuration) 的示例。

const contentType = 'video/VP9';

const configuration = {
  type: 'webrtc',
  video: {
    contentType,
    width: 640,
    height: 480,
    bitrate: 10000,
    framerate: 29.97,
    scalabilityMode: 'L3T3_KEY'
  }
};

try {
  const info = await navigator.mediaCapabilities.encodingInfo(configuration);

  if (!info.supported) {
    console.log(`${contentType} 不受支持。`);
    return;
  }
  console.log(`${contentType} ${info.smooth || '不'}流畅,并且` +
              `${info.powerEfficient || '不'}节能`);
} catch (err) {
  console.error(err, ' 导致 encodingInfo 失败');
}

6.3 SFM 能力

本节为非规范性内容。

这是一个 SFM 返回的接收器能力示例,该 SFM 仅支持转发 VP8、VP9 和 AV1 的时间可伸缩性模式。

 "codecs": [
    {
      "clockRate": 90000,
      "mimeType": "video/VP8",
      "scalabilityModes": [
        "L1T1",
        "L1T2",
        "L1T3"
      ]
    },
    {
      "clockRate": 90000,
      "mimeType": "video/VP9",
      "scalabilityModes": [
        "L1T1",
        "L1T2",
        "L1T3"
      ]
    },
    {
      "clockRate": 90000,
      "mimeType": "video/AV1",
      "scalabilityModes": [
        "L1T1",
        "L1T2",
        "L1T3"
      ]
    }
]

7. 隐私注意事项

本节为非规范性内容。

本节为非规范性内容;它没有规定任何新行为,而是 总结了规范其他部分中已存在的 信息。WebRTC API 的隐私注意事项 在 [WEBRTC] 第 13 节中进行了描述。

7.1 持久信息

在 WebRTC 中,可伸缩编码工具的使用不会 在对等方之间进行协商,因此既不会在 SDP 中公开所支持的 scalabilityMode 值, 也不会公开 解码器对空间预测的支持情况。

通过尝试使用 setParameters() API 为 每种编解码器设置 scalabilityMode 值, 应用程序可以通过记录哪些配置尝试成功、 哪些失败,来确定编码器支持的值。 但是,这并不能表明 某个 scalabilityMode 值是由硬件编码器还是软件编码器 (或二者)支持。由于 setParameters() 不支持 RTCRtpReceiver,因此无法运行等效 实验来确定解码器支持情况。

由于软件编码器支持的 scalabilityMode 值通常是 硬件所支持值的超集,因此这些实验 可获得的信息与正在使用的浏览器高度相关,而浏览器信息本身已经可以被 网页获得。一旦媒体开始传输,就可以获得有关 性能特征或某个 scalabilityMode 值 对当前使用的编解码器而言是否可解码的信息, 从而提供更多有关硬件能力的信息。

如 [Media-Capabilities] 第 3.1 节所述,媒体 能力 API 相比从本规范中获得的信息,“很可能会提供更准确且 一致的信息”。如 [Media-Capabilities] 第 3.1 节所述,“预计此信息 将与网页已经可以获得的其他信息高度相关,因为给定类别的 设备预计具有非常相似的解码/编码 能力。”

8. 安全注意事项

本节为非规范性内容。

本节为非规范性内容;它没有规定任何新行为,而是 总结了规范其他部分中已经存在的 信息。WebRTC 协议的安全注意事项 在 [RFC8827] 中进行了描述,而 WebRTC API 的安全和隐私注意事项 在 [WEBRTC] 第 13 节中进行了描述。

9. 可伸缩性模式依赖关系 图

本规范中定义的可伸缩性模式的依赖关系图 如下所示。

9.1 L1T1

L1T1:单层
1 L1T1:1 层编码

9.2 L1T2

L1T2:2 层时间可伸缩性编码
2 L1T2:1 层空间和 2 层时间可伸缩性编码

9.3 L1T3

L1T3:3 层时间可伸缩性编码
3 L1T3:1 层空间和 3 层时间可伸缩性编码

9.4 L2T1 和 L2T1h

L2T1 和 L2T1h:2 层空间和 1 层时间可伸缩性编码
4 L2T1 和 L2T1h:2 层空间和 1 层时间可伸缩性编码

9.5 L2T1_KEY

L2T1_KEY:2 层空间和 1 层时间可伸缩性 K-SVC 编码
5 L2T1_KEY:2 层空间和 1 层时间可伸缩性 K-SVC 编码

9.6 L2T2 和 L2T2h

L2T2 和 L2T2h:2 层空间和 2 层时间可伸缩性编码
6 L2T2 和 L2T2h:2 层空间和 2 层时间可伸缩性编码

9.7 L2T2_KEY

L2T2_KEY:2 层空间和 2 层时间可伸缩性 K-SVC 编码
7 L2T2_KEY:2 层空间和 2 层时间可伸缩性 K-SVC 编码

9.8 L2T2_KEY_SHIFT

L2T2_KEY_SHIFT:具有时间偏移的 2 层空间和 2 层时间可伸缩性 K-SVC 偏移编码
8 L2T2_KEY_SHIFT:具有时间偏移的 2 层空间和 2 层时间可伸缩性 K-SVC 编码

9.9 L2T3 和 L2T3h

L2T3 和 L2T3h:2 层空间和 3 层时间可伸缩性编码
9 L2T3 和 L2T3h:2 层空间和 3 层时间可伸缩性编码

9.10 L2T3_KEY

L2T3_KEY:2 层空间和 3 层时间可伸缩性 K-SVC 编码
10 L2T3_KEY:2 层空间和 3 层时间可伸缩性 K-SVC 编码

9.11 L2T3_KEY_SHIFT

L2T3_KEY_SHIFT:具有时间偏移的 2 层空间和 3 层时间可伸缩性 K-SVC 偏移编码
11 L2T3_KEY_SHIFT:具有时间偏移的 2 层空间和 3 层时间可伸缩性 K-SVC 编码

9.12 L3T1 和 L3T1h

L3T1 和 L3T1h:3 层空间和 1 层时间可伸缩性编码
12 L3T1 和 L3T1h:3 层空间和 1 层时间可伸缩性编码

9.13 L3T1_KEY

L3T1_KEY:3 层空间和 1 层时间可伸缩性 K-SVC 编码
13 L3T1_KEY:3 层空间和 1 层时间可伸缩性 K-SVC 编码

9.14 L3T2 和 L3T2h

L3T2 和 L3T2h:3 层空间和 2 层时间可伸缩性编码
14 L3T2 和 L3T2h:3 层空间和 2 层时间可伸缩性编码

9.15 L3T2_KEY

L3T2_KEY:3 层空间和 2 层时间可伸缩性 K-SVC 编码
15 L3T2_KEY:3 层空间和 2 层时间可伸缩性 K-SVC 编码

9.16 L3T2_KEY_SHIFT

L3T2_KEY_SHIFT:具有时间偏移的 3 层空间和 2 层时间可伸缩性 K-SVC
16 L3T2_KEY_SHIFT:具有时间偏移的 3 层空间和 2 层时间可伸缩性 K-SVC

9.17 L3T3 和 L3T3h

L3T3 和 L3T3h:3 层空间和 3 层时间可伸缩性编码
17 L3T3 和 L3T3h:3 层空间和 3 层时间可伸缩性编码

9.18 L3T3_KEY

L3T3_KEY:3 层空间和 3 层时间可伸缩性 K-SVC 编码
18 L3T3_KEY:3 层空间和 3 层时间可伸缩性 K-SVC 编码

9.19 L3T3_KEY_SHIFT

L3T3_KEY_SHIFT:具有时间偏移的 3 层空间和 3 层时间可伸缩性 K-SVC
19 L3T3_KEY_SHIFT:具有时间偏移的 3 层空间和 3 层时间可伸缩性 K-SVC

9.20 S2T1 和 S2T1h

S2T1 和 S2T1h:2 层空间联播编码
20 S2T1 和 S2T1h:2 层空间联播编码

9.21 S2T2 和 S2T2h

S2T2 和 S2T2h:2 层空间联播和 2 层时间可伸缩性编码
21 S2T2 和 S2T2h:2 层空间联播和 2 层时间可伸缩性编码

9.22 S2T3 和 S2T3h

S2T3 和 S2T3h:2 层空间联播和 3 层时间可伸缩性编码
22 S2T3 和 S2T3h:2 层空间联播和 3 层时间可伸缩性编码

9.23 S3T1 和 S3T1h

S3T1 和 S3T1h:3 层空间联播编码
23 S3T1 和 S3T1h:3 层空间联播编码

9.24 S3T2 和 S3T2h

S3T2 和 S3T2h:3 层空间联播和 2 层时间可伸缩性编码
24 S3T2 和 S3T2h:3 层空间联播和 2 层时间可伸缩性编码

9.25 S3T3 和 S3T3h

S3T3 和 S3T3h:3 层空间联播和 3 层时间可伸缩性编码
25 S3T3 和 S3T3h:3 层空间联播和 3 层时间可伸缩性编码

A. 致谢

编辑者感谢 Robin Raymond、Michael Horowitz、Harald Alvestrand、 Chris Cunningham、Danil Chapovalov、Florent Castelli、Erik Språng 和 Henrik Boström 对本规范作出的贡献,本规范源自 W3C ORTC CG 中开发的 ORTC API。

B. 参考文献

B.1 规范性参考文献

[infra]
Infra 标准. Anne van Kesteren; Domenic Denicola. WHATWG. 现行标准. URL: https://infra.spec.whatwg.org/
[RFC2119]
RFC 中用于指示 要求级别的关键字. S. Bradner. IETF. 1997 年 3 月. 最佳现行实践. URL: https://www.rfc-editor.org/info/rfc2119/
[RFC7656]
实时传输协议(RTP)源的语义和机制 分类. J. Lennox; K. Gross; S. Nandakumar; G. Salgueiro; B. Burman, 编辑. IETF. 2015 年 11 月. 信息性. URL: https://www.rfc-editor.org/info/rfc7656/
[RFC7667]
RTP 拓扑. M. Westerlund; S. Wenger. IETF. 2015 年 11 月. RFC. URL: https://datatracker.ietf.org/doc/html/rfc7667
[RFC8174]
RFC 2119 关键字中大写与小写的歧义. B. Leiba. IETF. 2017 年 5 月. 最佳现行实践. URL: https://www.rfc-editor.org/info/rfc8174/
[WEBIDL]
Web IDL 标准. Edgar Chen; Timothy Gu. WHATWG. 现行标准. URL: https://webidl.spec.whatwg.org/
[WEBRTC]
WebRTC:浏览器中的实时 通信. Cullen Jennings; Jan-Ivar Bruaroey; Henrik Boström; Florent Castelli. W3C. 2025 年 3 月 13 日. W3C 推荐标准. URL: https://www.w3.org/TR/webrtc/

B.2 资料性参考文献

[AV1]
AV1 比特流和解码 过程规范. Peter de Rivaz; Jack Haughton. AOM. 2019 年 1 月 8 日. 标准. URL: https://aomediacodec.github.io/av1-spec/av1-spec.pdf
[AV1-RTP-SPEC]
AV1 的 RTP 载荷格式. Alliance for Open Media. 交付成果草案. URL: https://aomediacodec.github.io/av1-rtp-spec/
[ITU-T-REC-H.264]
H.264:通用 视听业务的高级视频编码. ITU. 2019 年 6 月. URL: https://www.itu.int/rec/T-REC-H.264
[ITU-T-REC-H.265]
H.265:高效率视频编码. ITU. 2021 年 8 月. URL: https://www.itu.int/rec/T-REC-H.265
[Media-Capabilities]
媒体能力. Jean-Yves Avenard; Mark Foltz. W3C. 2026 年 6 月 9 日. W3C 工作草案. URL: https://www.w3.org/TR/media-capabilities/
[RFC6184]
H.264 视频的 RTP 载荷格式. Y.-K. Wang; R. Even; T. Kristensen; R. Jesup. IETF. 2011 年 5 月. 提议 标准. URL: https://www.rfc-editor.org/info/rfc6184/
[RFC6190]
可伸缩视频 编码的 RTP 载荷格式. S. Wenger; Y.-K. Wang; T. Schierl; A. Eleftheriadis. IETF. 2011 年 5 月. 提议标准. URL: https://www.rfc-editor.org/info/rfc6190/
[RFC6386]
VP8 数据格式和解码 指南. J. Bankoski; J. Koleszar; L. Quillio; J. Salonen; P. Wilkins; Y. Xu. IETF. 2011 年 11 月. 信息性. URL: https://www.rfc-editor.org/info/rfc6386/
[RFC7741]
VP8 视频的 RTP 载荷格式. P. Westin; H. Lundin; M. Glover; J. Uberti; F. Galligan. IETF. 2016 年 3 月. 提议标准. URL: https://www.rfc-editor.org/info/rfc7741/
[RFC7798]
高效率 视频编码(HEVC)的 RTP 载荷格式. Y.-K. Wang; Y. Sanchez; T. Schierl; S. Wenger; M. M. Hannuksela. IETF. 2016 年 3 月. 提议标准. URL: https://www.rfc-editor.org/info/rfc7798/
[RFC8827]
WebRTC 安全架构. E. Rescorla. IETF. 2021 年 1 月. 提议标准. URL: https://www.rfc-editor.org/info/rfc8827/
[VP9]
VP9 比特流和解码过程规范. A. Grange; P. de Rivaz; J. Hunt. Google. 2016 年 2 月. 版本 0.6. URL: https://storage.googleapis.com/downloads.webmproject.org/docs/vp9/vp9-bitstream-specification-v0.6-20160331-draft.pdf
[VP9-PAYLOAD]
VP9 视频的 RTP 载荷格式. J. Uberti; S. Holmer; M. Flodman; J. Lennox; D. Hong. IETF. 2021 年 6 月 10 日. 互联网草案(进行中的工作). URL: https://datatracker.ietf.org/doc/html/draft-ietf-payload-vp9