Copyright © 2025 World Wide Web Consortium. W3C® liability, trademark and permissive document license rules apply.
이 명세는 MediaStreamTrack을
확장하여, 완벽한 재현에 필요한 리소스가 부족할 때 미디어를 어떻게
처리해야 하는지에 대한 사용자의 선호를 나타내는 선택적 힌트를
제공한다.
이 선택적 힌트는
MediaStreamTrack
트랙의 오디오 또는 비디오 콘텐츠를 처리하는 RTCPeerConnection
([webrtc]에 정의됨) 또는 MediaRecorder
([mediastream-recording]에 정의됨) 같은 싱크가
사용자의 선호에 적절한 처리 매개변수를 선택할 수 있게 한다.
이 절은 발행 당시의 이 문서의 상태를 설명한다. 현재 W3C 발행물 목록과 이 기술 보고서의 최신 개정판은 W3C 표준 및 초안 색인에서 찾을 수 있다.
이 문서는 웹 실시간 통신 작업 그룹이 권고안 트랙을 사용하여 작업 초안으로 발행했다.
작업 초안으로 발행되었다는 것은 W3C와 그 회원들의 승인을 의미하지 않는다.
이 문서는 초안 문서이며 언제든지 다른 문서에 의해 갱신, 대체 또는 폐기될 수 있다. 이 문서를 진행 중인 작업이 아닌 것으로 인용하는 것은 부적절하다.
이 문서는 W3C 특허 정책에 따라 운영되는 그룹이 작성했다. W3C는 이 그룹의 산출물과 관련하여 이루어진 모든 특허 공개의 공개 목록을 유지한다. 해당 페이지에는 특허를 공개하기 위한 지침도 포함되어 있다. 어떤 개인이 자신이 실제로 알고 있는 특허가 필수 청구항을 포함한다고 믿는 경우, 그 개인은 W3C 특허 정책 6절에 따라 정보를 공개해야 한다.
이 문서는 2025년 8월 18일 W3C 프로세스 문서의 적용을 받는다.
음성과 음악을 처리하는 데 사용되는 알고리즘은 크게 다르다. 음성 유형 콘텐츠를 위해 개발된 에코 제거 알고리즘은 음악에 잘 동작하지 않을 수 있으며, 잡음 억제 알고리즘은 스네어 드럼이나 그 밖의 "잡음이 있는" 콘텐츠를 제거할 수 있다. 이는 음성을 더 알아듣기 쉽게 만들지만 음악 신호에는 덜 적절하다.
비디오의 경우, 웹캠 콘텐츠는 종종 노이즈 제거가 필요하고 다운스케일되거나 높은 양자화 수준이 적용되더라도 알아볼 수 있는 경우가 많다. 텍스트 콘텐츠가 많은 프레젠테이션이나 웹페이지의 스크린캐스트 콘텐츠는 양자화 수준이 너무 높거나 콘텐츠가 다운스케일되거나 그 밖의 방식으로 흐려지면 전혀 알아볼 수 없게 된다.
미디어 콘텐츠를 자동으로 감지하지 않으면, MediaStreamTrack
소비자는 근거 있는 추측만 할 수 있다. 이 추측은
chrome.desktopCapture 같은 스크린캐스트 콘텐츠가 텍스트
콘텐츠를 포함한다고 가정하여 낮은 양자화 수준을 사용하고, 비트레이트
요구사항을 충족하기 위해 프레임을 광범위하게 버리는 것에 기반할 수
있다. 또 다른 가정은 일반 USB 비디오 장치가 웹캠 비디오를 제공하며,
더 높은 양자화 수준과 다운스케일링이 허용될 수 있다는 것이다.
보통은 적절하지만, 이러한 근거 있는 추측이 잘못되면 최적이 아닌 설정으로 이어진다. 이는 영화나 비디오 게임 스트리밍처럼 움직임이 많은 콘텐츠를 스크린캐스팅하면서 이를 텍스트로 취급할 때 높은 프레임 손실로 나타난다. 반대로 매우 상세한 콘텐츠를 일반 웹캠 비디오로 취급하면 비트레이트 요구사항을 충족하기 위해 가독성을 넘어설 정도로 양자화되거나 다운스케일될 때 콘텐츠가 지나치게 흐려진다. 이러한 불일치는 HDMI 비디오 캡처 카드가 USB 웹캠으로 보이지만 실제로는 웹페이지 텍스트를 스크린캐스트하는 경우에도 발생할 수 있다.
어떤 경우에는 웹 애플리케이션이 더 근거 있는 추측을 하거나 사용자 입력을 받아 인코딩되는 콘텐츠의 종류를 소비자에게 알릴 수 있다. 비디오 게임 콘텐츠를 스트리밍하는 웹 애플리케이션은 개별 프레임의 세부 정보를 희생하는 대신 데스크톱 캡처의 움직임을 보존할 수 있다. 음악 스튜디오 애플리케이션은 잡음 억제가 음악 트랙에서 스네어 소리를 제거하지 않도록 할 수 있다.
이러한 설정은 인코더 수준 설정을 완전히 대체하기 위한 것이 아니라, 비디오 인코더, 오디오 처리 단계 또는 더 광범위한 튜닝에 대한 폭넓은 지식을 요구하지 않는 더 단순한 힌트로 이를 보완하기 위한 것이다.
이 명세의 별도 절은 MediaStreamTrack을 처리하는 특정 구성요소에 대해 예상되는 동작을 설명한다.
비규범으로 표시된 절뿐 아니라, 이 명세의 모든 작성 지침, 다이어그램, 예제 및 참고는 비규범이다. 이 명세의 나머지는 모두 규범이다.
이 문서의 핵심 단어 MAY, MUST, SHOULD, 및 SHOULD NOT는 여기 보인 것처럼 모두 대문자로 나타날 때에만 BCP 14 [RFC2119] [RFC8174]에 설명된 대로 해석되어야 한다.
WebIDLpartial interface MediaStreamTrack {
attribute DOMString contentHint;
};
이 명세는 MediaStreamTrack을
확장하며, [GETUSERMEDIA]에 정의된
그 kind
속성을 사용한다.
각 MediaStreamTrack은
관련 애플리케이션
설정
콘텐츠 힌트를 가지며, 이는 처음에 설정되지 않았음을 의미하는
""이다.
이 애플리케이션 설정 콘텐츠 힌트는
MediaStreamTrack의
contentHint 속성에 해당하며,
웹 애플리케이션이 트랙에 포함된 콘텐츠의 유형에 대한 힌트를 제공하여
MediaStreamTrack
소비자가 이를 어떻게 처리해야 하는지 안내하는 데 사용될 수 있다.
애플리케이션 설정 콘텐츠 힌트의 유효한 값은 포함된
MediaStreamTrack의
kind에
의존한다.
contentHint를 value로 설정할 때,
MediaStreamTrack의
kind
속성이
"audio"이고, value가 "",
"speech", "speech-recognition" 또는 "music" 중 하나가 아니면,
이 단계를 중단한다.
MediaStreamTrack의
kind
속성이
"video"이고, value가 "",
"motion", "detail" 또는 "text" 중 하나가 아니면,
이 단계를 중단한다.
MediaStreamTrack의
애플리케이션 설정 콘텐츠 힌트를
value로 설정한다.
MediaStreamTrack의
콘텐츠를 처리하는 방법에 대한 결정을
그 애플리케이션 설정 콘텐츠 힌트의 새 값에 따라 조정해야 한다.
이러한 조정은 합리적으로 가능한 한 빠르게, 예를 들어 다음 몇 개의
캡처된 비디오 프레임이나 오디오 버퍼 내에서 이루어져야 한다.
contentHint를 가져올 때,
MediaStreamTrack의
애플리케이션 설정 콘텐츠 힌트를 반환한다.
애플리케이션 설정 콘텐츠 힌트의 초기값은
""이며, 이는 힌트가 제공되지 않았음을 의미한다는 점에 유의하라.
이는 포함된 콘텐츠 유형에 대한 구현의 최선의 추측으로 기본 설정되지 않는다.
오디오 콘텐츠 힌트는 MediaStreamTrack에
오디오 트랙이 포함되어 있을 때만 적용된다.
| 오디오 콘텐츠 힌트 | |
|---|---|
"" |
힌트가 제공되지 않았으며, 구현은 포함된 오디오 데이터를 어떻게 처리할지에 대해 가장 잘 알려진 추측을 해야 한다. 이는 트랙이 열린 방식이나 콘텐츠 분석을 통해 추론될 수 있다. |
"speech" |
트랙은 음성 데이터를 포함하는 것처럼 처리되어야 한다. 이 신호를 소비할 때 잡음 억제를 적용하거나 들어오는 신호의 명료도를 높이는 것이 적절할 수 있다. |
"speech-recognition" |
트랙은 기계에 의한 음성 인식을 목적으로 하는 데이터를 포함하는 것처럼 처리되어야 한다. 이 신호를 소비할 때 전사를 위해 들어오는 신호의 명료도를 높이고, 사람이 듣기 위해 사용되는 오디오 처리 구성요소를 끄는 것이 적절할 수 있다. |
"music" |
트랙은 음악 데이터를 포함하는 것처럼 처리되어야 한다. 일반적으로 이는 음성이 왜곡되는 것을 방지하기 위해 음성 데이터를 처리하는 데 사용되는 오디오 처리 구성요소를 조정하거나 끄는 것을 의미할 수 있다. |
비디오 콘텐츠 힌트는 MediaStreamTrack에
비디오 트랙이 포함되어 있을 때만 적용된다.
| 비디오 콘텐츠 힌트 | |
|---|---|
"" |
힌트가 제공되지 않았으며, 구현은 포함된 비디오 콘텐츠가 어떻게 처리되어야 하는지에 대해 가장 잘 알려진 추측을 해야 한다. 이는 예를 들어 트랙이 열린 방식이나 콘텐츠 분석을 통해 추론될 수 있다. |
"motion" |
트랙은 움직임이 중요한 비디오를 포함하는 것처럼 처리되어야 한다. 이는 보통 웹캠 비디오, 영화 또는 비디오 게임이다. 목표 비트레이트를 유지하면서 움직임을 가능한 한 잘 보존하기 위해 양자화 아티팩트와 다운스케일링은 허용될 수 있다. 낮은 비트레이트에서 타협이 필요할 때에는 가장자리 품질과 세부 정보보다 프레임 레이트를 보존하는 데 더 많은 노력이 쓰인다. |
"detail" |
트랙은 비디오 세부 정보가 특히 중요한 것처럼 처리되어야 한다. 이는 일반적으로 텍스트 콘텐츠가 있는 프레젠테이션이나 웹페이지, 회화 또는 선화에 적용된다. 이 설정은 일반적으로 부드러운 재생보다 결과로 생성되는 개별 프레임의 세부 정보에 최적화된다. 작은 텍스트나 선화를 알아볼 수 없게 만드는 양자화 또는 다운스케일링 아티팩트는 피해야 한다. |
"text" |
트랙은 비디오 세부 정보가 특히 중요하며,
뚜렷한 날카로운 가장자리와 일관된 색상 영역이 자주
나타날 수 있는 것처럼 처리되어야 한다.
이는 일반적으로 텍스트 콘텐츠가 있는 프레젠테이션이나 웹페이지에
적용된다. 이 설정은 일반적으로 부드러운 재생보다
결과로 생성되는 개별 프레임의 세부 정보에 최적화되며,
텍스트 렌더링에 최적화된 인코더 도구를 활용할 수 있다.
작은 텍스트나 선화를 알아볼 수 없게 만드는 양자화 또는
다운스케일링 아티팩트는 피해야 한다.
|
contentHint 값을 MediaStreamTrack에
설정할 때,
UA는 다음과 같이 기본값을 적용MUST한다.
"music"인
오디오 트랙의 경우, 그리고
echoCancellation, autoGainControl 및 noiseSuppression 제약에 대해서는
기본값 "false"를 적용한다."speech"인
오디오 트랙의 경우, 그리고
echoCancellation 및 autoGainControl 제약에 대해서는
기본값 "true"를 적용한다."speech-recognition"인
오디오 트랙의 경우, 그리고
echoCancellation, autoGainControl 및 noiseSuppression 제약에 대해서는
기본값 "false"를 적용한다.제약 c에 값 t로 기본값을 적용하려면, 다음 단계를 수행한다.
이후 "apply constraints" 알고리즘이 실행될 때마다, UA는 기억된 값 t가 이제 허용된 값이면 이를 선택MUST한다.
""의
contentHint 값을 설정할 때,
기억된 모든 t 값은 제거된다.
비디오를 인코딩할 때, 인코더는 여러 매개변수로 구성된다. 이 텍스트에서는 해상도, 프레임레이트 및 "인코딩 매개변수"를 특별히 언급한다. 후자는 구현 정의이지만, 결과 비디오의 품질, 인코딩에 필요한 리소스 및 비디오가 소비하는 비트레이트 모두에 영향을 줄 수 있다. 여기서는 더 높은 값이 더 나은 품질을 제공하지만 더 높은 비트레이트를 가져오는 것처럼 설명한다. 일반적으로 UA는 최적의 사용자 경험을 제공하기 위해 이들 모두를 최대화하려고 한다.
어떤 제약(대역폭, CPU)으로 인해 가장 좋은 매개변수로 인코딩할 수 없을 때, 인코더는 인코딩 매개변수를 어떻게 수정할지 선택해야 한다. 무제한 시나리오에서는 더 높은 해상도와 프레임레이트가 더 높은 품질을 가능하게 하지만, 대역폭이 제한된 경우 프레임레이트와 해상도를 줄이면 많은 경우 주어진 목표 비트레이트에서 전체 비디오 품질이 증가하도록 인코딩 매개변수를 조정할 수 있다.
이 절은 그 선택을 설명하는 용어와, API에서 그 선택을 나타내는 데 사용할 수 있는 열거형을 정의한다.
WebIDLenum RTCDegradationPreference {
"maintain-framerate",
"maintain-resolution",
"balanced",
"maintain-framerate-and-resolution"
};
| 열거형 값 | 설명 |
|---|---|
maintain-framerate |
프레임레이트를 유지하기 위해 해상도를 저하시킨다. 사용자 에이전트는 네트워크 제약 내에서 비디오 품질과 성능을 최적화하기 위해 해상도 감소를 선호SHOULD한다. |
maintain-resolution |
해상도를 유지하기 위해 프레임레이트를 저하시킨다. 사용자 에이전트는 네트워크 제약 내에서 비디오 품질과 성능을 최적화하기 위해 프레임레이트 감소를 선호SHOULD한다. |
balanced |
프레임레이트와 해상도의 균형을 저하시킨다. 사용자 에이전트는 네트워크 제약 내에서 비디오 품질과 성능을 최적화하기 위해 프레임레이트와 해상도의 균형 있는 감소를 선호 SHOULD한다. |
maintain-framerate-and-resolution |
비디오 품질과 무관하게 프레임레이트와 해상도를 유지한다. 사용자 에이전트는 품질 및 성능상의 이유로 프레임레이트나 해상도를 감소시키는 것을 선호SHOULD NOT하지만, 네트워크 및 인코더 리소스를 과도하게 사용하지 않기 위해 필요하다면 인코딩 전에 프레임을 버릴 수 MAY 있다. |
RTCRtpSender에 대해
명시적으로 나타낼 수 있도록 하는 속성이
RTCRtpSendParameters에
정의된다.
WebIDLpartial dictionary RTCRtpSendParameters {
RTCDegradationPreference degradationPreference;
};
RTCRtpSendParameters
새 멤버degradationPreference
유형
RTCDegradationPreference.
대역폭이 제한되고
RTCRtpSender가
해상도를 저하시킬지 프레임레이트를 저하시킬지
선택해야 할 때,
degradationPreference는
어느 것이 선호되는지 나타낸다.
contentHint 속성이 설정된
MediaStreamTrack을
전송하는
RTCRtpSender는,
송신자의 매개변수에 명시적인
degradationPreference
속성이 설정되어 있지 않은 한, 다음 품질 저하 선호를 사용
MUST한다.
"motion"인 비디오 트랙의 경우,
"maintain-framerate"를
사용한다.
"detail"인 비디오 트랙의 경우,
"maintain-resolution"을
사용한다.
"text"인 비디오 트랙의 경우,
"maintain-resolution"을
사용한다.
또한 인코딩 코덱이 AV1이면 "text" 모드를 위한 인코딩 도구를 활성화한다.
속성 값이 "text"인
비디오 트랙의 경우, 인코딩 코덱이 AV1이면 "text" 모드를 위한
인코딩 도구를 활성화한다.
이 명세는 사용자가 사용자 에이전트에 정보를 보낼 수 있는 API를 추가한다. 이 정보는 다른 곳으로 전달되지 않으며, 어떤 영구적인 위치에도 저장되지 않는다.
클라이언트는 이 API를 탐색함으로써 사용자 에이전트가 이 명세를 구현하는 방식에 대한 일부 정보를 얻을 수 있으며, 이는 그 구성에 대한 일부 통찰을 제공할 수 있다. 이를 제외하면, 이 API를 통해 어떤 사용자 에이전트 정보나 데이터도 클라이언트에 노출되지 않으며, 이 API는 브라우저 UI에 대한 접근, 사용자 에이전트의 보안 특성에 대한 영향 또는 임시 식별자의 생성을 허용하지 않는다.
이 API는 제1자, 제3자 또는 시크릿 컨텍스트를 구분하지 않으며, 이러한 모든 경우에서 동일하게 동작한다.
이 API의 사용을 통해 개인 식별 가능 정보나 그 밖의 민감한 정보는 처리되지 않는다.
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in:
Referenced in: