Opus WebCodecs 注册

W3C 小组说明草案,

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/DNOTE-webcodecs-opus-codec-registration-20260608/
最新发布版本:
https://www.w3.org/TR/webcodecs-opus-codec-registration/
编辑草案:
https://w3c.github.io/webcodecs/opus_codec_registration.html
先前版本:
历史:
https://www.w3.org/standards/history/webcodecs-opus-codec-registration/
反馈:
GitHub
编辑:
Paul Adenot (Mozilla)
Eugene Zemtsov (Google LLC)
前任编辑:
Bernard Aboba (Microsoft Corporation)
Chris Cunningham (Google LLC)
参与:
Git 仓库。
提交 issue。
版本历史:
https://github.com/w3c/webcodecs/commits

摘要

此注册被录入到 [webcodecs-codec-registry] 中。 它描述了 Opus 的:(1) 完全限定的 编解码器字符串,(2) 特定于 编解码器的 EncodedAudioChunk [[internal data]] 字节,(3) AudioDecoderConfig.description 字节,(4) EncodedAudioChunk [[type]] 的值, 以及 (5) 对 AudioEncoderConfig 的特定于编解码器的扩展

此注册无意包含关于某种 编解码器格式是否受知识产权权利主张约束的任何信息。如果实现者和 作者打算实现或使用某种特定的编解码器格式,建议他们就此事项 寻求适当的法律顾问意见。WebCodecs 的实现者 无需支持 Opus 编解码器。

此注册是非规范性的。

本文档状态

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

欢迎对此规范提供反馈和评论。 关于此规范的讨论首选使用 GitHub Issues。或者,你也可以将评论发送到 Media Working Group 的邮件列表:public-media-wg@w3.org归档)。 此草案突出显示了一些仍有待工作组讨论的待处理问题。 对于这些问题的结果,包括它们是否有效,尚未作出决定。

本文档由 Media Working Group 作为 小组说明草案发布,使用的是 说明 轨道

小组说明草案未获得 W3C 或其成员的认可。

这是草案文档,可能在任何时候被其他文档更新、取代或废弃。 不应将本文档作为进行中工作以外的内容来引用。

W3C 专利政策不会对此文档附带任何许可 要求或承诺。

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

1. 完全限定的编解码器字符串

编解码器字符串"opus"

2. EncodedAudioChunk 数据

包含 Opus 的 EncodedAudioChunk 可以采用两种不同格式。

如果比特流采用 opus 格式, EncodedAudioChunk 必须是 Opus 数据包,如 第 3 节 [OPUS] 所述

如果比特流采用 ogg 格式, EncodedAudioChunk 必须是音频数据包,如 第 3 节 [OPUS-IN-OGG] 所述。

3. AudioDecoderConfig description

description 可以选择性地设置为 Identification Header,该 Header 在 [OPUS-IN-OGG] 第 5.1 节中描述。

如果设置了 description, 则假定比特流 采用 ogg 格式。

如果未设置 description, 则假定比特流 采用 opus 格式。

4. EncodedAudioChunk type

对于包含 Opus 的 EncodedAudioChunk, 其 [[type]] 始终是 “key”。

注: 一旦初始化成功,任何数据包 都可以在任何 时候解码且不会出错,但这可能不会产生预期的音频输出。

5. AudioEncoderConfig 扩展

partial dictionary AudioEncoderConfig {
  OpusEncoderConfig opus;
};

opus, 类型为 OpusEncoderConfig
包含 Opus 编解码器的特定于编解码器的配置选项。

5.1. OpusEncoderConfig

dictionary OpusEncoderConfig {
  OpusBitstreamFormat format = "opus";
  OpusSignal signal = "auto";
  OpusApplication application = "audio";
  [EnforceRange] unsigned long long frameDuration = 20000;
  [EnforceRange] unsigned long complexity;
  [EnforceRange] unsigned long packetlossperc = 0;
  boolean useinbandfec = false;
  boolean usedtx = false;
};

要检查某个 OpusEncoderConfig 是否有效,运行以下步骤:

  1. 如果 frameDuration 不是有效的帧时长, 该帧时长在 [RFC6716] 第 2.1.4 节中描述,则返回 false

  2. 如果指定了 complexity 且不在 010(含两端)范围内,则返回 false

  3. 如果指定了 packetlossperc 且不在 0100(含两端)范围内,则返回 false

  4. 返回 true

