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 저장소.
이슈 제출.
버전 이력:
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 GroupNote 트랙을 사용하여 Group Note Draft로 발행했다.

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

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

W3C Patent Policy는 이 문서에 대해 어떤 라이선스 요구사항이나 약속도 부과하지 않는다.

이 문서는 2025년 8월 18일 W3C Process Document의 적용을 받는다.

1. 완전한 코덱 문자열

코덱 문자열"opus"이다.

2. EncodedAudioChunk 데이터

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

비트스트림이 opus 형식인 경우, EncodedAudioChunk3절[OPUS]에 설명된 Opus 패킷이어야 한다.

비트스트림이 ogg 형식인 경우, EncodedAudioChunk3절[OPUS-IN-OGG]에 설명된 오디오 데이터 패킷이어야 한다.

3. AudioDecoderConfig description

description[OPUS-IN-OGG]의 5.1절에 설명된 Identification Header로 선택적으로 설정될 수 있다.

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가 지정되어 있고 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
[RFC6716]의 2.1.9절에 설명된 대로 인코더의 계산 복잡도를 구성한다. 유효 범위는 0부터 10까지이며, 10은 가장 높은 복잡도를 나타낸다. 값이 지정되지 않은 경우 기본값은 플랫폼별로 다르다: User Agent는 모바일 플랫폼에 기본값 5를 설정하고, 그 밖의 모든 플랫폼에는 기본값 9를 설정하는 것이 SHOULD다.
packetlossperc, 타입 unsigned long, 기본값은 0
인코더가 예상하는 패킷 손실 비율을 구성한다. 유효 범위는 0부터 100까지이다.

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

useinbandfec, 타입 boolean, 기본값은 false
[RFC6716]의 2.1.7절에 설명된 것처럼 인코더가 Opus in-band Forward Error Correction (FEC)을 제공하는지 여부를 지정한다.
usedtx, 타입 boolean, 기본값은 false
[RFC6716]의 2.1.9절에 설명된 것처럼 인코더가 Discontinuous Transmission (DTX)을 사용하는지 여부를 지정한다.

5.2. OpusBitstreamFormat

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

OpusBitstreamFormat은 인코딩된 오디오 스트림을 디코딩하는 데 extra-data가 필요한지 여부를 결정한다.

opus
인코딩된 오디오 스트림을 디코딩하는 데 metadata가 필요하지 않다.
ogg
인코딩된 오디오 스트림의 metadata는 구성 시 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]

이 명세의 예제는 “예를 들어”라는 말로 도입되거나, 규범 텍스트와 구분되도록 class="example"으로 표시된다. 다음과 같다.

이는 정보 제공용 예제의 예이다.

정보 제공용 참고는 “참고”라는 단어로 시작하며, 규범 텍스트와 구분되도록 class="note"로 표시된다. 다음과 같다.

참고, 이는 정보 제공용 참고이다.

색인

이 명세가 정의하는 용어

참조로 정의되는 용어

참고문헌

규범적 참고문헌

[RFC2119]
S. Bradner. RFC에서 요구사항 수준을 나타내기 위한 핵심어. 1997년 3월. Best Current Practice. 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. Living Standard. URL: https://webidl.spec.whatwg.org/

비규범적 참고문헌

[OPUS]
RFC 6716: Opus Audio Codec의 정의. 2012년 9월. URL: https://datatracker.ietf.org/doc/html/rfc6716
[OPUS-IN-OGG]
RFC 7845: Opus Audio Codec을 위한 Ogg 캡슐화. 2016년 4월. URL: https://datatracker.ietf.org/doc/html/rfc7845
[RFC6716]
JM. Valin; K. Vos; T. Terriberry. Opus Audio Codec의 정의. 2012년 9월. Proposed Standard. URL: https://www.rfc-editor.org/rfc/rfc6716
[WEBCODECS-CODEC-REGISTRY]
Paul Adenot; Eugene Zemtsov. WebCodecs Codec Registry. 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",
};