1. Introduction
This document defines a "priority" field as part of the WEBRTC RTCRtpEncodingParameters
structure, with the possible values "very-low",
"low", "medium" and "high".
This feature was originally part of the [WEBRTC] specification, but was removed in November 2019 due to lack of implementation experience. It is now part of this document.
In addition, this specification adds fields to RTCRtpEncodingParameters
that allow control over the DSCP markings without affecting local
prioritization, and vice versa.
2. Priority and QoS Model
Many applications have multiple media flows of the same data type and
often some of the flows are more important than others. WebRTC uses the
priority and Quality of Service (QoS) framework described in [RTCWEB-TRANSPORT] and [TSVWG-RTCWEB-QOS] to provide priority and
DSCP marking for packets that will help provide QoS in some networking
environments. The priority setting can be used to indicate the relative
priority of various flows. The priority API allows the JavaScript
applications to tell the browser whether a particular media flow is high,
medium, low or of very low importance to the application by setting the priority
property of RTCRtpEncodingParameters
objects to one of the
values defined below.
3. Extensions for media priority
3.1. RTCPriorityType Enum
enum {
RTCPriorityType "very-low" ,"low" ,"medium" ,"high" };
Enumeration description | |
---|---|
very-low
| See [RTCWEB-TRANSPORT], Sections 4.1 and 4.2. Corresponds to "below normal" as defined in [RTCWEB-DATA]. |
low
| See [RTCWEB-TRANSPORT], Sections 4.1 and 4.2. Corresponds to "normal" as defined in [RTCWEB-DATA]. |
medium
| See [RTCWEB-TRANSPORT], Sections 4.1 and 4.2. Corresponds to "high" as defined in [RTCWEB-DATA]. |
high
| See [RTCWEB-TRANSPORT], Sections 4.1 and 4.2. Corresponds to "extra high" as defined in [RTCWEB-DATA]. |
Applications that use this API should be aware that often better overall user experience is obtained by lowering the priority of things that are not as important rather than raising the priority of the things that are.
3.2. Extension to RTCRtpEncodingParameters
partial dictionary RTCRtpEncodingParameters {RTCPriorityType priority ;RTCPriorityType networkPriority ; };
priority
of type , of type RTCPriorityTypeRTCPriorityType
, defaulting to"low"
-
Indicates the priority of an
RTCRtpSender
, which influences the bandwidth allocation amongRTCRtpSender
objects. It is specified in [RTCWEB-TRANSPORT], Section 4. The user agent is free to sub-allocate bandwidth between the encodings of anRTCRtpSender
.
networkPriority
has the same
effect as priority
, except that it only affects the DSCP markings of
the generated packets, as described in [RTCWEB-TRANSPORT] section 4.2.
If networkPriority
is unset, the DSCP markings of the generated
packets are controlled by the priority
member.
4. Extensions for RTCDataChannel
partial interface RTCDataChannel {readonly attribute RTCPriorityType priority ; };partial dictionary RTCDataChannelInit {RTCPriorityType priority ; };
4.1. New RTCDataChannel attribute
priority
of type , of type RTCPriorityType, readonlyRTCPriorityType
, readonly-
The
priority
attribute returns the priority for thisRTCDataChannel
. The priority is assigned by the user agent at channel creation time. On getting, the attribute MUST return the value of the [[DataChannelPriority]] slot.
4.2. New RTCDataChannelInit member
priority
of type , of type RTCPriorityTypeRTCPriorityType
, defaulting tolow
-
Priority of this channel.
4.3. RTCDataChannel processing steps
The following steps are added to the initialization steps for DataChannel:
Let DataChannel have an internal slot [[DataChannelPriority]].
In the processing steps for initializing a DataChannel, insert the following step into processing the option argument:
-
Initialize channel.[[DataChannelPriority]] to option’s
priority
member. -
For an incoming DataChannel, initialize channel.[[DataChannelPriority]] based on the integer priority value in configuration, according to the following mapping.
configuration priority value | RTCPriorityType value
|
---|---|
0 to 128 | very-low
|
129 to 256 | low
|
257 to 512 | medium
|
513 and greater | high
|