format, 类型为 OpusBitstreamFormat,默认为 "opus"
配置输出 EncodedAudioChunk 的格式。 参见 OpusBitstreamFormat
signal, 类型为 OpusSignal,默认为 "auto"
指定正在编码的音频信号类型。参见 OpusSignal
application, 类型为 OpusApplication,默认为 "audio"
指定编码器的预期应用。参见 OpusApplication
frameDuration, 类型为 unsigned long long,默认为 20000
配置输出 EncodedAudioChunk 的帧时长,以微秒为单位。
complexity, 类型为 unsigned long
配置编码器的计算复杂度,如 [RFC6716] 第 2.1.9 节 所述。有效范围为 010,其中 10 表示最高 复杂度。如果未指定值,默认值取决于平台: User Agents SHOULD 对移动 平台设置默认值 5,并对所有其他平台设置默认值 9
packetlossperc, 类型为 unsigned long,默认为 0
配置编码器预期的数据包丢失百分比。有效范围为 0100

注: 数据包丢失百分比可能会在 编码过程中更新,建议 User Agents 支持这些重新配置。

useinbandfec, 类型为 boolean,默认为 false
指定编码器是否提供 Opus 带内前向纠错 (FEC),如 [RFC6716] 第 2.1.7 节所述。
usedtx, 类型为 boolean,默认为 false
指定编码器是否使用不连续传输(DTX),如 [RFC6716] 第 2.1.9 节所述。

5.2. OpusBitstreamFormat

enum OpusBitstreamFormat {
  "opus",
  "ogg",
};

OpusBitstreamFormat 决定解码已编码音频流是否需要额外数据。

opus
解码已编码音频流不需要元数据。
ogg
已编码音频流的元数据会在配置时通过 AudioDecoderConfig.description 提供。

5.3. OpusSignal

enum OpusSignal {
  "auto",
  "music",
  "voice",
};

OpusSignal 指示正在编码的信号类型的默认值。

auto
未指定音频信号为某一特定类型。
music
音频信号是音乐。
voice
音频信号是人声或语音。

5.4. OpusApplication

enum OpusApplication {
  "voip",
  "audio",
  "lowdelay",
};

OpusApplication 指示编码器预期应用的默认值。

voip
处理信号以提高语音可懂度。
audio
偏向忠实于原始输入。
lowdelay
通过禁用某些工作模式来配置尽可能低的编码延迟。

6. 隐私考量

请参阅 隐私 考量一节,见 [WEBCODECS]

7. 安全考量

请参阅 安全 考量一节,见 [WEBCODECS]

一致性

文档 约定

一致性要求通过 描述性断言 和 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" 与规范性文本分开设置, 如下所示:

注,这是一个信息性注。

索引

由此 规范定义的术语

由引用定义的 术语

参考文献

规范性参考文献

[RFC2119]
S. Bradner. 用于在 RFC 中指示 要求级别的关键词。1997年3月。最佳当前实践。URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBCODECS]
Paul Adenot; Eugene Zemtsov. WebCodecs。2026年5月5日。WD。URL: https://www.w3.org/TR/webcodecs/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard。现行标准。URL: https://webidl.spec.whatwg.org/

非规范性参考文献

[OPUS]
RFC 6716:Opus 音频 编解码器的定义。2012年9月。URL: https://datatracker.ietf.org/doc/html/rfc6716
[OPUS-IN-OGG]
RFC 7845:Opus 音频 编解码器的 Ogg 封装。2016年4月。URL: https://datatracker.ietf.org/doc/html/rfc7845
[RFC6716]
JM. Valin; K. Vos; T. Terriberry. Opus 音频 编解码器的定义。2012年9月。提议标准。URL: https://www.rfc-editor.org/rfc/rfc6716
[WEBCODECS-CODEC-REGISTRY]
Paul Adenot; Eugene Zemtsov. WebCodecs 编解码器 注册表。2026年2月12日。DRY。URL: https://www.w3.org/TR/webcodecs-codec-registry/

IDL 索引

partial dictionary AudioEncoderConfig {
  OpusEncoderConfig opus;
};


dictionary OpusEncoderConfig {
  OpusBitstreamFormat format = "opus";
  OpusSignal signal = "auto";
  OpusApplication application = "audio";
  [EnforceRange] unsigned long long frameDuration = 20000;
  [EnforceRange] unsigned long complexity;
  [EnforceRange] unsigned long packetlossperc = 0;
  boolean useinbandfec = false;
  boolean usedtx = false;
};


enum OpusBitstreamFormat {
  "opus",
  "ogg",
};


enum OpusSignal {
  "auto",
  "music",
  "voice",
};


enum OpusApplication {
  "voip",
  "audio",
  "lowdelay",
};