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

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

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

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

이 문서는 2025년 8월 18일 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절에 설명되어 있습니다.

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

참고: 패킷 손실률은 인코딩이 진행되는 동안 업데이트될 수 있으며, 사용자 에이전트가 이러한 재구성을 지원하는 것이 권장됩니다.

useinbandfec, 유형은 boolean이며, 기본값은 false
[RFC6716]의 2.1.7절에 설명된 대로 인코더가 Opus 대역 내 순방향 오류 정정 (FEC)을 제공하는지 지정합니다.
usedtx, 유형은 boolean이며, 기본값은 false
[RFC6716]의 2.1.9절에 설명된 대로 인코더가 불연속 전송(DTX)을 사용하는지 지정합니다.

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