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를 사용하는 것이 좋습니다. 또는 Media Working Group의 메일링 리스트인 public-media-wg@w3.org (아카이브)로 의견을 보낼 수 있습니다. 이 초안은 아직 워킹 그룹에서 논의해야 할 일부 보류 중인 이슈를 강조 표시합니다. 이러한 이슈가 유효한지 여부를 포함하여 그 결과에 관해서는 아직 어떠한 결정도 내려지지 않았습니다.

이 문서는 Media Working GroupNote track을 사용하여 Group Draft Note로 공개했습니다.

Group Draft Note는 W3C나 그 회원의 승인을 받은 것이 아닙니다.

이 문서는 초안 문서이며 언제든지 다른 문서로 갱신, 대체 또는 폐기될 수 있습니다. 이 문서를 진행 중인 작업 이외의 것으로 인용하는 것은 부적절합니다.

W3C 특허 정책은 이 문서에 대해 어떠한 라이선스 요구사항이나 약속도 부과하지 않습니다.

이 문서는 2023년 11월 03일 W3C Process Document의 지배를 받습니다.

1. 완전히 한정된 코덱 문자열

코덱 문자열"opus"입니다.

2. EncodedAudioChunk 데이터

Opus를 포함하는 EncodedAudioChunk는 두 가지 다른 형식일 수 있습니다.

비트스트림이 opus 형식인 경우, EncodedAudioChunk섹션 3[OPUS]에 설명된 Opus 패킷이어야 합니다

비트스트림이 ogg 형식인 경우, EncodedAudioChunk섹션 3[OPUS-IN-OGG]에 설명된 오디오 데이터 패킷이어야 합니다.

3. AudioDecoderConfig 설명

description은 선택적으로 [OPUS-IN-OGG]의 섹션 5.1에 설명된 Identification Header로 설정할 수 있습니다.

description이 설정된 경우, 비트스트림은 ogg 형식인 것으로 간주됩니다.

description이 설정되지 않은 경우, 비트스트림은 opus 형식인 것으로 간주됩니다.

4. EncodedAudioChunk 타입

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에 설명된 대로 인코더의 계산 복잡도를 구성합니다. 유효한 범위는 0에서 10까지이며, 10은 가장 높은 복잡도를 나타냅니다. 값이 지정되지 않은 경우 기본값은 플랫폼별입니다: 사용자 에이전트는 모바일 플랫폼에서는 5를 기본값으로 설정하고, 그 밖의 모든 플랫폼에서는 9를 기본값으로 설정하는 것이 SHOULD입니다.
packetlossperc, 타입은 unsigned long, 기본값은 0
인코더가 예상하는 패킷 손실 비율을 구성합니다. 유효한 범위는 0에서 100까지입니다.

참고: 패킷 손실 비율은 인코딩 과정에서 갱신될 수 있으며, 사용자 에이전트가 이러한 재구성을 지원하는 것이 권장됩니다.

useinbandfec, 타입은 boolean, 기본값은 false
인코더가 [RFC6716]의 섹션 2.1.7에 설명된 Opus 인밴드 순방향 오류 정정 (FEC)을 제공하는지 여부를 지정합니다.
usedtx, 타입은 boolean, 기본값은 false
인코더가 [RFC6716]의 섹션 2.1.9에 설명된 불연속 전송(DTX)을 사용하는지 여부를 지정합니다.

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",
};