Opus WebCodecs 注册

W3C 小组草案注释

有关本文档的更多详细信息
此版本:
https://www.w3.org/TR/2025/DNOTE-webcodecs-opus-codec-registration-20250514/
最新发布版本:
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 Inc.)
参与:
Git 仓库。
提交问题。
版本历史:
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 标准和草案索引中找到,地址为 https://www.w3.org/TR/。

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

本文档由 媒体工作组作为 小组草案注释发布,并使用 注释 轨道

小组草案注释不被 W3C 或其成员认可。

这是一个草案文档,可能随时被其他文档更新、替换或废弃。 除作为进行中的工作之外,引用本文档是不合适的。

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

本文档受 2023 年 11 月 03 日 W3C 流程文档约束。

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

编解码器字符串"opus"

2. EncodedAudioChunk 数据

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

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

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

3. AudioDecoderConfig description

description 可以可选地设置为一个 Identification 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 表示最高 复杂度。如果未指定值,则默认值是平台特定的: 用户代理 SHOULD 对移动 平台设置默认值 5,并对所有其他平台设置默认值 9
packetlossperc, 类型为 unsigned long,默认值为 0
配置编码器预期的数据包丢失百分比。有效范围为 0100

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

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" 与规范性文本分开, 如下所示:

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

索引

由本 规范定义的术语

由 引用定义的术语

参考文献

规范性参考文献

[RFC2119]
S. Bradner. Key words for use in RFCs to Indicate Requirement Levels. 1997 年 3 月. Best Current Practice. URL: https://datatracker.ietf.org/doc/html/rfc2119
[WEBCODECS]
Paul Adenot; Eugene Zemtsov. WebCodecs. 2025 年 5 月 14 日. WD. URL: https://www.w3.org/TR/webcodecs/
[WEBIDL]
Edgar Chen; Timothy Gu. Web IDL Standard. Living Standard. URL: https://webidl.spec.whatwg.org/

资料性参考文献

[OPUS]
RFC 6716: Definition of the Opus Audio Codec. 2012 年 9 月. URL: https://datatracker.ietf.org/doc/html/rfc6716
[OPUS-IN-OGG]
RFC 7845: Ogg Encapsulation for the Opus Audio Codec. 2016 年 4 月. URL: https://datatracker.ietf.org/doc/html/rfc7845
[RFC6716]
JM. Valin; K. Vos; T. Terriberry. Definition of the Opus Audio Codec. 2012 年 9 月. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6716
[WEBCODECS-CODEC-REGISTRY]
Paul Adenot; Bernard Aboba. WebCodecs Codec Registry. 2024 年 9 月 9 日. 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",
};