rfc9392.original.xml   rfc9392.xml 
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="UTF-8"?>
<?xml-model href="rfc7991bis.rnc"?> <?xml-model href="rfc7991bis.rnc"?>
<!DOCTYPE rfc [ <!DOCTYPE rfc [
<!ENTITY nbsp "&#160;"> <!ENTITY nbsp "&#160;">
<!ENTITY zwsp "&#8203;"> <!ENTITY zwsp "&#8203;">
<!ENTITY nbhy "&#8209;"> <!ENTITY nbhy "&#8209;">
<!ENTITY wj "&#8288;"> <!ENTITY wj "&#8288;">
]> ]>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-rmcat-rtp-cc
-feedback-12" <rfc xmlns:xi="http://www.w3.org/2001/XInclude" docName="draft-ietf-rmcat-rtp-cc
category="info" ipr="trust200902" submissionType="IETF" xml:lang="en" version= -feedback-12" number="9392" submissionType="IETF" category="info" consensus="tru
"3"> e" ipr="trust200902" tocInclude="true" sortRefs="true" symRefs="true" xml:lang="
en" updates="" obsoletes="" version="3">
<front> <front>
<title abbrev="RTCP Feedback for Congestion Control"> <title abbrev="RTCP Feedback for Congestion Control">
Sending RTP Control Protocol (RTCP) Feedback for Congestion Control in Sending RTP Control Protocol (RTCP) Feedback for Congestion Control in
Interactive Multimedia Conferences Interactive Multimedia Conferences
</title> </title>
<seriesInfo name="Internet-Draft" value="draft-ietf-rmcat-rtp-cc-feedback-12 <seriesInfo name="RFC" value="9392"/>
"/> <author fullname="Colin Perkins" initials="C." surname="Perkins">
<author fullname="Colin Perkins" initials="C. S." surname="Perkins">
<organization>University of Glasgow</organization> <organization>University of Glasgow</organization>
<address> <address>
<postal> <postal>
<street>School of Computing Science</street> <extaddr>School of Computing Science</extaddr>
<city>Glasgow</city> <city>Glasgow</city>
<code>G12 8QQ</code> <code>G12 8QQ</code>
<country>United Kingdom</country> <country>United Kingdom</country>
</postal> </postal>
<email>csp@csperkins.org</email> <email>csp@csperkins.org</email>
</address> </address>
</author> </author>
<date day="21" month="December" year="2022" /> <date month="April" year="2023" />
<abstract> <area>tsv</area>
<workgroup>rmcat</workgroup>
<keyword>RTP</keyword>
<keyword>Congestion Control</keyword>
<keyword>VoIP</keyword>
<keyword>Video Conferencing</keyword>
<abstract>
<t> <t>
This memo discusses the rate at which congestion control feedback can This memo discusses the rate at which congestion control feedback can
be sent using the RTP Control Protocol (RTCP) and its suitability for be sent using the RTP Control Protocol (RTCP) and the suitability of RTCP
implementing congestion control for unicast multimedia applications. for
implementing congestion control for unicast multimedia applications.
</t> </t>
</abstract> </abstract>
</front> </front>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<middle> <middle>
<section title="Introduction"> <section title="Introduction">
<t> <t>
The deployment of WebRTC systems <xref target="RFC8825"/> has resulted The deployment of WebRTC systems <xref target="RFC8825"/> has resulted
in high-quality video conferencing seeing extremely wide use. To ensure in high-quality video conferencing seeing extremely wide use. To ensure
the stability of the network in the face of this use, WebRTC systems the stability of the network in the face of this use, WebRTC systems
need to use some form of congestion control for their RTP-based media need to use some form of congestion control for their RTP-based media
traffic <xref target="RFC2914"/>, <xref target="RFC8085"/>, traffic <xref target="RFC2914"/> <xref target="RFC8083"/>
<xref target="RFC8083"/>, <xref target="RFC8834"/>, allowing them to <xref target="RFC8085"/> <xref target="RFC8834"/>, allowing them to
adapt and adjust the media data they send to match adapt and adjust the media data they send to match
changes in the available network capacity. In addition to ensuring changes in the available network capacity. In addition to ensuring
the stable operation of the network, such adaptation is critical to the stable operation of the network, such adaptation is critical to
ensuring a good user experience, since it allows the sender to match ensuring a good user experience, since it allows the sender to match
the media to the network capacity, rather than forcing the receiver the media to the network capacity, rather than forcing the receiver
to compensate for uncontrolled packet loss when the available capacity to compensate for uncontrolled packet loss when the available capacity
is exceeded. is exceeded.
</t> </t>
<t> <t>
To develop such congestion control, it is necessary to To develop such congestion control, it is necessary to
understand the sort of congestion feedback that can be provided within understand the sort of congestion feedback that can be provided within
the framework of RTP <xref target="RFC3550"/> and the RTP Control the framework of RTP <xref target="RFC3550"/> and the RTP Control
Protocol (RTCP). It then becomes possible to determine if this is Protocol (RTCP). It then becomes possible to determine if this is
sufficient for congestion control, or if some form of RTP extension sufficient for congestion control or if some form of RTP extension
is needed. is needed.
</t> </t>
<t> <t>
As this memo will show, if it is desired to use RTCP in something As this memo will show, if it is desired to use RTCP in something
close to its current form for congestion feedback, the multimedia close to its current form for congestion feedback, the multimedia
congestion control algorithm needs to be designed to work with congestion control algorithm needs to be designed to work with
detailed feedback sent every few frames, rather than per-frame detailed feedback sent every few frames, rather than per-frame
acknowledgement, to match the constraints of RTCP. acknowledgement, to match the constraints of RTCP.
</t> </t>
<t> <t>
This memo considers unicast congestion feedback that can be sent using This memo considers unicast congestion feedback that can be sent using
RTCP under the RTP/SAVPF profile <xref target="RFC5124"/> (the secure RTCP under the RTP/SAVPF profile <xref target="RFC5124"/> (the secure
version of the RTP/AVPF profile <xref target="RFC4585"/>). This version of the RTP/AVPF profile <xref target="RFC4585"/>).
profile was chosen as it forms the basis for media transport in WebRTC This
<xref target="RFC8834"/> systems. Nothing in this memo is specific to profile was chosen because it forms the basis for media transport in Web
the secure version of the profile, or to WebRTC, however. It is also RTC
<xref target="RFC8834"/> systems. However, nothing in this memo is speci
fic to
the secure version of the profile or to WebRTC. It is also
assumed that the congestion control feedback mechanism described in assumed that the congestion control feedback mechanism described in
<xref target="RFC8888"/>, and common RTCP extensions for efficient feedb <xref target="RFC8888"/> and common RTCP extensions for efficient feedba
ack ck
<xref target="RFC5506"/>, <xref target="RFC8108"/>, <xref target="RFC5506"/> <xref target="RFC8108"/>
<xref target="RFC8861"/>, and <xref target="RFC8872"/> are used. <xref target="RFC8861"/> <xref target="RFC8872"/> are used.
</t> </t>
<section title="Terminology">
<dl newline="false" spacing="normal">
<dt>Nr:</dt> <dd>number of frames between feedback reports</dd>
<dt>Nrs:</dt> <dd>number of reduced-size RTCP packets send for every co
mpound RTCP packet</dd>
<dt>Na:</dt> <dd>number of audio packets per report</dd>
<dt>Nv:</dt> <dd>number of video packets per reports</dd>
<dt>Sc:</dt> <dd>size of a compound RTCP packet</dd>
<dt>Srs:</dt> <dd>size of a reduced-size RTCP packet</dd>
<dt>Tf:</dt> <dd>duration of a media frame in seconds </dd>
<dt>Rf:</dt> <dd>frame rate 1/Tf</dd>
</dl>
</section>
</section> </section>
<section title="Considerations for RTCP Feedback"> <section title="Considerations for RTCP Feedback">
<t> <t>
Several questions need to be answered when providing RTCP Several questions need to be answered when providing RTCP
feedback for congestion control purposes. These include: feedback for congestion control purposes. These include:
</t> </t>
<ul> <ul>
<li> How often is feedback needed? </li> <li> How often is feedback needed? </li>
<li> How much overhead is acceptable? </li> <li> How much overhead is acceptable? </li>
<li> How much, and what, data does each report contain? </li> <li> How much and what data does each report contain? </li>
</ul> </ul>
<t> <t>
The key question is how often does the receiver need to send feedback However, the key question is as follows: how often does the receiver need
on the reception quality it is experiencing and hence the congestion to send feedback on the reception quality it is experiencing and hence th
state of the network? e
congestion state of the network?
</t> </t>
<t> <t>
Widely used transport protocols, such as TCP, send acknowledgements Widely used transport protocols, such as TCP, send acknowledgements
frequently. For example, a TCP receiver will send an acknowledgement frequently. For example, a TCP receiver will send an acknowledgement
at least once every 0.5 seconds or when new data equal to twice the maxi mum at least once every 0.5 seconds or when new data equal to twice the maxi mum
segment size has been received <xref target="RFC9293"/>). segment size has been received <xref target="RFC9293"/>.
That has relatively low overhead when traffic is bidirectional That has relatively low overhead when traffic is bidirectional
and acknowledgements can be piggybacked onto return path data packets. and acknowledgements can be piggybacked onto return path data packets.
It can also be acceptable, and can have reasonable overhead, to send It can also be acceptable, and can have reasonable overhead, to send
separate acknowledgement packets when those packets are much smaller separate acknowledgement packets when those packets are much smaller
than data packets. than data packets.
</t> </t>
<t> <t>
Frequent acknowledgements can become a problem, however, when there Frequent acknowledgements can become a problem, however, when there
is no return traffic on which to piggyback feedback, or if separate is no return traffic on which to piggyback feedback or if separate
feedback and data packets are sent and the feedback is similar in feedback and data packets are sent and the feedback is similar in
size to the data being acknowledged. This can be the case for some size to the data being acknowledged. This can be the case for some
forms of media traffic, especially for voice over IP flows, leading forms of media traffic, especially for Voice over IP (VoIP) flows, leadi ng
to high overhead when using a transport protocol that sends frequent to high overhead when using a transport protocol that sends frequent
feedback. Approaches like in-network filtering of acknowledgements feedback. Approaches like in-network filtering of acknowledgements
that have been proposed to reduce acknowledgement overheads on highly that have been proposed to reduce acknowledgement overheads on highly
asymmetric links (e.g., as mentioned in <xref target="RFC3449"/>) asymmetric links (e.g., as mentioned in <xref target="RFC3449"/>)
can also reduce the feedback frequency and overhead for multimedia traff ic, but this can also reduce the feedback frequency and overhead for multimedia traff ic, but this
so-called "stretch-ACK" behaviour is non-standard and not guaranteed. so-called "stretch-ACK" behavior is nonstandard and not guaranteed.
</t> </t>
<t> <t>
Accordingly, when implementing congestion control for RTP-based multimed ia traffic, Accordingly, when implementing congestion control for RTP-based multimed ia traffic,
it might make sense to give the option of sending congestion feedback le ss often it might make sense to give the option of sending congestion feedback le ss often
than TCP does. For example, it might be possible to send a feedback pac ket than TCP does. For example, it might be possible to send a feedback pac ket
once per video frame, or every few frames, or once per network round tri p once per video frame, every few frames, or once per network round-trip
time (RTT). This could still give sufficiently frequent feedback for time (RTT). This could still give sufficiently frequent feedback for
the congestion control loop to be stable and responsive while keeping the congestion control loop to be stable and responsive while keeping
the overhead reasonable when the feedback cannot be piggybacked onto the overhead reasonable when the feedback cannot be piggybacked onto
returning data. In this case, it is important to note that RTCP can returning data. In this case, it is important to note that RTCP can
send much more detailed feedback than simple acknowledgements. For send much more detailed feedback than simple acknowledgements.
example, if it were useful, it could be possible to use an RTCP For example, if it were useful, it could be possible to use an RTCP exten
extended report (XR) packet <xref target="RFC3611"/> to send feedback ded
once per RTT comprising a bitmap of lost and received packets, with report (XR) packet <xref target="RFC3611"/> to send feedback once per RTT
reception times, over that RTT. As long as feedback is sent ;
frequently enough that the control loop is stable, and the sender is the feedback could comprise a
bitmap of lost and received packets, with reception times, over that
RTT. As long as feedback is sent
frequently enough that the control loop is stable and the sender is
kept informed when data leaves the network (to provide an equivalent kept informed when data leaves the network (to provide an equivalent
to ACK clocking in TCP), it is not necessary to report on every packet to acknowledgement (ACK) clocking in TCP), it is not necessary to report on every packet
at the instant it is received. Indeed, it is unlikely that a video at the instant it is received. Indeed, it is unlikely that a video
codec can react instantly to a rate change, and there is little codec can react instantly to a rate change, and there is little
point in providing feedback more often than the codec can adapt. point in providing feedback more often than the codec can adapt.
This suggests that an RTP receiver needs to be configured to provide This suggests that an RTP receiver needs to be configured to provide
feedback at a rate that matches the rate of adaptation of the sender. feedback at a rate that matches the rate of adaptation of the sender.
In the best case, this will match the media frame rate, but might In the best case, this will match the media frame rate but might
often be slower. often be slower.
</t> </t>
<t> <t>
Reducing the feedback frequency compared to TCP will reduce feedback Reducing the feedback frequency compared to TCP will reduce feedback
overhead but will lead multimedia flows to adapt to congestion more overhead but will lead multimedia flows to adapt to congestion more
slowly than TCP, raising concerns about inter-flow fairness. Similar slowly than TCP, raising concerns about inter-flow fairness. Similar
concerns are noted in <xref target="RFC5348"/>, and accordingly the concerns are noted in <xref target="RFC5348"/>, and accordingly, the
congestion control algorithm described therein aims for "reasonable" congestion control algorithm described therein aims for "reasonable"
fairness and a sending rate that is "generally within a factor of fairness and a sending rate that is "generally within a factor of
two" of that TCP would achieve under the same conditions. It is two" of what TCP would achieve under the same conditions. It is
to be noted, however, that TCP exhibits inter-flow unfairness when to be noted, however, that TCP exhibits inter-flow unfairness when
flows with differing round-trip times compete, and stretch flows with differing round-trip times compete, and stretch
acknowledgements due to in-network traffic manipulation are not acknowledgements due to in-network traffic manipulation are not
uncommon and also raise fairness concerns. Implementations need uncommon and also raise fairness concerns. Implementations need
to balance potential unfairness against feedback overhead. to balance potential unfairness against feedback overhead.
</t> </t>
<t> <t>
Generating and processing feedback consumes resources at the sender Generating and processing feedback consumes resources at the sender
and receiver. The feedback packets also incur forwarding costs, contribu te and receiver. The feedback packets also incur forwarding costs, contribu te
to link utilization, and can affect the timing of other traffic on the to link utilization, and can affect the timing of other traffic on the
network. This can affect performance on some types of network, that can network. This can affect performance on some types of networks that can
be be
impacted by the rate, timing, and size of feedback packets, as well as b impacted by the rate, timing, and size of feedback packets, as well as
y
the overall volume of feedback bytes. the overall volume of feedback bytes.
</t> </t>
<t> <t>
The amount of overhead due to congestion control feedback that is The amount of overhead due to congestion control feedback that is
considered acceptable has to be determined. RTCP feedback is sent in considered acceptable has to be determined. RTCP feedback is sent in
separate packets to RTP data, and this has some cost in terms of separate packets to RTP data, and this has some cost in terms of
additional header overhead compared to protocols that piggyback additional header overhead compared to protocols that piggyback
feedback on return path data packets. The RTP standards have long said feedback on return path data packets. The RTP standards have long said
that a 5% overhead for RTCP traffic is generally acceptable, while that a 5% overhead for RTCP traffic is generally acceptable. Is this sti
providing the ability to change this fraction. Is this still the case ll
the case
for congestion control feedback? Is there a desire to provide for congestion control feedback? Is there a desire to provide
more responsive feedback and congestion control, possibly with a more responsive feedback and congestion control, possibly with a
higher overhead? Or is lower overhead wanted, accepting that this higher overhead? Or is lower overhead wanted, accepting that this
might reduce responsiveness of the congestion control algorithm? might reduce responsiveness of the congestion control algorithm?
</t> </t>
<t> <t>
Finally, the details of how much, and what, data is to be sent in Finally, the details of how much and what data is to be sent in
each report will affect the frequency and/or overhead of feedback. each report will affect the frequency and/or overhead of feedback.
There is a fundamental trade-off that the more frequently feedback There is a fundamental trade-off that the more frequently feedback
packets are sent, the less data can be included in each packet to packets are sent, the less data can be included in each packet to
keep the overhead constant. Does the congestion control need high keep the overhead constant. Does the congestion control need a high
rate but simple feedback (e.g., like TCP acknowledgements), or is rate but simple feedback (e.g., like TCP acknowledgements), or is
it acceptable to send more complex feedback less often? it acceptable to send more complex feedback less often?
Is it useful for the congestion control to receive frequent feedback, Is it useful for the congestion control to receive frequent feedback,
perhaps to provide more accurate round-trip time estimates, or to perhaps to provide more accurate round-trip time estimates, or to
provide robustness in case feedback packets are lost, even if the provide robustness in case feedback packets are lost, even if the
media sending rate cannot quickly be changed? Or is low-rate feedback, media sending rate cannot quickly be changed? Or is low-rate feedback,
resulting in slowly responsive changes to the sending rate, acceptable? resulting in slowly responsive changes to the sending rate, acceptable?
Different combinations of congestion control algorithm and media Different combinations of the congestion control algorithm and media
codec might require different trade-offs, and the correct trade-off codec might require different trade-offs, and the correct trade-off
for interactive, self-paced, real-time multimedia traffic might not for interactive, self-paced, real-time multimedia traffic might not
be the same as that for TCP congestion control. be the same as that for TCP congestion control.
</t> </t>
</section> </section>
<section title="What Feedback is Achievable With RTCP?"> <section title="What Feedback is Achievable with RTCP?">
<t> <t>
The following sections illustrate how the RTCP congestion control The following sections illustrate how the RTCP congestion control
feedback report <xref target="RFC8888"/> can be used in different feedback report <xref target="RFC8888"/> can be used in different
scenarios, and illustrate the overheads of this approach. scenarios and illustrate the overheads of this approach.
</t> </t>
<section title="Scenario 1: Voice Telephony" anchor="sec-p2p-audio"> <section title="Scenario 1: Voice Telephony" anchor="sec-p2p-audio">
<t> <t>
In many ways, point-to-point voice telephony is the simplest In many ways, point-to-point voice telephony is the simplest
scenario for congestion control, since there is only a single scenario for congestion control, since there is only a single
media stream to control. It's complicated, however, by severe media stream to control. It's complicated, however, by severe
bandwidth constraints on the feedback, to keep the overhead bandwidth constraints on the feedback, to keep the overhead
manageable. manageable.
</t> </t>
<t> <t>
Assume a two-party point-to-point voice-over-IP call, using RTP Assume a two-party, point-to-point VoIP call, using RTP
over UDP/IP. A rate adaptive speech codec, such as Opus, is used, over UDP/IP. A rate-adaptive speech codec, such as Opus, is used,
encoded into RTP packets in frames of duration Tf seconds (Tf = encoded into RTP packets in frames of a duration of Tf seconds (Tf =
0.020s in many cases, but values up to 0.060s are not uncommon). The 0.020 s in many cases, but values up to 0.060 s are not uncommon). The
congestion control algorithm requires feedback every Nr frames, congestion control algorithm requires feedback every Nr frames,
i.e., every Nr * Tf seconds, to ensure effective control. Both i.e., every Nr * Tf seconds, to ensure effective control. Both
parties in the call send speech data or comfort noise with parties in the call send speech data or comfort noise with
sufficient frequency that they are counted as senders for the sufficient frequency that they are counted as senders for the
purpose of the RTCP reporting interval calculation. purpose of the RTCP reporting interval calculation.
</t> </t>
<t> <t>
RTCP feedback packets can be full, compound, RTCP feedback RTCP feedback packets can be full (compound) RTCP feedback
packets, or reduced-size RTCP packets <xref target="RFC5506"/>. packets or reduced-size RTCP packets <xref target="RFC5506"/>.
A compound RTCP packet is sent once for every Nrs reduced-size A compound RTCP packet is sent once for every Nrs reduced-size
RTCP packets. RTCP packets.
</t> </t>
<t> <t>
Compound RTCP packets contain a Sender Report (SR) packet, a Compound RTCP packets contain a Sender Report (SR) packet, a
Source Description (SDES) packet, and an RTP Congestion Control Source Description (SDES) packet, and an RTP Congestion Control
Feedback (CCFB) packet <xref target="RFC8888"/>. Reduced-size Feedback (CCFB) packet <xref target="RFC8888"/>. Reduced-size
RTCP packets contain only the CCFB packet. Since each participant RTCP packets contain only the CCFB packet. Since each participant
sends only a single RTP media stream, the extensions for RTCP report sends only a single RTP media stream, the extensions for RTCP report
aggregation <xref target="RFC8108"/> and reporting group optimisation aggregation <xref target="RFC8108"/> and reporting group optimization
<xref target="RFC8861"/> are not used. <xref target="RFC8861"/> are not used.
</t> </t>
<t> <t>
Within each compound RTCP packet, the SR packet will contain a Within each compound RTCP packet, the SR packet will contain a
sender information block (28 octets) and a single reception sender information block (28 octets) and a single reception
report block (24 octets), for a total of 52 octets. A minimal report block (24 octets), for a total of 52 octets. A minimal
SDES packet will contain a header (4 octets) and a single chunk SDES packet will contain a header (4 octets), a single chunk
containing an SSRC (4 octets) and a CNAME item, and if the containing a synchronization source (SSRC) (4 octets), and a CNAME ite
m, and if the
recommendations for choosing the CNAME <xref target="RFC7022"/> recommendations for choosing the CNAME <xref target="RFC7022"/>
are followed, the CNAME item will comprise a 2-octet header, 16 are followed, the CNAME item will comprise a 2-octet header, 16
octets of data, and 2 octets of padding, for a total SDES packet octets of data, and 2 octets of padding, for a total SDES packet
size of 28 octets. The CCFB packets contain an RTCP header size of 28 octets.
and SSRC (8 octets), a report timestamp (4 octets), the The CCFB packets contain an RTCP header
SSRC, beginning and ending sequence numbers (8 octets), and 2*Nr and SSRC (8 octets), a report timestamp (4 octets), the other party's
octets of reports, for a total of 20 + 2*Nr octets. SSRC, beginning and ending sequence numbers (8 octets), and 2 * Nr
The compound Secure RTCP packet will include 4 octets of trailer octets of reports, for a total of 20 + (2 * Nr) octets.
followed by an 80 bit (10 octet) authentication tag if HMAC-SHA1 The compound Secure RTCP (SRTCP) packet will include 4 octets of trail
er,
followed by an 80-bit (10-octet) authentication tag if HMAC-SHA1
authentication is used. authentication is used.
If IPv4 is used, with no IP options, the UDP/IP header will be If IPv4 is used, with no IP options, the UDP/IP header will be
28 octets in size. This gives a total compound RTCP packet size 28 octets in size. This gives a total compound RTCP packet size
of Sc = 142 + 2*Nr octets. of Sc = 142 + (2 * Nr) octets.
</t> </t>
<t> <t>
The reduced-size RTCP packets will comprise just the CCFB packet, The reduced-size RTCP packets will comprise just the CCFB packet,
SRTCP trailer and authentication tag, and a UDP/IP header. It can SRTCP trailer and authentication tag, and a UDP/IP header. It can
be seen that these packets will be Srs = 62 + 2*Nr octets in size. be seen that these packets will be Srs = 62 + (2 * Nr) octets in size.
</t> </t>
<t> <t>
The RTCP reporting interval calculation (<xref target="RFC3550"/>, The RTCP reporting interval calculation (Sections <xref target="RFC355
Section 6.2) for a two-party session where both participants 0" section="6.2" sectionFormat="bare"/> and <xref target="RFC3550" section="6.3"
are senders, reduces to: sectionFormat="bare"/> of <xref target="RFC3550"/> and <xref target="RFC4585"/>
) for a two-party session where both participants
are senders reduces to:
</t> </t>
<blockquote> <artwork name="" type="" align="left"><![CDATA[
<artwork> Trtcp = n * Srtcp / Brtcp
Trtcp = n * Srtcp / Brtcp ]]></artwork>
</artwork>
</blockquote>
<t> <t>
where Srtcp = (Sc + Nrs * Srs)/(1 + Nrs) is the average RTCP packet where Srtcp = (Sc + Nrs * Srs) / (1 + Nrs) is the average RTCP packet
size in octets, Brtcp is the bandwidth allocated to RTCP in octets size in octets, Brtcp is the bandwidth allocated to RTCP in octets
per second, and n is the number of participants in the RTP session per second, and n is the number of participants in the RTP session
(in this scenario, n = 2). (in this scenario, n = 2).
</t> </t>
<t> <t>
To ensure an RTCP report containing congestion control feedback is To ensure an RTCP report containing congestion control feedback is
sent after every Nr frames of audio, it is necessary to set the RTCP sent after every Nr frames of audio, it is necessary to set the RTCP
reporting interval Trtcp = Nr * Tf, which when substituted into the reporting interval to Trtcp = Nr * Tf, which when substituted into the
previous gives Nr * Tf = n * Srtcp/Brtcp. previous, gives Nr * Tf = n * Srtcp / Brtcp.
Solving this to give the RTCP bandwidth, Brtcp, and expanding the Solving this to give the RTCP bandwidth (Brtcp) and expanding the
definition of Srtcp gives: definition of Srtcp gives:
</t> </t>
<blockquote> <artwork name="" type="" align="left"><![CDATA[
<artwork> Brtcp = (n * (Sc + Nrs * Srs)) / (Nr * Tf * (1 + Nrs))
Brtcp = (n * (Sc + Nrs * Srs))/(Nr * Tf * (1 + Nrs)). ]]></artwork>
</artwork>
</blockquote>
<t> <t>
If we assume every report is a compound RTCP packet (i.e., Nrs = 0), If we assume every report is a compound RTCP packet (i.e., Nrs = 0),
the frame duration Tf = 20ms, and an RTCP report is sent for every the frame duration is Tf = 20 ms, and an RTCP report is sent for every
second frame (i.e., 25 RTCP reports per second), this gives an RTCP second frame (i.e., 25 RTCP reports per second), this gives an RTCP
feedback bandwidth, Brtcp = 57kbps. Increasing the frame duration, feedback bandwidth of Brtcp = 57 kbps. Increasing the frame duration
or reducing the frequency of reports, will reduce the RTCP bandwidth or reducing the frequency of reports will reduce the RTCP bandwidth,
as shown in <xref target="voip_rtcp_bw"/>. as shown in <xref target="voip_rtcp_bw"/>.
</t> </t>
<table anchor='voip_rtcp_bw'> <table anchor='voip_rtcp_bw'>
<name>RTCP bandwidth needed for VoIP feedback (compound reports only)< /name> <name>RTCP Bandwidth Needed for VoIP Feedback (Compound Reports Only)< /name>
<thead> <thead>
<tr> <tr>
<td align='center'>Tf (seconds)</td> <th align='center'>Tf (seconds)</th>
<td align='center'>Nr (frames)</td> <th align='center'>Nr (frames)</th>
<td align='center'>rtcp_bw (kbps)</td> <th align='center'>rtcp_bw (kbps)</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
<td> 2 </td> <td> 2 </td>
<td> 57.0 </td> <td> 57.0 </td>
</tr> </tr>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
skipping to change at line 380 skipping to change at line 397
</tr> </tr>
<tr> <tr>
<td> 0.060 </td> <td> 0.060 </td>
<td> 16 </td> <td> 16 </td>
<td> 2.8 </td> <td> 2.8 </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t> <t>
The final row of <xref target="voip_rtcp_bw"/> (60ms frames, report The final row of <xref target="voip_rtcp_bw"/> (60 ms frames, reportin g
every 16 frames) sends RTCP reports once per second, giving an RTCP every 16 frames) sends RTCP reports once per second, giving an RTCP
bandwidth overhead of 2.8kbps. bandwidth overhead of 2.8 kbps.
</t> </t>
<t> <t>
The overhead can be reduced by sending some reports in reduced-size The overhead can be reduced by sending some reports in reduced-size
RTCP packets <xref target="RFC5506"/>. For example, if we alternate RTCP packets <xref target="RFC5506"/>. For example, if we alternate
compound and reduced-size RTCP packets, i.e., Nrs = 1, the calculation compound and reduced-size RTCP packets, i.e., Nrs = 1, the calculation
gives the results shown in <xref target="voip_rtcp_bw_non-compound"/>. gives the results shown in <xref target="voip_rtcp_bw_non-compound"/>.
</t> </t>
<table anchor='voip_rtcp_bw_non-compound'> <table anchor='voip_rtcp_bw_non-compound'>
<name>Required RTCP bandwidth for VoIP feedback (alternating compound and reduced-size reports)</name> <name>Required RTCP Bandwidth for VoIP Feedback (Alternating Compound and Reduced-Size Reports)</name>
<thead> <thead>
<tr> <tr>
<td align='center'>Tf (seconds)</td> <th align='center'>Tf (seconds)</th>
<td align='center'>Nr (frames)</td> <th align='center'>Nr (frames)</th>
<td align='center'>rtcp_bw (kbps)</td> <th align='center'>rtcp_bw (kbps)</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
<td> 2 </td> <td> 2 </td>
<td> 41.4 </td> <td> 41.4 </td>
</tr> </tr>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
skipping to change at line 446 skipping to change at line 463
</tr> </tr>
<tr> <tr>
<td> 0.060 </td> <td> 0.060 </td>
<td> 16 </td> <td> 16 </td>
<td> 2.2 </td> <td> 2.2 </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t> <t>
The RTCP bandwidth needed for 60ms frames, reporting every 16 The RTCP bandwidth needed for 60 ms frames, reporting every 16
frames (once per second), can be seen to drop to 2.2kbps. This frames (once per second), can be seen to drop to 2.2 kbps. This
calculation can be repeated for other patterns of compound and calculation can be repeated for other patterns of compound and
reduced-size RTCP packets, feedback frequency, and frame duration, reduced-size RTCP packets, feedback frequency, and frame duration,
as needed. as needed.
</t> </t>
<t> <aside><t>
Note: To achieve the RTCP transmission intervals above the Note: To achieve the RTCP transmission intervals above, the
RTP/SAVPF profile with T_rr_interval=0 is used, since even when RTP/SAVPF profile with T_rr_interval=0 is used, since even when
using the reduced minimal transmission interval, the RTP/SAVP using the reduced minimal transmission interval, the RTP/SAVP
profile would only allow sending RTCP at most every 0.11s (every profile would only allow sending RTCP at most every 0.11 s (every
third frame of video). Using RTP/SAVPF with T_rr_interval=0 third frame of video). Using RTP/SAVPF with T_rr_interval=0,
however is capable of fully utilizing the configured 5% RTCP however, enables full utilization of the configured 5% RTCP bandwidth
bandwidth fraction. fraction.
</t> </t> </aside>
<t> <t>
The use of IPv6 will increase the overhead by 20 octets per packet, The use of IPv6 will increase the overhead by 20 octets per packet,
due to the increased size of the IPv6 header compared to IPv4, due to the increased size of the IPv6 header compared to IPv4,
assuming no IP options in either case. This increases the size assuming no IP options in either case. This increases the size
of compound packets to Sc = 162 + 2*Nr octets and reduced size of compound packets to Sc = 162 + (2 * Nr) octets and reduced-size
packets to Srs = 82 + 2*Nr. Re-running the calculations from packets to Srs = 82 + (2 * Nr). Rerunning the calculations from
<xref target="voip_rtcp_bw"/> with these packet sizes gives the <xref target="voip_rtcp_bw"/> with these packet sizes gives the
results shown in <xref target="voip_rtcp_bw_ipv6"/>. results shown in <xref target="voip_rtcp_bw_ipv6"/>.
As can be seen, there is a significant increase in overhead As can be seen, there is a significant increase in overhead
due to the use of IPv6. due to the use of IPv6.
</t> </t>
<table anchor='voip_rtcp_bw_ipv6'> <table anchor='voip_rtcp_bw_ipv6'>
<name>RTCP bandwidth needed for VoIP feedback (compound reports only) using IPv6</name> <name>RTCP Bandwidth Needed for VoIP Feedback (Compound Reports Only) Using IPv6</name>
<thead> <thead>
<tr> <tr>
<td align='center'>Tf (seconds)</td> <th align='center'>Tf (seconds)</th>
<td align='center'>Nr (frames)</td> <th align='center'>Nr (frames)</th>
<td align='center'>rtcp_bw (kbps)</td> <th align='center'>rtcp_bw (kbps)</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
<td> 2 </td> <td> 2 </td>
<td> 64.8 </td> <td> 64.8 </td>
</tr> </tr>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
skipping to change at line 535 skipping to change at line 552
</table> </table>
<t> <t>
Repeating the calculations from <xref target="voip_rtcp_bw_non-compoun d"/> Repeating the calculations from <xref target="voip_rtcp_bw_non-compoun d"/>
using IPv6 gives the results shown in <xref target="voip_rtcp_bw_non-c ompound_ipv6"/>. using IPv6 gives the results shown in <xref target="voip_rtcp_bw_non-c ompound_ipv6"/>.
As can be seen, the overhead still increases with IPv6 when As can be seen, the overhead still increases with IPv6 when
a mix of compound and reduced-size reports is used, but the a mix of compound and reduced-size reports is used, but the
effect is less pronounced than with compound reports only. effect is less pronounced than with compound reports only.
</t> </t>
<table anchor='voip_rtcp_bw_non-compound_ipv6'> <table anchor='voip_rtcp_bw_non-compound_ipv6'>
<name>Required RTCP bandwidth for VoIP feedback (alternating compound and reduced-size reports) using IPv6</name> <name>Required RTCP Bandwidth for VoIP Feedback (Alternating Compound and Reduced-Size Reports) Using IPv6</name>
<thead> <thead>
<tr> <tr>
<td align='center'>Tf (seconds)</td> <th align='center'>Tf (seconds)</th>
<td align='center'>Nr (frames)</td> <th align='center'>Nr (frames)</th>
<td align='center'>rtcp_bw (kbps)</td> <th align='center'>rtcp_bw (kbps)</th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
<td> 2 </td> <td> 2 </td>
<td> 49.2 </td> <td> 49.2 </td>
</tr> </tr>
<tr> <tr>
<td> 0.020 </td> <td> 0.020 </td>
skipping to change at line 593 skipping to change at line 610
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
<section title="Scenario 2: Point-to-Point Video Conference" anchor="sec-p 2p-video"> <section title="Scenario 2: Point-to-Point Video Conference" anchor="sec-p 2p-video">
<t> <t>
Consider a point-to-point Consider a point-to-point
video call between two end systems. There will be four RTP flows in video call between two end systems. There will be four RTP flows in
this scenario, two audio and two video, with all four flows being this scenario (two audio and two video), with all four flows being
active for essentially all the time (the audio flows will likely active for essentially all the time (the audio flows will likely
use voice activity detection and comfort noise to reduce the packet use voice activity detection and comfort noise to reduce the packet
rate during silent periods, but this does not cause the transmissions to rate during silent periods, but this does not cause the transmissions to
stop). stop).
</t> </t>
<t> <t>
Assume all four flows are sent in a single RTP session, each using Assume all four flows are sent in a single RTP session, each using
a separate SSRC. The RTCP reports from the co-located audio and video a separate SSRC. The RTCP reports from the co-located audio and video
SSRCs at each end point are aggregated <xref target="RFC8108"/>, SSRCs at each end point are aggregated <xref target="RFC8108"/>,
the optimisations in <xref target="RFC8861"/> are used, and RTCP the optimizations in <xref target="RFC8861"/> are used, and RTCP
congestion control feedback is sent <xref target="RFC8888"/>. congestion control feedback is sent <xref target="RFC8888"/>.
</t> </t>
<t> <t>
As in <xref target="sec-p2p-audio"/>, when all members are senders As in <xref target="sec-p2p-audio"/>, when all members are senders,
the RTCP reporting interval calculation the RTCP reporting interval calculation in Sections <xref target="RFC3
in Section 6.2 and 6.3 of <xref target="RFC3550"/> and <xref target="R 550" section="6.2"
FC4585"/> sectionFormat="bare"/> and <xref target="RFC3550"
reduces to: section="6.3" sectionFormat="bare"/>
<xref target="RFC3550"/> and in <xref target="RFC4585"/> reduces to:
</t> </t>
<blockquote> <artwork name="" type="" align="left"><![CDATA[
<artwork> Trtcp = n * Srtcp / Brtcp
Trtcp = n * Srtcp / Brtcp ]]></artwork>
</artwork>
</blockquote>
<t> <t>
where n is the number of members in the session, Srtcp is the where n is the number of members in the session, Srtcp is the
average RTCP packet size in octets, and the Brtcp is the RTCP average RTCP packet size in octets, and Brtcp is the RTCP
bandwidth in octets per second. bandwidth in octets per second.
</t> </t>
<t> <t>
The average RTCP packet size, Srtcp, depends on the amount of feedback The average RTCP packet size (Srtcp) depends on the amount of feedback
sent in each RTCP packet, on the number of members in the sent in each RTCP packet, the number of members in the
session, on the size of source description (RTCP SDES) information session, the size of source description (RTCP SDES) information
sent, and on the amount of congestion control feedback sent in each sent, and the amount of congestion control feedback sent in each
packet. packet.
</t> </t>
<t> <t>
As a baseline, each RTCP packet will be a compound RTCP packet that As a baseline, each RTCP packet will be a compound RTCP packet that
contains an aggregate of a compound RTCP packet generated by the contains an aggregate of a compound RTCP packet generated by the
video SSRC and a compound RTCP packet generated by the audio SSRC. video SSRC and a compound RTCP packet generated by the audio SSRC.
When the RTCP reporting group extensions are used, one of these When the RTCP reporting group extensions are used, one of these
SSRCs will be a reporting SSRC, to which the other SSRC will have SSRCs will be a reporting SSRC, to which the other SSRC will have
delegated its reports. No reduced-size RTCP packets are sent. delegated its reports. No reduced-size RTCP packets are sent.
</t> </t>
<t> <t>
The aggregated compound RTCP packet from the non-reporting SSRC The aggregated compound RTCP packet from the non-reporting SSRC
will contain an RTCP SR packet, an RTCP SDES packet, and an RTCP will contain an RTCP SR packet, an RTCP SDES packet, and an RTCP
RGRS packet. The RTCP SR packet contains the 28 octet UDP/IP header Reporting Group Reporting Sources (RGRS) packet. The RTCP SR packet
contains the 28-octet UDP/IP header
(assuming IPv4 with no options) and (assuming IPv4 with no options) and
sender information, but no report blocks (since the reporting is sender information but no report blocks (since the reporting is
delegated). The RTCP SDES packet will comprise a header (4 octets), delegated). The RTCP SDES packet will comprise a header (4 octets),
originating SSRC (4 octets), a CNAME chunk, a terminating chunk, the originating SSRC (4 octets), a CNAME chunk, a terminating chunk,
and any padding. If the CNAME follows <xref target="RFC7022"/> and and any padding. If the CNAME follows <xref target="RFC7022"/> and
<xref target="RFC8834"/> the CNAME chunk will be 18 octets in <xref target="RFC8834"/>, the CNAME chunk will be 18 octets in
size, and will be followed by one octet of padding and one terminating size and will be followed by one octet of padding and one terminating
null octet to align the SDES packet to a 32-bit boundary null octet to align the SDES packet to a 32-bit boundary
(<xref target="RFC3550"/>, section 6.5), making the SDES packet 28 (<xref target="RFC3550" sectionFormat="comma" section="6.5"/>), making the SDES packet 28
octets in size. The RTCP RGRS packet will be 12 octets in size. octets in size. The RTCP RGRS packet will be 12 octets in size.
This gives a total of 28 + 28 + 12 = 68 octets. This gives a total of 28 + 28 + 12 = 68 octets.
</t> </t>
<t> <t>
The aggregated compound RTCP packet from the reporting SSRC will The aggregated compound RTCP packet from the reporting SSRC will
contain an RTCP SR packet, an RTCP SDES packet, and an RTCP contain an RTCP SR packet, an RTCP SDES packet, and an RTCP
congestion control feedback packet. congestion control feedback packet.
The RTCP SR packet will contain two report blocks, one for each of The RTCP SR packet will contain two report blocks, one for each of
the remote SSRCs (the report for the other local SSRC is suppressed the remote SSRCs (the report for the other local SSRC is suppressed
by the reporting group extension), for a total of 28 + (2 * 24) = by the reporting group extension), for a total of 28 + (2 * 24) =
76 octets. 76 octets. The RTCP SDES packet will
The RTCP SDES packet will comprise a header (4 octets), originating comprise a header (4 octets), originating SSRC (4 octets), a CNAME
SSRC (4 octets), a CNAME chunk, an RGRP chunk, a terminating chunk, chunk, a Reporting Group (RGRP) chunk, a terminating chunk, and any
and any padding. If the CNAME follows <xref target="RFC7022"/> and padding. If the CNAME follows <xref target="RFC7022"/> and <xref
<xref target="RFC8834"/> it will be 18 octets in target="RFC8834"/>, it will be 18 octets in size.
size. The RGRP chunk similarly comprises 18 octets, and 3 octets of The RGRP chunk similarly comprises 18 octets, the terminating
padding are needed, for a total of 48 octets. chunk is comprised of 1 octet, and 3 octets of padding are needed,
for a total of 48 octets.
The RTCP congestion control feedback (CCFB) report comprises an 8-octe t The RTCP congestion control feedback (CCFB) report comprises an 8-octe t
RTCP header and SSRC, a 4-octet report timestamp, and for each of the RTCP header and SSRC, a 4-octet report timestamp, and for
remote each of the remote audio and video SSRCs, an 8-octet report header, 2 o
audio and video SSRCs, an 8-octet report header, and 2 octets per pack ctets per packet
et reported upon, and padding to a 4-octet boundary if needed; that is,
reported upon, and padding to a 4-octet boundary if needed; that is 8 + 4 + 8 + (2 * Nv) + 8 + (2 * Na), where Nv is the number of video
8 + 4 + 8 + (2 * Nv) + 8 + (2 * Na) where Nv is the number of video packets per report and Na is the number of audio packets per report.
packets per report, and Na is the number of audio packets per report.
</t> </t>
<t> <t>
The complete compound RTCP packet contains the RTCP packets from The complete compound RTCP packet contains the RTCP packets from
both the reporting and non-reporting SSRCs, an SRTCP trailer and authe ntication both the reporting and non-reporting SSRCs, an SRTCP trailer and authe ntication
tag, and a UDP/IPv4 header. The size of this RTCP packet is therefore: tag, and a UDP/IPv4 header. The size of this RTCP packet is therefore
262 + (2 * Nv) + (2 * Na) octets. 262 + (2 * Nv) + (2 * Na) octets.
Since the aggregate RTCP packet contains reports from two SSRCs, the Since the aggregate RTCP packet contains reports from two SSRCs, the
RTCP packet size is halved before use <xref target="RFC8108"/>. RTCP packet size is halved before use <xref target="RFC8108"/>.
Accordingly, the size of the RTCP packets is: Accordingly, the size of the RTCP packets is:
</t> </t>
<blockquote> <artwork name="" type="" align="left"><![CDATA[
<artwork> Srtcp = (262 + (2 * Nv) + (2 * Na)) / 2
Srtcp = (262 + (2 * Nv) + (2 * Na)) / 2 ]]></artwork>
</artwork>
</blockquote>
<t> <t>
How many RTP packets does the RTCP XR congestion control feedback How many RTP packets does the RTCP XR congestion control feedback
packet, included in these compound RTCP packets, report on? That is, packet, included in these compound RTCP packets, report on? That is,
what are the values of Nv and Na? what are the values of Nv and Na?
This depends on the RTCP reporting interval, Trtcp, the video bit This depends on the RTCP reporting interval (Trtcp), the video bit
rate and frame rate, Rf, the audio bit rate and framing interval, rate and frame rate (Rf), the audio bit rate and framing interval,
and whether the receiver chooses to send congestion control feedback and whether the receiver chooses to send congestion control feedback
in each RTCP packet it sends. in each RTCP packet it sends.
</t> </t>
<t> <t>
To simplify the calculation, assume it is desired to send one RTCP To simplify the calculation, assume it is desired to send one RTCP
report for each frame of video received (i.e., Trtcp = 1 / Rf) and report for each frame of video received (i.e., Trtcp = 1 / Rf) and
to include a congestion control feedback packet in each report. to include a congestion control feedback packet in each report.
Assume that video has constant bit rate and frame rate, and that Assume that video has a constant bit rate and frame rate and that
each frame of video has to fit into a 1500 octet MTU. Further, each frame of video has to fit into a 1500-octet MTU. Further,
assume that the audio takes negligible bandwidth, and that the assume that the audio takes negligible bandwidth and that the
audio framing interval can be varied within reasonable bounds, so audio framing interval can be varied within reasonable bounds, so
that an integral number of audio frames align with video frame that an integral number of audio frames align with video frame
boundaries. boundaries.
</t> </t>
<t> <t>
<xref target="scenario2-compound"/> shows the resulting values of <xref target="scenario2-compound"/> shows the resulting values of
Nv and Na, the number of video and audio packets covered by each Nv and Na (the number of video and audio packets covered by each
congestion control feedback report, for a range of data rates and congestion control feedback report) for a range of data rates and
video frame rates, assuming congestion control feedback is sent video frame rates, assuming congestion control feedback is sent
once per video frame. once per video frame.
The table also shows the result of inverting the RTCP reporting The table also shows the result of inverting the RTCP reporting
interval calculation to find the corresponding RTCP bandwidth, interval calculation to find the corresponding RTCP bandwidth
Brtcp. The RTCP bandwidth is given in kbps and as a fraction of (Brtcp). The RTCP bandwidth is given in kbps and as a fraction of
the data rate. the data rate.
</t> </t>
<t> <t>
It can be seen that, for example, with a date rate of 1024 kbps It can be seen that, for example, with a data rate of 1024 kbps
and video sent at 30 frames-per-second, the RTCP congestion control and a video sent at 30 frames per second, the RTCP congestion control
feedback report sent for each video frame will include reports on feedback report sent for each video frame will include reports on
3 video packets and 2 audio packets. The RTCP bandwidth needed to 3 video packets and 2 audio packets. The RTCP bandwidth needed to
sustain this reporting rate is 127.5kbps (12% of the data rate). sustain this reporting rate is 127.5 kbps (12% of the data rate).
This assumes an audio framing interval of 16.67ms, so that two This assumes an audio framing interval of 16.67 ms, so that 2
audio packets are sent for each video frame. audio packets are sent for each video frame.
</t> </t>
<table anchor='scenario2-compound'> <table anchor='scenario2-compound'>
<name>Required RTCP bandwidth, reporting on every frame</name> <name>Required RTCP Bandwidth, Reporting on Every Frame</name>
<thead> <thead>
<tr> <tr>
<td align='center'> Data Rate (kbps) </td> <th align='center'> Data Rate (kbps) </th>
<td align='center'> Video Frame Rate: Rf </td> <th align='center'> Video Frame Rate: Rf </th>
<td align='center'> Video Packets per Report: Nv </td> <th align='center'> Video Packets per Report: Nv </th>
<td align='center'> Audio Packets per Report: Na </td> <th align='center'> Audio Packets per Report: Na </th>
<td align='center'> Required RTCP bandwidth: Brtcp (kbps) </td> <th align='center'> Required RTCP Bandwidth: Brtcp (kbps) </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> 100 </td> <td> 100 </td>
<td> 8 </td> <td> 8 </td>
<td> 1 </td> <td> 1 </td>
<td> 6 </td> <td> 6 </td>
<td> 34.5 (34%) </td> <td> 34.5 (34%) </td>
</tr> </tr>
skipping to change at line 843 skipping to change at line 859
<td> 4096 </td> <td> 4096 </td>
<td> 60 </td> <td> 60 </td>
<td> 6 </td> <td> 6 </td>
<td> 1 </td> <td> 1 </td>
<td> 258.8 ( 6%) </td> <td> 258.8 ( 6%) </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<!--
<t>
The RTCP bandwidth needed scales inversely with the report frequency.
That is, it is halved when reporting on every second frame, reduced
to one-third when reporting on every third frame, and so on.
</t>
<t> <t>
The needed RTCP bandwidth scales as a percentage Use of reduced-size RTCP <xref target="RFC5506"/> would allow the SR
of the data rate following the ratio of the frame rate to the data and SDES packets to be omitted from some reports. These reduced-size
rate. As can be seen from the table above, the RTCP bandwidth needed
is a significant fraction of the media rate if reporting on every
frame for low rate video. This can be solved by reporting less often
at lower rates. For example, to report on every frame of 8fps
video sent at 100kbps requires the RTCP bandwidth to be 34% of the med
ia rate;
reporting every fourth frame (i.e., twice per second) reduces this
overhead to 5%.
</t>
<t>
Use of reduced size RTCP <xref target="RFC5506"/> would allow the SR
and SDES packets to be omitted from some reports. These "reduced-size"
RTCP packets would RTCP packets would
contain an RTCP RGRS packet from the non-reporting SSRC, and an RTCP contain an RTCP RGRS packet from the non-reporting SSRC and an RTCP
SDES RGRP packet and a congestion control feedback packet from the SDES RGRP packet and a congestion control feedback packet from the
reporting SSRC. This will be 12 + 28 + 12 + 8 + 2*Nv + 8 + 2*Na octets reporting SSRC. This will be 12 + 28 + 12 + 8 + (2 * Nv) + 8 + (2 * Na
, ) octets,
plus the SRTCP trailer and authentication tag, and a UDP/IP header. plus the SRTCP trailer and authentication tag and a UDP/IP header.
That is, the size of the reduced-size packets would be (110 + 2*Nv + 2 That is, the size of the reduced-size packets would be (110 + (2 * Nv)
*Na)/2 + (2 * Na)) / 2
octets. Repeating the analysis above, octets. Repeating the analysis above,
but alternating compound and reduced-size reports gives results as sho wn but alternating compound and reduced-size reports, gives the results s hown
in <xref target="scenario2-compound-noncompound"/>. in <xref target="scenario2-compound-noncompound"/>.
</t> </t>
<table anchor='scenario2-compound-noncompound'> <table anchor='scenario2-compound-noncompound'>
<name>Required RTCP bandwidth, reporting on every frame, with reduced- size reports</name> <name>Required RTCP Bandwidth, Reporting on Every Frame, with Reduced- Size Reports</name>
<thead> <thead>
<tr> <tr>
<td align='center'> Data Rate (kbps) </td> <th align='center'> Data Rate (kbps) </th>
<td align='center'> Video Frame Rate: Rf </td> <th align='center'> Video Frame Rate: Rf </th>
<td align='center'> Video Packets per Report: Nv </td> <th align='center'> Video Packets per Report: Nv </th>
<td align='center'> Audio Packets per Report: Na </td> <th align='center'> Audio Packets per Report: Na </th>
<td align='center'> Required RTCP bandwidth: Brtcp (kbps) </td> <th align='center'> Required RTCP Bandwidth: Brtcp (kbps) </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> 100 </td> <td> 100 </td>
<td> 8 </td> <td> 8 </td>
<td> 1 </td> <td> 1 </td>
<td> 6 </td> <td> 6 </td>
<td> 25.0 (25%) </td> <td> 25.0 (25%) </td>
</tr> </tr>
skipping to change at line 982 skipping to change at line 978
<td> 6 </td> <td> 6 </td>
<td> 1 </td> <td> 1 </td>
<td> 187.5 ( 4%) </td> <td> 187.5 ( 4%) </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<t> <t>
The use of reduced-size RTCP gives a noticeable reduction in the The use of reduced-size RTCP gives a noticeable reduction in the
needed RTCP bandwidth, and can be combined with reporting every needed RTCP bandwidth and can be combined with reporting every
few frames rather than every frame. Overall, it is clear that few frames, rather than every frame. Overall, it is clear that
the RTCP overhead can be reasonable across the range of data and the RTCP overhead can be reasonable across the range of data and
frame rates, if RTCP is configured carefully. frame rates if RTCP is configured carefully.
</t> </t>
<t> <t>
As discussed in <xref target="sec-p2p-audio"/>, the reporting overhead will As discussed in <xref target="sec-p2p-audio"/>, the reporting overhead will
increase if IPv6 is used, due to the increased size of the IPv6 increase if IPv6 is used, due to the increased size of the IPv6
header. <xref target="scenario2-compound-noncompound-ipv6"/> shows header. <xref target="scenario2-compound-noncompound-ipv6"/> shows
the overhead in this case, compared to the overhead in this case, compared to
<xref target="scenario2-compound-noncompound"/>. As can be seen, <xref target="scenario2-compound-noncompound"/>. As can be seen,
the increase in overhead due to IPv6 rapidly becomes less significant as the data the increase in overhead due to IPv6 rapidly becomes less significant as the data
rate increases. rate increases.
</t> </t>
<table anchor='scenario2-compound-noncompound-ipv6'> <table anchor='scenario2-compound-noncompound-ipv6'>
<name>Required RTCP bandwidth, reporting on every frame, with reduced- size reports, using IPv6</name> <name>Required RTCP Bandwidth, Reporting on Every Frame, with Reduced- Size Reports, Using IPv6</name>
<thead> <thead>
<tr> <tr>
<td align='center'> Data Rate (kbps) </td> <th align='center'> Data Rate (kbps) </th>
<td align='center'> Video Frame Rate: Rf </td> <th align='center'> Video Frame Rate: Rf </th>
<td align='center'> Video Packets per Report: Nv </td> <th align='center'> Video Packets per Report: Nv </th>
<td align='center'> Audio Packets per Report: Na </td> <th align='center'> Audio Packets per Report: Na </th>
<td align='center'> Required RTCP bandwidth: Brtcp (kbps) </td> <th align='center'> Required RTCP Bandwidth: Brtcp (kbps) </th>
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<tr> <tr>
<td> 100 </td> <td> 100 </td>
<td> 8 </td> <td> 8 </td>
<td> 1 </td> <td> 1 </td>
<td> 6 </td> <td> 6 </td>
<td> 27.5 (27%) </td> <td> 27.5 (27%) </td>
</tr> </tr>
skipping to change at line 1101 skipping to change at line 1097
<td> 60 </td> <td> 60 </td>
<td> 6 </td> <td> 6 </td>
<td> 1 </td> <td> 1 </td>
<td> 206.2 ( 5%) </td> <td> 206.2 ( 5%) </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
</section> </section>
<!--
<section title="Scenario 3: Group Video Conference" anchor="sec-group-vide
o">
<t>
Group video conferences can be implemented using a centralised
model, where each participant sends the audio, a video thumbnail,
and a full quality video stream to a central mixer, and the mixer
forwards a subset of the audio and full quality video streams
for the active speakers, along with the thumbnail-sized streams
for the other participants.
</t>
<t>
In this model, congestion control for the RTP streams sent from the
participants to the mixer is handled similarly to the scenario in
<xref target="sec-p2p-video"/>.
</t>
<t>
In this model, each participant sends three RTP streams to the mixer,
each using a different SSRC, representing audio, video thumbnail, and
full-size video. The mixer sends to each participant a total of Np
thumbnail video streams, where Np is the number of participants in the
conference, with each stream using its own SSRC. In addition, the
mixer forwards the full size video and audio streams for the active
speaker, using SSRCs representing the mixed audio and switched video.
Each leg of the conference therefore sees three RTP streams flowing
from the participant to mixer, and (Np - 1) + 2 RTP streams flowing
from mixer to the participant (Np - 1 RTP streams sending the thumbnai
ls
from the other participants, and two streams for the audio and video
from the active speaker).
</t>
<t>
Assume that the RTCP reports for the audio and video sent from the
participant are aggregated into compound packets <xref target="RFC8108
"/>
and the RTCP grouping extensions from <xref target="RFC8861"/> are use
d.
Similarly, assume that RTCP reports for the video thumbnail streams, t
he
audio stream, and the full size video stream are generated by the mixe
r,
aggregated into compound packets, and the RTCP grouping extensions are
used.
</t>
<t>
As in the point-to-point video scenario described <xref target="sec-p2
p-video"/>,
since all members are senders the RTCP timing rules in Section 6.2 and
6.3 of <xref target="RFC3550"/> and <xref target="RFC4585"/> reduce to
:
<blockquote>
<artwork>
Trtcp = Srtcp * n / Brtcp
</artwork>
</blockquote>
where n is the number of members in the session, Srtcp is the average
RTCP packet size measured in octets, and Brtcp is the RTCP bandwidth
in octets per second.
</t>
<t>
The number of members in the session, n = Np + 4. Each participant
sends a thumbnail video stream, and there is one audio and one full
size video stream flowing from participant to mixer, and one audio
and one full size video stream flowing from mixer to participant.
The mixer does not forward the participant's thumbnail back to it.
</t>
<t>
The RTCP packets sent by the participant will all be compound RTCP
packets containing...
They have size...
</t>
<t>
The RTCP packets sent by the mixer will all be compound RTCP packets
containing...
They have size...
</t>
<t>
The average RTCP packet size, Srtcp, will therefore be...
</t>
<t>
</t>
<!--
<t>
Audio: 20ms frames, at a range of bit rates (the bit rate is likely
unimportant). Every participant sends. Middlebox forwards 5 streams
to all participants.
</t>
<t>
Main video: 30fps, 500kbps
</t>
<t>
Thumb video: 10-15 streams, 1 packet per frame, low rate (7fps?)
</t>
-->
<!--
<t>
Other implementation strategies for group video conferences exist,
using different RTP topologies. This analysis in this section is
intended to be representative of the congestion control bandwidth
overhead, rather than being an exact match for the implementation
strategy of any particular product.
</t>
</section>
</section> </section>
<section title="Discussion and Conclusions"> <section title="Discussion and Conclusions">
<t> <t>
Practical systems will generally send some non-media traffic on the Practical systems will generally send some non-media traffic on the
same path as the media traffic. This can include STUN/TURN packets same path as the media traffic. This can include Session Traversal Utili
to keep-alive NAT bindings <xref target="RFC8445"/>, WebRTC Data ties for NAT (STUN) / Traversal Using Relays around NAT (TURN) packets
Channel packets <xref target="RFC8831"/>, etc. Such traffic also to keep alive NAT bindings <xref target="RFC8445"/>, WebRTC data
channel packets <xref target="RFC8831"/>, etc. Such traffic also
needs congestion control, but the means by which this is achieved needs congestion control, but the means by which this is achieved
is out of scope of this memo. is out of the scope of this memo.
</t> </t>
<t> <t>
RTCP as it is currently specified cannot be used to send per-packet RTCP, as it is currently specified, cannot be used to send per-packet
congestion feedback with reasonable overhead. congestion feedback with reasonable overhead.
</t> </t>
<t> <t>
RTCP can, however, be used to send congestion RTCP can, however, be used to send congestion
feedback on each frame of video sent, provided the session bandwidth feedback on each frame of video sent, provided the session bandwidth
exceeds a couple of megabits per second (the exact rate depending on exceeds a couple of megabits per second (the exact rate depends on
the number of session participants, the RTCP bandwidth fraction, and the number of session participants, the RTCP bandwidth fraction,
what RTCP extensions are enabled, and how much detail of feedback is what RTCP extensions are enabled, and how much detail of feedback is
needed). For lower rate sessions, the overhead of reporting on every needed). For lower-rate sessions, the overhead of reporting on every
frame becomes high, but can be reduced to something reasonable by frame becomes high but can be reduced to something reasonable by
sending reports once per N frames (e.g., every second frame), or by sending reports once per N frames (e.g., every second frame) or by
sending reduced-size RTCP reports in between the regular reports. sending reduced-size RTCP reports in between the regular reports.
The improved compression of new video codecs exacerbates the The improved compression of new video codecs exacerbates the
reporting overhead for a given video quality level, although this reporting overhead for a given video quality level, although this
is to some extent countered by the use of higher quality video is to some extent countered by the use of higher-quality video
over time. over time.
</t> </t>
<t> <t>
If it is desired to use RTCP in something close to its current form If it is desired to use RTCP in something close to its current form
for congestion feedback in WebRTC, the multimedia congestion control for congestion feedback in WebRTC, the multimedia congestion control
algorithm needs to be designed to work with feedback sent every few algorithm needs to be designed to work with feedback sent every few
frames, since that fits within the limitations of RTCP. The provided fee dback frames, since that fits within the limitations of RTCP. The provided fee dback
will be more detailed than just an acknowledgement, however, and will pr ovide will be more detailed than just an acknowledgement, however, and will pr ovide
a loss bitmap, relative arrival time, and received ECN marks, for each a loss bitmap, relative arrival time, and received Explicit Congestion N otification (ECN) marks for each
packet sent. This will allow congestion control packet sent. This will allow congestion control
that is effective, if slowly responsive, to be implemented (there is that is effective, if slowly responsive, to be implemented (there is
guidance on providing effective congestion control in Section 3.1 of guidance on providing effective congestion control in <xref target="RFC8
<xref target="RFC8085"/>). 085" section="3.1" sectionFormat="of"/>).
</t> </t>
<t> <t>
The format described in <xref target="RFC8888"/> The format described in <xref target="RFC8888"/>
seems sufficient for the needs of congestion control feedback. There seems sufficient for the needs of congestion control feedback. There
is little point optimising this format: the main overhead comes from is little point optimizing this format; the main overhead comes from
the UDP/IP headers and the other RTCP packets included in the compound the UDP/IP headers and the other RTCP packets included in the compound
packets, and can be lowered by using the <xref target="RFC5506"/> packets and can be lowered by using the extensions described in
extensions and sending reports less frequently. The use of header <xref target="RFC5506"/> and sending reports less frequently. The use of
compression <xref target="RFC2508"/>, <xref target="RFC3545"/>, header
compression <xref target="RFC2508"/> <xref target="RFC3545"/>
<xref target="RFC5795"/> can also be beneficial. <xref target="RFC5795"/> can also be beneficial.
</t> </t>
<t> <t>
Further study of the scenarios of interest is needed, to ensure that Further study of the scenarios of interest is needed to ensure that
the analysis presented is applicable to other media topologies the analysis presented is applicable to other media topologies
<xref target="RFC7667"/>, and to sessions with different data rates <xref target="RFC7667"/> and to sessions with different data rates
and sizes of membership. and sizes of membership.
</t> </t>
</section> </section>
<section title="Security Considerations"> <section title="Security Considerations">
<t> <t>
An attacker that can modify or spoof RTCP congestion control feedback An attacker that can modify or spoof RTCP congestion control feedback
packets can manipulate the sender behaviour to cause denial of service. packets can manipulate the sender behavior to cause denial of service.
This can be prevented by authentication and integrity protection of This can be prevented by authentication and integrity protection of
RTCP packets, for example using the secure RTP profile RTCP packets, for example, using the secure RTP profile
<xref target="RFC3711"/><xref target="RFC5124"/>, or by other means <xref target="RFC3711"/> <xref target="RFC5124"/> or other means
as discussed in <xref target="RFC7201"/>. as discussed in <xref target="RFC7201"/>.
</t> </t>
</section> </section>
<section title="IANA Considerations"> <section title="IANA Considerations">
<t> <t>
There are no actions for IANA. This document has no IANA actions.
</t> </t>
</section> </section>
<section anchor="Acknowledgements" title="Acknowledgements">
<t>
Thanks to Bernard Aboba, Martin Duke, Linda Dunbar, Gorry Fairhurst,
Ingemar Johansson, Shuping Peng, Alvaro Retana, Zahed Sarker, John
Scudder, Éric Vyncke, Magnus Westerlund, and the members of the RMCAT
feedback design team for their feedback.
</t>
</section>
</middle> </middle>
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - --> <!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->
<back> <back>
<references title="Normative References"> <references title="Normative References">
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.291 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.291
4.xml"/> 4.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.355 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.355
0.xml"/> 0.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.371 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.371
1.xml"/> 1.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.458 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.458
5.xml"/> 5.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.512 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.512
4.xml"/> 4.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.550 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.550
6.xml"/> 6.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.702 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.702
2.xml"/> 2.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.720 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.720
1.xml"/> 1.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.810 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.810
8.xml"/> 8.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.808 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.808
3.xml"/> 3.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.808 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.808
5.xml"/> 5.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.882 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.882
5.xml"/> 5.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.883 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.883
4.xml"/> 4.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.886 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.886
1.xml"/> 1.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.887 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.887
2.xml"/> 2.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.888 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.888
8.xml"/> 8.xml"/>
</references> </references>
<references title="Informative References"> <references title="Informative References">
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.250 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.250
8.xml"/> 8.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.344 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.344
9.xml"/> 9.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.354 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.354
5.xml"/> 5.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.361 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.361
1.xml"/> 1.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.534 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.534
8.xml"/> 8.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.579 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.579
5.xml"/> 5.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.766 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.766
7.xml"/> 7.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.844 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.844
5.xml"/> 5.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.883 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.883
1.xml"/> 1.xml"/>
<xi:include href="https://www.rfc-editor.org/refs/bibxml/reference.RFC.929 <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.929
3.xml"/> 3.xml"/>
</references> </references>
<section anchor="Acknowledgements" title="Acknowledgements" numbered="false"
>
<t>
Thanks to <contact fullname="Bernard Aboba"/>, <contact
fullname="Martin Duke"/>, <contact fullname="Linda Dunbar"/>,
<contact fullname="Gorry Fairhurst"/>, <contact
fullname="Ingemar Johansson"/>, <contact fullname="Shuping
Peng"/>, <contact fullname="Alvaro Retana"/>, <contact
fullname="Zahed Sarker"/>, <contact fullname="John Scudder"/>,
<contact fullname="Éric Vyncke"/>, <contact fullname="Magnus Westerlund"
/>, and the members of the RMCAT
feedback design team for their feedback.
</t>
</section>
</back> </back>
</rfc> </rfc>
<!-- vim: set ts=2 sw=2 tw=77 et ai: --> <!-- vim: set ts=2 sw=2 tw=77 et ai: -->
 End of changes. 113 change blocks. 
431 lines changed or deleted 327 lines changed or added

This html diff was produced by rfcdiff 1.48.