1. 소개
이 문서는 WEBRTC RTCRtpEncodingParameters
구조의 일부로 "priority" 필드를 정의하며, 가능한 값은 "very-low",
"low", "medium" 및 "high"이다.
이 기능은 원래 [WEBRTC] 명세의 일부였지만, 구현 경험이 부족해 2019년 11월에 제거되었다. 이제 이 문서의 일부가 되었다.
또한 이 명세는 RTCRtpEncodingParameters에
필드를 추가하여 로컬 우선순위 지정에는 영향을 주지 않고 DSCP 마킹을
제어하거나, 그 반대로 제어할 수 있게 한다.
2. 우선순위 및 QoS 모델
많은 애플리케이션에는 같은 데이터 유형의 여러 미디어 흐름이 있으며,
종종 일부 흐름은 다른 흐름보다 더 중요하다. WebRTC는 [rfc8835] 및 [rfc8837]에
설명된 우선순위와
서비스 품질(QoS) 프레임워크를 사용하여, 일부 네트워킹 환경에서 QoS 제공을
돕는 패킷 우선순위와 DSCP 마킹을 제공한다. 우선순위 설정은 다양한
흐름의 상대적 우선순위를 나타내는 데 사용할 수 있다. 우선순위 API는 JavaScript
애플리케이션이 priority 속성을 설정하여 특정 미디어 흐름이 애플리케이션에
얼마나 중요한지, 즉 high,
medium, low 또는 very low인지 브라우저에 알릴 수 있게 한다. 이 속성은
RTCRtpEncodingParameters
객체에서 아래에 정의된 값 중 하나로
설정된다.
3. 미디어 우선순위를 위한 확장
3.1. RTCPriorityType 열거형
enum {RTCPriorityType "very-low" ,"low" ,"medium" ,"high" };
| 열거형 설명 | |
|---|---|
very-low
| [rfc8835]의 4.1절과 4.2절을 참조하라. [rfc8831]에 정의된 "below normal"에 해당한다. |
low
| [rfc8835]의 4.1절과 4.2절을 참조하라. [rfc8831]에 정의된 "normal"에 해당한다. |
medium
| [rfc8835]의 4.1절과 4.2절을 참조하라. [rfc8831]에 정의된 "high"에 해당한다. |
high
| [rfc8835]의 4.1절과 4.2절을 참조하라. [rfc8831]에 정의된 "extra high"에 해당한다. |
이 API를 사용하는 애플리케이션은, 중요한 항목의 우선순위를 높이기보다는 덜 중요한 항목의 우선순위를 낮추는 편이 종종 더 나은 전체 사용자 경험을 제공한다는 점을 알고 있어야 한다.
3.2. RTCRtpEncodingParameters에 대한 확장
partial dictionary RTCRtpEncodingParameters {RTCPriorityType priority = "low";RTCPriorityType networkPriority ; };
priority, RTCPriorityType 유형, 기본값은"low"-
RTCRtpSender의 우선순위를 나타내며, 이는RTCRtpSender객체들 사이의 대역폭 할당에 영향을 준다. 이는 [rfc8835] 4절에 명시되어 있다. 사용자 에이전트는RTCRtpSender의 인코딩들 사이에서 대역폭을 자유롭게 하위 할당할 수 있다. -
networkPriority, RTCPriorityType 유형 -
이것은
priority와 같은 효과를 갖지만, [rfc8835] 4.2절에 설명된 것처럼 생성된 패킷의 DSCP 마킹에만 영향을 준다.networkPriority가 설정되지 않은 경우, 생성된 패킷의 DSCP 마킹은priority멤버에 의해 제어된다.
4. RTCDataChannel을 위한 확장
partial interface RTCDataChannel {readonly attribute RTCPriorityType priority ; };partial dictionary RTCDataChannelInit {RTCPriorityType priority = "low"; };
4.1. 새 RTCDataChannel 속성
priority, RTCPriorityType 유형, readonly-
priority속성은 이RTCDataChannel의 우선순위를 반환한다. 우선순위는 채널 생성 시 사용자 에이전트가 할당한다. 가져올 때 이 속성은 [[DataChannelPriority]] 슬롯의 값을 반드시 반환해야 한다.
4.2. 새 RTCDataChannelInit 멤버
priority, RTCPriorityType 유형, 기본값은"low"-
이 채널의 우선순위.
4.3. RTCDataChannel 처리 단계
다음 단계들은 DataChannel 초기화 단계에 추가된다:
DataChannel이 내부 슬롯 [[DataChannelPriority]]을 갖도록 하라.
DataChannel을 초기화하는 처리 단계에서, option 인수를 처리하는 곳에 다음 단계를 삽입한다:
-
channel.[[DataChannelPriority]]를 option의
priority멤버로 초기화한다. -
수신 DataChannel의 경우, configuration의 정수 우선순위 값에 기반해 다음 매핑에 따라 channel.[[DataChannelPriority]]를 초기화한다.
| configuration 우선순위 값 | RTCPriorityType
값
|
|---|---|
| 0에서 128까지 | very-low
|
| 129에서 256까지 | low
|
| 257에서 512까지 | medium
|
| 513 이상 | high
|
5. 보안 및 개인정보 보호 고려사항
이 API 확장은 그 자체로 새로운 정보를 노출하지 않으며, 이 확장을 통해 처리되는 어떤 데이터도 민감한 정보나 개인 식별 정보로 간주될 수 없다.
네트워크 트래픽을 모니터링하는 기능과 함께 사용하면, 이 확장을 이용해 구현이 명세의 어떤 부분을 실제로 준수하는지, 특히 우선순위 설정이 생성된 패킷의 DSCP 마킹 변경을 유발하는지 파악할 수 있다.
이 명세는 네트워크 트래픽의 우선순위 지정에 흔히 사용되는 네트워크 헤더의 일부 (DSCP 마킹)에 대한 일정한 제어를 허용한다. UA가 연결된 네트워크가 잘못 구성되었거나 과소 프로비저닝된 경우, 구성에서 예상하지 않은 DSCP 마킹이 포함된 패킷을 내보냄으로써 로컬 네트워크 환경에 영향을 줄 수 있다.
이 위험에 대한 대응책에는 적절한 구성이 포함된다. 가장 단순한 구성은 DSCP 블리칭, 즉 DSCP 마킹을 항상 0으로 만들거나 무시하는 것이다. 혼잡 제어(WebRTC에서는 항상 필수)는 대부분의 경우 네트워크 과부하를 방지한다.