Opus WebCodecs 注册

W3C 小组说明草案,

关于本文档的更多详细信息
此版本:
https://www.w3.org/TR/2026/DNOTE-webcodecs-opus-codec-registration-20260924/
最新发布版本:
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 可以选择性地设置为标识 头,如 [OPUS-IN-OGG] 第 5.1 节所述。

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

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

4. EncodedAudioChunk 类型

包含 Opus 的 EncodedAudioChunk 的 [[type]] 始终为 “key”。

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

5. 预填充样本

标识头中的 Pre-skip 字段(见 [OPUS-IN-OGG] 第 5.1 节),如果存在于 description 中, 则指定 AudioDecoder 的 [[priming samples to discard]] 内部槽位的初始值。如果不存在 description, 则 [[priming samples to discard]] 被初始化为 0。已解码的 EncodedAudioChunk 不会传递额外的丢弃信息。

6. AudioEncoderConfig 扩展

partial dictionary AudioEncoderConfig {

  OpusEncoderConfig opus;

};



opus,类型为 OpusEncoderConfig
包含 Opus 编解码器专用的配置选项。

6.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 且其值不在 0 到 10(含)范围内,则返回 false。

  3. 如果指定了 packetlossperc 且其值不在 0 到 100(含)范围内,则返回 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
配置编码器的计算复杂度,如第 2.1.9 节 (见 [RFC6716])所述。有效范围为 0 到 10,其中 10 表示最高 复杂度。如果未指定值,则默认值因平台而异: 用户代理应该在移动 平台上将默认值设置为 5,在所有其他平台上将默认值设置为 9。
packetlossperc, 类型为 unsigned long,默认值为 0
配置编码器预期的数据包丢失百分比。有效范围为 0 到 100。

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

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

6.2. OpusBitstreamFormat

enum OpusBitstreamFormat {

  "opus",

  "ogg",

};



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

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

6.3. OpusSignal

enum OpusSignal {

  "auto",

  "music",

  "voice",

};



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

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

6.4. OpusApplication

enum OpusApplication {

  "voip",

  "audio",

  "lowdelay",

};



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

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

7. 隐私注意事项

请参阅 隐私 注意事项一节,见 [WEBCODECS]。

8. 安全注意事项

请参阅 安全 注意事项一节,见 [WEBCODECS]。

一致性

文档 约定

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

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

本规范中的示例以“例如”等词语引入, 或通过 class="example" 与规范性文本区分开来, 如下所示:

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

资料性注释以“注”一词开头, 并通过 class="note" 与规范性文本区分开来, 如下所示:

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

索引

本规范定义的 术语

通过引用定义的 术语

参考文献

规范性参考文献

[RFC2119]
S. Bradner. 用于在 RFC 中 指示要求级别的关键词。1997 年 3 月。最佳当前实践。URL:https://datatracker.ietf.org/doc/html/rfc2119
[WEBCODECS]
Paul Adenot; Eugene Zemtsov. WebCodecs。2026 年 7 月 8 日。WD。URL:https://www.w3.org/TR/webcodecs/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL 标准。现行 标准。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/info/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",
};