RFC 8861
Sending Multiple RTP Streams in a Single RTP Session: Grouping RTP Control Protocol (RTCP) Reception Statistics and Other Feedback
RFC 8861: Sending Multiple RTP Streams in a Single RTP Session: Grouping RTP Control Protocol (RTCP) Reception Statistics and Other Feedback ๐ (Part 1 of 5)
- Stream: Internet Engineering Task Force (IETF)
- Request for Comments: 8861
- Category: Standards Track
- ISSN: 2070-1721
- Date: January 2021
- Authors: J. Lennox (8x8 / Jitsi), M. Westerlund (Ericsson), Q. Wu (Huawei), and C. Perkins (University of Glasgow) ๐
- Obsoletes / Updates: The header doesn't list anything this one obsoletes or updates. ๐ง
Abstract ๐ฆ
RTP lets multiple RTP streams go out in a single session, but every Synchronization Source (SSRC) has to send RTP Control Protocol (RTCP) reception quality reports for every other SSRC in that session. So the number of RTCP reception reports grows with the number of SSRCs instead of the number of endpoints ๐ญ. Most of those reports are usually pointless, because all the SSRCs from one endpoint are normally co-located and see the same reception quality. This memo defines a Reporting Group extension to RTCP that cuts down the reporting overhead in those situations โจ.
Status of This Memo ๐
This is an Internet Standards Track document.
This document is a product of the Internet Engineering Task Force (IETF). It represents the consensus of the IETF community. It has received public review and has been approved for publication by the Internet Engineering Steering Group (IESG). Further information on Internet Standards is available in Section 2 of RFC 7841.
Information about the current status of this document, any errata, and how to give feedback on it can be found at https://www.rfc-editor.org/info/rfc8861.
Copyright Notice ยฉ
Copyright (c) 2021 IETF Trust and the persons identified as the document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (https://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.
Table of Contents ๐๏ธ
1. Introduction
2. Terminology
3. RTCP Reporting Groups
3.1. Semantics and Behavior of RTCP Reporting Groups
3.2. Identifying Members of an RTCP Reporting Group
3.2.1. Definition and Use of the RTCP RGRP SDES Item
3.2.2. Definition and Use of the RTCP RGRS Packet
3.3. Interactions with the RTP/AVPF Feedback Profile
3.4. Interactions with RTCP Extended Report (XR) Packets
3.5. Middlebox Considerations
3.6. SDP Signaling for Reporting Groups
4. Properties of RTCP Reporting Groups
4.1. Bandwidth Benefits of RTCP Reporting Groups
4.2. Compatibility of RTCP Reporting Groups
5. Security Considerations
6. IANA Considerations
7. References
7.1. Normative References
7.2. Informative References
Authors' Addresses
1. Introduction โจ
The Real-time Transport Protocol (RTP) [RFC3550] is a protocol for group communication, and it's built for multiparty multimedia sessions ๐ฅ. One RTP session can have several participants sending data at once, and it can also support participants who each send multiple simultaneous RTP streams. Examples of the latter might include a participant with multiple cameras who chooses to send multiple views of a scene, or a participant that sends audio and video flows multiplexed in a single RTP session. Rules for handling RTP sessions containing multiple RTP streams are described in [RFC3550], with some clarifications in [RFC8108].
An RTP endpoint will have one or more Synchronization Sources (SSRCs) ๐. It will have at least one RTP stream, and therefore at least one SSRC, for each media source it sends. It might use multiple SSRCs per media source when using media scalability features [RFC6190], forward error correction, RTP retransmission [RFC4588], or similar mechanisms. An endpoint that isn't sending any RTP streams will still have at least one SSRC to use for reporting and any feedback messages. Each SSRC has to send RTP Control Protocol (RTCP) Sender Reports (SRs) for the RTP packets it sends, and Receiver Reports (RRs) for the traffic it receives. (SRs and RRs are described in [RFC3550].) That means every SSRC will send RTCP packets to report on every other SSRC ๐. The rule is simple, but it can get pretty inefficient for endpoints that send large numbers of RTP streams in a single RTP session.
Picture a session with ten participants, each sending three media sources, with each media source on its own RTP stream. That's 30 SSRCs, and each of those 30 SSRCs sends an RTCP SR/RR packet (containing several report blocks) every reporting interval, because each one reports on all the others ๐ญ. But the three SSRCs belonging to each participant are usually co-located, so they see identical reception quality. If there were a way to say that several SSRCs are co-located and see the same reception quality, then two-thirds of those RTCP reports could be suppressed ๐คฏ. That would let the remaining RTCP reports go out more often while staying within the same RTCP bandwidth fraction.
This memo defines that kind of RTCP extension: RTCP Reporting Groups ๐ฆ. It's used to indicate which SSRCs come from the same endpoint and therefore have identical reception quality, which lets endpoints suppress the RTCP reception quality reports that aren't needed.
2. Terminology ๐
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all capitals, as shown here. ๐ซถ
3. RTCP Reporting Groups ๐ง
An RTCP Reporting Group is a set of SSRCs that are co-located at a single endpoint (which could be an end host or a middlebox) in an RTP session. Because they're co-located, every SSRC in the RTCP Reporting Group has an identical view of the network conditions and sees the same lost packets, jitter, and so on ๐. That means a single representative can send RTCP reception quality reports on behalf of the rest of the Reporting Group. That cuts down the number of RTCP packets that need to be sent without losing any information ๐ .
3.1. Semantics and Behavior of RTCP Reporting Groups ๐
A group of co-located SSRCs that see identical network conditions can form an RTCP Reporting Group. If Reporting Groups are in use, an RTP endpoint with multiple SSRCs MAY put those SSRCs into a Reporting Group if their view of the network is identical, i.e., if they report on traffic received at the same interface of an RTP endpoint. SSRCs with different views of the network MUST NOT be put into the same Reporting Group. ๐ซ
An endpoint that has combined its SSRCs into an RTCP Reporting Group will choose one (or a subset) of those SSRCs to act as "reporting source(s)" for that RTCP Reporting Group. A reporting source will send RTCP SR/RR reception quality reports on behalf of the other members of the RTCP Reporting Group. A reporting source MUST suppress the RTCP SR/RR reports that relate to other members of the Reporting Group and only report on remote SSRCs. The other members (non-reporting sources) of the RTCP Reporting Group will suppress their RTCP reception quality reports. Instead, they'll send an RTCP Reporting Group Reporting Sources (RGRS) packet (see Section 3.2.2) to show that they're part of an RTCP Reporting Group and to give the SSRCs of the reporting sources ๐.
If there are large numbers of remote SSRCs in the RTP session, the reception quality reports from the reporting source might grow too big to fit into a single compound RTCP packet. That would force the reporting source to use a round-robin policy to decide which remote SSRCs go into each compound RTCP packet, which lowers how often each SSRC gets reported on ๐ฌ. To avoid this, in sessions with large numbers of remote SSRCs, an RTCP Reporting Group MAY use more than one reporting source. If several SSRCs are acting as reporting sources for an RTCP Reporting Group, then each reporting source MUST have non-overlapping sets of remote SSRCs it reports on. ๐งฉ
An endpoint MUST NOT create an RTCP Reporting Group that comprises only a single local SSRC (i.e., an RTCP Reporting Group where the reporting source is the only member of the group), unless it is anticipated that the group might have additional SSRCs added to it in the future. ๐ โโ๏ธ
If a reporting source leaves the RTP session (i.e., if it sends an RTCP BYE packet, or it leaves the session without sending a BYE according to the rules of [RFC3550], Section 6.3.7), the remaining members of the RTCP Reporting Group MUST (a) have another reporting source -- if one exists -- report on the remote SSRCs that the leaving SSRC had reported on, (b) choose a new reporting source, or (c) disband the RTCP Reporting Group and begin sending reception quality reports per [RFC3550] and [RFC8108]. ๐
The RTCP timing rules assign different bandwidth fractions to senders and receivers, which lets senders transmit RTCP reception quality reports more often than receivers ๐ฐ๏ธ. If a reporting source in an RTCP Reporting Group is a receiver, but one or more non-reporting SSRCs in the RTCP Reporting Group are senders, then the endpoint MAY treat the reporting source as a sender for the purpose of RTCP bandwidth allocation, increasing its RTCP bandwidth allocation. It must do this only if it also treats one of the senders as if it were a receiver and makes the corresponding reduction in RTCP bandwidth for that SSRC. However, the application needs to consider the impact on the frequency of transmitting of the synchronization information included in RTCP SRs. โ ๏ธ
3.2. Identifying Members of an RTCP Reporting Group ๐
When RTCP Reporting Groups are in use, the other SSRCs in the RTP session need to be able to identify which SSRCs are members of an RTCP Reporting Group ๐ต๏ธโโ๏ธ. Two RTCP extensions are defined to support this. The RTCP Reporting Group (RGRP) Source Description (SDES) item is used by the reporting source(s) to identify an RTCP Reporting Group. The RTCP RGRS packet is used by other members of an RTCP Reporting Group to identify the reporting source(s). ๐
3.2.1. Definition and Use of the RTCP RGRP SDES Item
Okay bestie, this is the item that gives a Reporting Group its own ID card ๐ชชโจ. The whole point is to make sure two things stay true: (1) the Reporting Group and its member SSRCs can be correctly linked up when there are multiple reporting sources, and (2) a reporting SSRC can still find its right Reporting Group even if an SSRC collision happens ๐ .
This document defines the RTCP RGRP SDES item. The RTCP RGRP SDES item MUST be sent by the reporting sources in a Reporting Group, and it MUST NOT be sent by other members of the Reporting Group or by SSRCs that aren't members of any RTCP Reporting Group ๐ซ. To be specific, every reporting source in an RTCP Reporting Group MUST include an RTCP SDES packet containing an RGRP item in every compound RTCP packet where it sends an RR or SR packet. In other words, that's every RTCP packet it sends, unless Reduced-Size RTCP [RFC5506] is in use ๐.
Syntactically, the RTCP RGRP SDES item is basically a twin of the RTCP SDES CNAME item [RFC7022] ๐ฏโโ๏ธ. The only difference is that the SDES item type field MUST have the value RGRP=11 instead of CNAME=1. The value of the RTCP RGRP SDES item MUST be picked with the same worries about global uniqueness and the same privacy considerations as the RTCP SDES CNAME ๐. And the value MUST stay stable for the whole lifetime of the Reporting Group ๐ฆ. That's true even if some or all of the reporting sources change their SSRC because of collisions, or if the set of reporting sources changes. The ID doesn't budge, no matter what ๐.
An RTP mixer or translator that forwards RTCP SR or RR packets from members of a Reporting Group MUST also forward the matching RTCP RGRP SDES items, even if it normally strips SDES items other than the CNAME item ๐ง.
3.2.2. Definition and Use of the RTCP RGRS Packet
A brand new RTCP packet type is defined so the members of an RTCP Reporting Group can name the reporting sources for their group ๐ฃ. This is huge, because it lets everyone in the RTP session tell apart two very different situations ๐. One is an SSRC sending empty RTCP reception reports because it's a member of a Reporting Group. The other is an SSRC sending empty RTCP reception reports because it isn't receiving any traffic at all. It also spells out exactly who the reporting sources are, so other members of the RTP session can (1) know which SSRCs are acting as the reporting sources for an RTCP Reporting Group and (2) notice if RTCP packets from any of those reporting sources are going missing ๐ต๏ธโโ๏ธ.
The RTCP RGRS packet looks like this, and it's made of the fixed RTCP header (which tells you the packet type and length), the SSRC of whoever sent the packet, and a list of reporting sources for the Reporting Group that the sender belongs to ๐งฉ:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P| SC | PT=RGRS(212) | length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| SSRC of packet sender |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
: List of SSRC(s) for the Reporting Source(s) :
: ... :
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Here's what each field means ๐:
- version (V): a 2-bit unsigned integer that says which RTP version it is. The current RTP version is
2โ๏ธ. - padding (P): 1 bit. If it's set, the packet has extra padding octets tacked on the end. Those aren't control information, but they do count toward the length field. See [RFC3550] ๐ฆ.
- Source Count (SC): a 5-bit unsigned integer that tells you how many reporting source SSRCs are in this packet. Since an RTCP RGRS packet MUST NOT be sent by reporting sources, every SSRC on the list will be different from the SSRC of the packet sender ๐ โโ๏ธ. Every RTCP RGRS packet MUST have at least one reporting source SSRC in it.
- Payload type (PT): an 8-bit unsigned integer that identifies the packet as an RTCP RGRS packet. The RGRS value is
212๐ข. - Length: a 16-bit unsigned integer. It's the length of the packet in 32-bit words minus one, including the header and any padding. This lines up with how the length field works in RTCP SRs and RRs [RFC3550] ๐. Since every RTCP RGRS packet has at least one reporting source SSRC, the length will always be
2or greater. - SSRC of packet sender: 32 bits holding the SSRC of whoever sent this packet ๐ชช.
- List of SSRCs for the Reporting Source(s): a variable-length list (the SC header field tells you how many entries) of 32-bit SSRC values. These are the reporting sources for the Reporting Group the packet sender belongs to ๐ธ.
Every source in an RTCP Reporting Group that isn't a reporting source MUST include an RTCP RGRS packet in every compound RTCP packet where it sends an RR or SR packet. Again, that's every RTCP packet it sends, unless Reduced-Size RTCP [RFC5506] is in use ๐ซถ. Each RTCP RGRS packet MUST contain the SSRC identifier of at least one reporting source. And if a Reporting Group has more reporting sources than can fit into one RTCP RGRS packet, the members of that group MUST send the reporting source SSRCs in a round-robin fashion across consecutive RTCP RGRS packets. That way, every reporting source's SSRC gets included over the course of several RTCP reporting intervals ๐โจ.
An RTP mixer or translator that forwards RTCP SR or RR packets from members of a Reporting Group MUST also forward the corresponding RGRS RTCP packets ๐. And if it rewrites the SSRC values of the packets it forwards, it MUST make the matching changes to the RTCP RGRS packets too ๐ ๏ธ.
3.3. Interactions with the RTP/AVPF Feedback Profile
Okay, so the RTP/AVPF Feedback Profile [RFC4585] lets SSRCs send rapid RTCP feedback requests and codec control messages โก. If that profile has been negotiated in an RTP session, members of an RTCP Reporting Group can send rapid RTCP feedback and codec control messages. They follow [RFC5104], they follow [RFC4585] as updated by Section 5.4 of [RFC8108], and they also follow the considerations below ๐.
Here's the thing: all the members of an RTCP Reporting Group see identical network conditions ๐. So you might think it doesn't matter which SSRC in the group sends the RTP/AVPF feedback or codec control messages. But that's not always the case ๐ โโ๏ธ. Sometimes the sender of the feedback or codec control message has semantic importance. Or maybe only some of the members want to send RTP/AVPF feedback or a codec control message in response to a particular event ๐ฏ. For example, an RTP video sender might decide to treat packet loss feedback from SSRCs known to be audio receivers with less urgency than feedback from video receivers when it picks which packets to retransmit ๐ฅ. And a multimedia receiver using Reporting Groups might want to pick its outgoing SSRC for feedback packets so that it reflects this ๐.
So each member of an RTCP Reporting Group SHOULD send its RTP/AVPF feedback and codec control messages independently of the other members, so it respects the semantic meaning of the message sender ๐ซถ. The suppression rules of [RFC4585] make sure that only a single copy of each feedback packet is (typically) generated, even when several members of a Reporting Group send the same feedback ๐งน. Now, if an endpoint knows that several members of its RTCP Reporting Group will be sending identical feedback, and the sender of that feedback isn't semantically important, that endpoint MAY choose to send all of its feedback from the reporting source. It can then deterministically suppress the feedback packets generated by the other sources in the Reporting Group ๐.
Important note, bestie ๐จ: the RTP/AVPF timing rules operate on a per-SSRC basis. So if you use a single reporting source to send all the feedback for a Reporting Group, you're limiting the total feedback to what one SSRC can send ๐ข. If that limit becomes a problem, the Reporting Group can let each of its members send its own feedback using its own SSRC ๐.
If the RTP/AVPF feedback messages or codec control requests are sent as compound RTCP packets, then those compound RTCP packets MUST include either an RTCP RGRS packet or an RTCP RGRP SDES item. Which one depends on whether they're sent by the reporting source or by a non-reporting source in the RTCP Reporting Group ๐ง . The contents of noncompound RTCP feedback or codec control messages aren't affected by using RTCP Reporting Groups ๐ .
3.4. Interactions with RTCP Extended Report (XR) Packets
When you use RTCP Extended Report (XR) packets [RFC3611] with RTCP Reporting Groups, it's RECOMMENDED that the reporting source is the one that sends the RTCP XR packets ๐. If there are multiple reporting sources in use, the reporting source that sends the SR/RR packets relating to a particular remote SSRC SHOULD send the RTCP XR reports about that SSRC ๐ฏ. The reason is that people commonly combine RTCP XR metrics with the regular report block to really understand what's going on ๐ง. If those blocks arrive in different compound packets, their value drops, because the measuring intervals aren't synchronized in that case โฐ.
Some RTCP XR report blocks are specific to particular types of media, so they might only be relevant to some members of a Reporting Group ๐ฌ. For example, it makes zero sense for an SSRC that's receiving video to send a Voice over IP (VoIP) metric RTCP XR report block ๐. Media-specific RTCP XR report blocks like these MUST be sent by the SSRC they're relevant to, and they MUST NOT be included in the common report sent by the reporting source ๐ซ. This might mean some SSRCs send RTCP XR packets in compound RTCP packets that contain an empty RTCP SR/RR packet, and that the time period covered by the RTCP XR packet is different from the one covered by the RTCP SR/RR packet ๐ . If it's important for the RTCP XR packet and the RTCP SR/RR packet to cover the same time period, then that source SHOULD be removed from the RTCP Reporting Group, and standard RTCP packets should be sent instead ๐๐.
3.5. Middlebox Considerations ๐
Okay so middleboxes are a whole thing, bestie. Lots of different types get used with RTP ๐ . RTCP Reporting Groups are potentially relevant to the types of RTP middleboxes that have their own SSRCs and generate RTCP reports for the traffic they receive. RTP middleboxes that don't have their own SSRC and don't send RTCP reports on the traffic they receive can't use the RTCP Reporting Group extension, since they generate no RTCP reports to that group. Not me telling them they can't come to the party ๐
An RTP middlebox that has several SSRCs of its own can use the RTCP Reporting Group extension to group the RTCP reports it generates. This can happen, for example, if a middlebox is acting as an RTP mixer for both audio and video flows that are multiplexed onto a single RTP session. The middlebox has one SSRC for the audio mixer and one for the video mixer part, and it wants to avoid cross-reporting between audio and video. Main character energy โจ
A middlebox cannot use the RTCP Reporting Group extension to group RTCP packets from the SSRCs that it is forwarding. It can, however, group the RTCP packets from the SSRCs it is forwarding into compound RTCP packets, following the rules in Section 6.1 of [RFC3550] and Section 5.3 of [RFC8108]. If the middlebox is using RTCP Reporting Groups for its own SSRCs, it MAY include RTCP packets from the SSRCs that it is forwarding as part of the compound RTCP packets its reporting source generates ๐ง
A middlebox that forwards RTCP SR or RR packets sent by members of a Reporting Group MUST forward the corresponding RTCP RGRP SDES items, as described in Section 3.2.1. It also MUST forward the corresponding RTCP RGRS packets, as described in Section 3.2.2. Failure to forward these packets can cause compatibility problems, as described in Section 4.2. Bestie, don't skip these. It's giving broken ๐ญ
If a middlebox rewrites SSRC values in the RTP and RTCP packets that it is forwarding, then it MUST make the corresponding changes in RTCP SDES packets containing RGRP items and in RTCP RGRS packets. That way they can still be associated with the rewritten SSRCs ๐ฅ
3.6. SDP Signaling for Reporting Groups ๐ฆ
This document defines the a=rtcp-rgrp Session Description Protocol (SDP) [RFC4566] attribute. It tells everyone whether the session participant is capable of supporting RTCP Reporting Groups, for applications that use SDP to configure RTP sessions. It's a property attribute, so it takes no value. The multiplexing category [RFC8859] is IDENTICAL, since the functionality applies at the RTP session level. A participant that proposes the use of RTCP Reporting Groups SHALL itself support the reception of RTCP Reporting Groups. Lowkey the most important rule here ๐ซถ The formal definition of this attribute is below:
Name: rtcp-rgrp
Value: None
Usage Level: session, media
Charset Dependent: no
Example: a=rtcp-rgrp
When using SDP Offer/Answer [RFC3264], these are the procedures to follow:
Generating the initial SDP offer: If the offerer supports the RTCP Reporting Group extensions and is willing to accept RTCP packets containing those extensions, then it MUST include an "a=rtcp-rgrp" attribute in the initial offer. If the offerer does not support RTCP Reporting Group extensions, or is not willing to accept RTCP packets containing those extensions, then it MUST NOT include the "a=rtcp-rgrp" attribute in the offer. ๐
Generating the SDP answer: If the SDP offer contains an "a=rtcp-rgrp" attribute, and if the answerer supports RTCP Reporting Groups and is willing to receive RTCP packets using the RTCP Reporting Group extensions, then the answerer MAY include an "a=rtcp-rgrp" attribute in the answer and MAY send RTCP packets containing the RTCP Reporting Group extensions. If the offer does not contain an "a=rtcp-rgrp" attribute, or if the offer does contain one but the answerer does not wish to accept RTCP packets using the RTCP Reporting Group extensions, then the answer MUST NOT include an "a=rtcp-rgrp" attribute. Choice is yours, but follow the rules ๐
Offerer processing of the SDP answer: If the SDP answer contains an "a=rtcp-rgrp" attribute and the corresponding offer also contained an "a=rtcp-rgrp" attribute, then the offerer MUST be prepared to accept and process RTCP packets that contain the Reporting Group extensions, and MAY send RTCP packets that contain the Reporting Group extensions. If the SDP answer contains an "a=rtcp-rgrp" attribute but the corresponding offer did not contain the "a=rtcp-rgrp" attribute, then the offerer MUST reject the call. If the SDP answer does not contain an "a=rtcp-rgrp" attribute, then the offerer MUST NOT send packets containing the RTCP Reporting Group extensions, and does not need to process packets containing the RTCP Reporting Group extensions. Okay the call-rejection part is serious ๐
In declarative usage of SDP, such as the Real-Time Streaming Protocol (RTSP) [RFC7826] and the Session Announcement Protocol (SAP) [RFC2974], the presence of the attribute indicates that the session participant MAY use RTCP Reporting Groups in its RTCP transmissions. An implementation that doesn't explicitly support RTCP Reporting Groups MAY join an RTP session, as long as it has been verified that the implementation doesn't suffer from the problems discussed in Section 4.2. Verify first, then vibe ๐ธ
4. Properties of RTCP Reporting Groups โจ
This section is where we talk about the actual vibes: what the resulting properties are (i.e., resulting effects or impacts) as related to the design specified in Section 3. The content of this section is non-normative, so think of it as the tea, not the rules ๐
4.1. Bandwidth Benefits of RTCP Reporting Groups ๐
To understand the benefits of RTCP Reporting Groups, consider a scenario in which the two endpoints in a session each have a hundred sources, with eight of each sending within any given reporting interval. Picture it bestie, it's a lot of voices ๐
For ease of analysis, we can make the simplifying approximation that the duration of the RTCP reporting interval is equal to the total size of the RTCP packets sent during an RTCP interval, divided by the RTCP bandwidth. (This will be approximately true in scenarios where the bandwidth is not so high that the minimum RTCP interval is reached.) To simplify even more, we can assume that RTCP senders are following the recommendations regarding compound RTCP packets in [RFC8108]. That means the per-packet transport-layer overhead will be small relative to the RTCP data. So only the actual RTCP data itself needs to be considered ๐งฎ
In a report interval in this scenario, there will, as a baseline, be 200 SDES packets, 184 RR packets, and 16 SR packets. This amounts to approximately 6.5 KB of RTCP packets per report interval, assuming 16-byte CNAMEs and no other SDES information. Tiny little numbers, but watch what happens next ๐
Using the original "everyone reports on every sender" feedback rules [RFC3550], each of the 184 receivers will send 16 report blocks, and each of the 16 senders will send 15. This amounts to approximately 76 KB of report block traffic per interval, which means 92% of RTCP traffic consists of report blocks. Whew, that's a lot of drama ๐ญ
If Reporting Groups are used, however, there is only 0.4 KB of reports per interval, with no loss of useful information. Additionally, there will be (assuming 16-byte RGRPs and a single reporting source per Reporting Group) an additional 2.4 KB per cycle of RTCP RGRP SDES items and RGRS packets. Put another way, the unmodified reporting interval per [RFC3550] is approximately 9 times longer than if Reporting Groups are in use. Way less noise, same info, iconic ๐ฆ
4.2. Compatibility of RTCP Reporting Groups ๐
The RTCP traffic generated by receivers using RTCP Reporting Groups might look, to observers who don't know about these semantics, like it's coming from receivers who are experiencing a network disconnection. That's because the non-reporting sources appear not to be receiving a given sender at all ๐ฌ
This could be a potentially critical problem for a sender using RTCP for congestion control. Such a sender might think it's sending so much traffic that it's causing complete congestion collapse. Yikes, not the vibe we want ๐
However, reading the session statistics that way would require a fairly sophisticated RTCP analysis. Any receiver of RTCP statistics who is just interested in information about itself needs to be prepared for the possibility that any given reception report might not contain information about a specific media source. That's because reception reports in large conferences can be round-robined, so don't panic if your source isn't in there ๐
Thus, the extent to which such backward-compatibility issues would actually cause trouble in practice is unclear. So it's not confirmed drama, just a maybe ๐คทโโ๏ธ
5. Security Considerations ๐โจ
Okay bestie, security time, and it's giving serious, so we're being careful ๐ . The security considerations of [RFC3550] and [RFC8108] apply. If the RTP/AVPF profile is in use, the security considerations of [RFC4585] also apply, plus [RFC5104] if you're using it ๐. If RTCP XR is used, the security considerations of [RFC3611] apply too, including whatever is said about the XR report blocks you're actually using ๐.
The RTCP RGRP SDES item can be tampered with unless integrity protection is in place ๐ฌ. If someone changes its length field, parsing of the RTCP packet it lives in fails. Depending on the implementation, parsing the whole compound RTCP packet can fail as well, so the entire packet gets thrown out ๐. If someone changes its value, the receiver thinks the sender belongs to a different RTCP Reporting Group. That can create an inconsistency when the RGRS reports the source as being in the same Reporting Group as another source that has a different Reporting Group identifier ๐. It's really hard to predict exactly what that inconsistency would do to a receiver. One case: when congestion control or other adaptation mechanisms are in use, an inconsistent report can make a media sender lower its bitrate ๐. Still, directly modifying the RR or a feedback message itself would be a more efficient attack, and it would cost the attacker about the same effort ๐คทโโ๏ธ.
The new RGRS RTCP packet type is very simple, but it's not magically safe โจ. The common RTCP packet type header has the same security risks as earlier RTCP packet types. Errors or changes to the length field can make the full compound packet fail header validation (see Appendix A.2 of [RFC3550]), so the whole compound RTCP packet gets discarded ๐๏ธ. Changing the SC field or the P field would cause an inconsistency when the packet is processed, which likely gets it classified as invalid. Changing the PT field makes the packet get read under some other packet type's rules. The result might be more or less predictable, but it would be specific to that packet type ๐งฉ. Changing the "SSRC of packet sender" field attributes the packet to a different sender, so a receiver would believe the Reporting Group also applies to that SSRC, if it exists. If that SSRC doesn't exist, then unless matching changes are also made to an SR/RR packet and an SDES packet, the RTCP packet SHOULD be discarded ๐ซ. If someone makes consistent changes everywhere, this could become part of a resource exhaustion attack on a receiver implementation ๐ฑ. Changing the "List of SSRCs for the Reporting Source(s)" field alters which SSRC the receiver expects to report on behalf of this SSRC. If that SSRC exists, this could change the Reporting Group used for it. A switch to a Reporting Group that belongs to another endpoint is likely detectable, though, because the SSRC of the packet sender's endpoint information, transport addresses, SDES CNAME, and so on wouldn't match the corresponding information from the Reporting Group it points to ๐ต๏ธโโ๏ธ.
In general, the Reporting Group opens the door to limited-impact attacks on endpoints ๐ธ. The biggest deal from a deliberate attack would be making information get discarded or become inconsistent, including throwing away every RTCP packet that was modified. That leaves any receiver entity short on information, which could mean it stops counting the endpoint as part of the session ๐ญ.
To protect against these attacks from external, non-trusted entities, integrity and source authentication SHOULD be applied. For example, you can use the Secure Real-time Transport Protocol (SRTP) [RFC3711] with proper key management. Other options exist too, as discussed in "Options for Securing RTP Sessions" [RFC7201] ๐.
The Reporting Group Identifier has properties that could affect privacy ๐ซฃ. If it were generated in a way that makes it long-term stable or predictable, it could be used to track a particular endpoint. So it is RECOMMENDED that it be generated as a short-term persistent RGRP, following the rules for short-term persistent CNAMEs in [RFC7022] ๐ง. The rest of the information revealed, i.e., the SSRCs, the size of the Reporting Group, and the number of reporting sources in a Reporting Group, is less sensitive. The SSRCs and the communication would be revealed without this extension anyway. Encrypting the Reporting Group extensions keeps the confidentiality of the SSRC values, but those values can still be revealed if SRTP [RFC3711] is used. The size of the Reporting Groups and the number of reporting sources are likely determinable from analysing the packet pattern and sizes too, but this information appears to have limited value ๐ฆ.
6. IANA Considerations ๐
IANA has registered a new RTCP RGRP SDES item in the "RTP SDES Item Types" registry, as follows ๐:
+=======+========+============================+===========+
| Value | Abbrev | Name | Reference |
+=======+========+============================+===========+
| 11 | RGRP | Reporting Group Identifier | RFC 8861 |
+-------+--------+----------------------------+-----------+
Table 1: New RTCP RGRP SDES Item: Reporting Group
Identifier
The definition of the RTCP RGRP SDES item is given in Section 3.2.1 of this memo ๐.
IANA has registered a new RTCP packet type in the "RTCP Control Packet Types (PT)" registry, as follows โจ:
+=======+========+===================================+===========+
| Value | Abbrev | Name | Reference |
+=======+========+===================================+===========+
| 212 | RGRS | Reporting Group Reporting Sources | RFC 8861 |
+-------+--------+-----------------------------------+-----------+
Table 2: New RTCP Packet Type: Reporting Group Reporting Sources
The definition of the RTCP RGRS packet type is given in Section 3.2.2 of this memo ๐ฆ.
IANA has also registered a new SDP attribute ๐:
SDP Attribute ("att-field"):
Contact Name: IESG
Contact Email: iesg@ietf.org
Attribute name: rtcp-rgrp
Long form: RTCP Reporting Groups
Type of name: att-field
Type of attribute: Media or session level
Subject to charset: No
Purpose: To negotiate or configure the use of the
RTCP Reporting Group extension
Reference: RFC 8861
Value: None
Mux Category: IDENTICAL
The definition of the "a=rtcp-rgrp" SDES attribute is given in Section 3.6 of this memo ๐.
7. References ๐ง
7.1. Normative References
- [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, DOI 10.17487/RFC2119, March 1997,
https://www.rfc-editor.org/info/rfc2119. - [RFC3264] Rosenberg, J. and H. Schulzrinne, "An Offer/Answer Model with Session Description Protocol (SDP)", RFC 3264, DOI 10.17487/RFC3264, June 2002,
https://www.rfc-editor.org/info/rfc3264. - [RFC3550] Schulzrinne, H., Casner, S., Frederick, R., and V. Jacobson, "RTP: A Transport Protocol for Real-Time Applications", STD 64, RFC 3550, DOI 10.17487/RFC3550, July 2003,
https://www.rfc-editor.org/info/rfc3550. - [RFC4566] Handley, M., Jacobson, V., and C. Perkins, "SDP: Session Description Protocol", RFC 4566, DOI 10.17487/RFC4566, July 2006,
https://www.rfc-editor.org/info/rfc4566. - [RFC7022] Begen, A., Perkins, C., Wing, D., and E. Rescorla, "Guidelines for Choosing RTP Control Protocol (RTCP) Canonical Names (CNAMEs)", RFC 7022, DOI 10.17487/RFC7022, September 2013,
https://www.rfc-editor.org/info/rfc7022. - [RFC8108] Lennox, J., Westerlund, M., Wu, Q., and C. Perkins, "Sending Multiple RTP Streams in a Single RTP Session", RFC 8108, DOI 10.17487/RFC8108, March 2017,
https://www.rfc-editor.org/info/rfc8108. - [RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174, May 2017,
https://www.rfc-editor.org/info/rfc8174. - [RFC8859] Nandakumar, S., "A Framework for Session Description Protocol (SDP) Attributes When Multiplexing", RFC 8859, DOI 10.17487/RFC8859, January 2021,
https://www.rfc-editor.org/info/rfc8859.
7.2. Informative References
- [RFC2974] Handley, M., Perkins, C., and E. Whelan, "Session Announcement Protocol", RFC 2974, DOI 10.17487/RFC2974, October 2000,
https://www.rfc-editor.org/info/rfc2974. - [RFC3611] Friedman, T., Ed., Caceres, R., Ed., and A. Clark, Ed., "RTP Control Protocol Extended Reports (RTCP XR)", RFC 3611, DOI 10.17487/RFC3611, November 2003,
https://www.rfc-editor.org/info/rfc3611. - [RFC3711] Baugher, M., McGrew, D., Naslund, M., Carrara, E., and K. Norrman, "The Secure Real-time Transport Protocol (SRTP)", RFC 3711, DOI 10.17487/RFC3711, March 2004,
https://www.rfc-editor.org/info/rfc3711. - [RFC4585] Ott, J., Wenger, S., Sato, N., Burmeister, C., and J. Rey, "Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)", RFC 4585, DOI 10.17487/RFC4585, July 2006,
https://www.rfc-editor.org/info/rfc4585. - [RFC4588] Rey, J., Leon, D., Miyazaki, A., Varsa, V., and R. Hakenberg, "RTP Retransmission Payload Format", RFC 4588, DOI 10.17487/RFC4588, July 2006,
https://www.rfc-editor.org/info/rfc4588. - [RFC5104] Wenger, S., Chandra, U., Westerlund, M., and B. Burman, "Codec Control Messages in the RTP Audio-Visual Profile with Feedback (AVPF)", RFC 5104, DOI 10.17487/RFC5104, February 2008,
https://www.rfc-editor.org/info/rfc5104. - [RFC5506] Johansson, I. and M. Westerlund, "Support for Reduced-Size Real-Time Transport Control Protocol (RTCP): Opportunities and Consequences", RFC 5506, DOI 10.17487/RFC5506, April 2009,
https://www.rfc-editor.org/info/rfc5506. - [RFC6190] Wenger, S., Wang, Y.-K., Schierl, T., and A. Eleftheriadis, "RTP Payload Format for Scalable Video Coding", RFC 6190, DOI 10.17487/RFC6190, May 2011,
https://www.rfc-editor.org/info/rfc6190. - [RFC7201] Westerlund, M. and C. Perkins, "Options for Securing RTP Sessions", RFC 7201, DOI 10.17487/RFC7201, April 2014,
https://www.rfc-editor.org/info/rfc7201. - [RFC7826] Schulzrinne, H., Rao, A., Lanphier, R., Westerlund, M., and M. Stiemerling, Ed., "Real-Time Streaming Protocol Version 2.0", RFC 7826, DOI 10.17487/RFC7826, December 2016,
https://www.rfc-editor.org/info/rfc7826.
Authors' Addresses ๐
okay bestie, these are the four brilliant humans who wrote this whole spec ๐ซถ if you ever want to slide into their DMs about it, here's where to find them. The emails are in code blocks so you can copy-paste them, no cap ๐
Jonathan Lennox ๐ is the first one on the list:
Jonathan Lennox
8x8, Inc. / Jitsi
Jersey City, NJ 07302
United States of America
Email: jonathan.lennox@8x8.com
Next up is Magnus Westerlund ๐ฆ, repping Ericsson from Sweden:
Magnus Westerlund
Ericsson
Torshamnsgatan 23
SE-164 80 Kista
Sweden
Email: magnus.westerlund@ericsson.com
Then we have Qin Wu ๐ธ, who represents Huawei from China:
Qin Wu
Huawei
101 Software Avenue, Yuhua District
Nanjing, Jiangsu 210012
China
Email: bill.wu@huawei.com
And last but definitely not least, Colin Perkins ๐ from the University of Glasgow:
Colin Perkins
University of Glasgow
School of Computing Science
Glasgow
G12 8QQ
United Kingdom
Email: csp@csperkins.org
Four authors, four countries, one very iconic spec. The whole crew is giving teamwork ๐โจ
๐ฆ where this page comes from
- ietf: rfc8861 2021-01
- ๐ girlified by claude-haiku-5-5 on : a language model's rewrite of the original, under its terms