<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.25 (Ruby 3.1.2) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-sprang-avtcore-frame-acknowledgement-01" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="Video Frame Acknowledgement">RTCP Feedback Message and Request Mechanism for Frame-level Acknowledgement</title>

    <author fullname="Erik Språng">
      <organization>Google</organization>
      <address>
        <email>sprang@google.com</email>
      </address>
    </author>

    <date year="2025" month="October" day="10"/>

    <area>AREA</area>
    <workgroup>avtcore WG</workgroup>
    <keyword>RTP</keyword> <keyword>RTCP</keyword> <keyword>Header Extension</keyword> <keyword>Video</keyword> <keyword>LTR</keyword>

    <abstract>


<?line 68?>

<t>This document describes a mechanism for signaling which video frames have been received and decoded by a remote peer. It comprises an RTCP feedback message and an RTP header extension used to request said feedback.</t>

<t>One of the main use cases for this data is to implement various forms of Long Term Reference (LTR) reference structures.</t>



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://github.com/sprangerik/frame-acknowledgement/blob/main/draft-sprang-avtcore-frame-acknowledgement.md"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-sprang-avtcore-frame-acknowledgement/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        avtcore WG Working Group mailing list (<eref target="mailto:avt@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/avtcore"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/avt/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/sprangerik/frame-acknowledgement"/>.</t>
    </note>


  </front>

  <middle>


<?line 74?>

<section anchor="introduction"><name>Introduction</name>

<t>The most common way for realtime video to be transmitted is to encode a pretty much fixed scalability structure, such as those in the W3C <xref target="SVC"/> Scalability mode list.</t>

<t>In such a scenario, the video encoder produces frames "blindly" without real knowledge of what state the remote receiver is in. Using recovery mechanisms such as retransmission, forward error correction and fast-forwarding past skippable frames the receiver is assumed to be able to decode the video. In some cases those methods may not be enough, requiring keyframe requests to be sent as a last resort.</t>

<t>On the other hand, if the encoder is able to reason about which frames have been received and decoded it can be more proactive. One way is to store frames that are known to be received so that they can be later used as guaranteed good references in the case of e.g. large loss events, avoiding the need for potentially large retransmissions etc. Collectively this is often referred to as "Long Term Reference" structures or LTR for short, although the exact structure may vary.</t>

<t>In order to achieve this the sender must be able to reason about the state of the receiver, necessitating the need for feedback signals. In this document a new RTCP message called "Frame Acknowledgement" is introduced as a codec agnostic feedback message for this purpose. Further, an RTP header extension is introduced that allows the sender to actively request feedback on decoding of the associated frame. This allows the sender to both request quick feedback on frames that are important for latency, and enables resilience against loss of feedback packets.</t>

<t>Note that it is allowed to report a frame as decoded even if the decode process is not complete - as long as the receiver guarantees that it will attempt to decode the frame. The rationale for this is that we want to reduce the feedback delay as much as possible. Should the decoding of a frame that has been acknowledged fail, then the receiver <bcp14>MUST</bcp14> request a keyframe to recover, even if the failed decoding belongs to a droppable layer.</t>

</section>
<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>

<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

<t>For the purposes of this document, a "frame" is defined as any decodable unit of bitstream data that results in the update to the codec state (e.g. reference buffers, entropy tables, etc) that can be used as a reference for any subsequent decodable unit of bitstream data. Typically that will be a full frame, but also include cases such as a "no show" frame intended for later reference or even a part of a frame such as a tile or a slice if it is independently decodable and makes updates to encoder state that other tiles/frames can later reference.</t>

</section>
<section anchor="applicability"><name>Applicability</name>

<t>Frame Acknowledgement can be used for video streams in most topologies. It is also designed to be codec agnostic.</t>

<t>In terms of <xref target="RFC7667"/>, Point-to-Point is the most straightforward target as it is easiest to reason about a single receiver. A Media Translator or other systems that include a decoder are similarly easy - from the perspective of the sender the middle box is the receiver.</t>

<t>If a Transport Translator is used for Point-to-Multi-Point, then the middlebox must make sure to make valid translations. See section on <xref target="frame_id_considerations">Frame ID considerations</xref> below.</t>

</section>
<section anchor="existing-feedback-formats"><name>Existing Feedback Formats</name>

<t>This section provides an overview, for informational purposes, of some existing feedback formats that could be seen as alternatives.</t>

<t>NACK, defined in <xref target="RFC4585"/>, provides only requests for packets the receiver is interested in having retransmitted. Absence of feedback is a poor signal for acknowledgement, especially since said feedback can be lost.</t>

<t><xref target="RFC8888"/> and <xref target="TWCC"/> provide per-packet acknowledgement and so are more useful. A mapping from packet(s) to frame needs to happen but that is not a big problem. However, even if a frame is confirmed to be received there is no guarantee that it gets decoded.</t>

<t>Reference Picture Selection Indication (RPSI) is another existing message, but it puts the logic of requesting a particular reference frame in the receiver - significantly complicating the system especially in Point-to-Multi-Point systems. It is further codec specific, and several modern codecs lack a specification - including AV1 and H.266.</t>

<t>Loss Notification <xref target="LNTF"/> was a proposed RTCP message intended to solve most of these problems, but it lacks resilience against loss of feedback and also cannot handle out-of-order acknowledgements. The latter makes for instance single-SSRC simulcast structures (e.g. SxTx modes in <xref target="SVC"/>) impossible.</t>

</section>
<section anchor="requirements"><name>Requirements</name>

<t>The messages in this proposal are intended to fulfill the following requirements:</t>

<t><list style="numbers" type="1">
  <t>Codec agnostic
  The protocol should be general enough to work across all current and future codecs.</t>
  <t>Payload Invariant
  The protocol should not depend on data within the encoded bitstream payload. That includes codec specific frame identifiers, feedback requests and feedback messages.</t>
  <t>Uses Frame Identifiers
  Explicit marking of frames, rather than using an indirection via packets.</t>
  <t>Order Invariant
  The format should not make assumptions about the required decode order of frames.</t>
  <t>Send-side Controlled
  The sender explicitly indicates when and for which frames feedback should be sent.</t>
  <t>Loss Resilient
  The sender should be able to detect and recover from lost feedback messages.</t>
  <t>Low Delay
  The latency should be small, with the sender being able to tune delay vs rate tradeoff.</t>
  <t>Low Overhead
  The network overhead in terms of both packet rate and bitrate should be minimized.</t>
</list></t>

</section>
<section anchor="frame-acknowledgment-extension"><name>Frame Acknowledgment Extension</name>

<t>The Frame Acknowledgement extension is an RTP header extension used both to identify frames and request feedback about the remote state.
It <bcp14>SHOULD</bcp14> appear on the last packet of a video frame, and <bcp14>MUST NOT</bcp14> appear more than once on a single frame.</t>

<section anchor="frame-identifier"><name>Frame Identifier</name>

<t>In order to request and receive information about decoded frames, we must be able to identify them. The frame acknowledgement header extension may contain a Frame ID field for this purpose. The Frame ID is an 8-bit unsigned integer field, that wraps around to 0 on overflow.</t>

</section>
<section anchor="frame-acknowledgment-request"><name>Frame Acknowledgment Request</name>

<t>In order to get feedback on the state of the remote decoder, the sender actively requests such feedback using the same frame acknowledgement header extension that is also used for frame identification.
The feedback request comprises a Start Frame ID and Length field. Specifying the range explicitly has several advantages, including enabling reliable delivery of the feedback since the sender can effectively make retransmission requests of the feedback.</t>

<t>If a new Frame Acknowledgement Request is sent with an incremented Feedback Start, all status values prior to that Frame ID are considered as acknowledged and can be culled by the receiver. A sender <bcp14>MUST NOT</bcp14> request feedback prior to either the last acknowledged Frame ID or the start of the stream.</t>

</section>
<section anchor="frame-acknowledgment-request-data-layout"><name>Frame Acknowledgment Request Data Layout</name>

<t>This section describes the data layout for the Frame Acknowledgment RTP Header Extension.
The extension data starts with the FFR/Reserved byte.</t>

<t>For a One-Byte Header (as defined in <xref target="RFC5285"/>, Section 4.2), the <spanx style="verb">ID</spanx> field identifies the extension, and the <spanx style="verb">len</spanx> field is a 4-bit value <spanx style="verb">N</spanx> that indicates the number of data bytes following the <spanx style="verb">ID</spanx> and <spanx style="verb">len</spanx> fields, <em>minus one</em>. Thus, the total number of bytes for the extension data is <spanx style="verb">N+1</spanx>.</t>

<t>For a Two-Byte Header (as defined in <xref target="RFC5285"/>, Section 4.3), the <spanx style="verb">ID</spanx> field identifies the extension, and the 8-bit <spanx style="verb">length</spanx> field indicates the total number of bytes for the extension data (i.e., the FFR/Reserved byte plus any optional fields).</t>

<t><spanx style="verb">ascii-art
 Extension Data:
     0
     0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+
    |FFR| Reserved  |  (First byte of extension data)
    +-+-+-+-+-+-+-+-+
    |   Frame ID    |  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
    | Feedb. Start  |  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
    | Feedb. Length |  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
</spanx></t>

<section anchor="ffr-frameid-feedback-request-2-bits"><name>FFR: FrameID / Feedback Request (2 bits)</name>

<t>This field is located in the first byte of the extension data. It indicates the presence and meaning of the subsequent optional fields. The total number of bytes for the extension data (and thus the value of <spanx style="verb">N</spanx> for the one-byte header's <spanx style="verb">len</spanx> field, or the <spanx style="verb">length</spanx> field for two-byte headers) depends on the FFR value:</t>

<t><list style="symbols">
  <t><strong>00: Frame ID only.</strong>
The FFR/Reserved byte is followed by a one-byte Frame ID field.
Total extension data bytes = 1 (FFR/Reserved + Frame ID).
For one-byte header: <spanx style="verb">len</spanx> = 0.
For two-byte header: <spanx style="verb">length</spanx> = 1.
No feedback is explicitly requested by this header.</t>
  <t><strong>01: Frame ID + implicit feedback request.</strong>
The FFR/Reserved byte is followed by a one-byte Frame ID field.
Total extension data bytes = 1 (FFR/Reserved + Frame ID).
For one-byte header: <spanx style="verb">len</spanx> = 0.
For two-byte header: <spanx style="verb">length</spanx> = 1.
Feedback is requested for the frame identified by Frame ID (i.e., Feedback Start = Frame ID, Feedback Length = 1).</t>
  <t><strong>10: Frame ID + independent feedback request.</strong>
The FFR/Reserved byte is followed by three bytes: a one-byte Frame ID, a one-byte Feedback Start, and a one-byte Feedback Length field.
Total extension data bytes = 3 (FFR/Reserved + Frame ID + Feedback Start + Feedback Length).
For one-byte header: <spanx style="verb">len</spanx> = 2.
For two-byte header: <spanx style="verb">length</spanx> = 3.
This implies both a frame marking with Frame ID and an independent feedback request for the specified range.</t>
  <t><strong>11: Reserved for future use.</strong></t>
</list></t>

<t>The remaining 6 bits of the FFR/Reserved byte are reserved and <bcp14>SHOULD</bcp14> be set to 0.</t>

</section>
<section anchor="frame-id-8-bits"><name>Frame ID (8 bits)</name>

<t>Present if FFR is 00, 01, or 10.
An unsigned integer that uniquely identifies a frame. It <bcp14>MUST</bcp14> be incremented by one for each new frame (in sending order) that needs to be identified. It wraps around to 0 on overflow.</t>

</section>
<section anchor="feedback-start-8-bits"><name>Feedback Start (8 bits)</name>

<t>Present if FFR is 10 or 11.
An unsigned integer that corresponds to the first Frame ID (inclusive) the sender is requesting feedback for. It wraps around to 0 on overflow.</t>

</section>
<section anchor="feedback-length-8-bits"><name>Feedback Length (8 bits)</name>

<t>Present if FFR is 10 or 11.
An unsigned integer that indicates the number of consecutive frames the sender is requesting feedback for, starting from Feedback Start. A value of 0 means no frames are being requested. A value of 1 means only the frame identified by Feedback Start is requested. The range is Feedback Start to Feedback Start + Feedback Length - 1, inclusive, with wrap-around logic applied to Frame IDs.</t>

<t>Note that since the Frame ID, Feedback Start, and Feedback Length are 8-bit fields that wrap, care must be taken when calculating ranges. For example, a request with Feedback Start = 254 and Feedback Length = 3 indicates the sender is requesting feedback for frames with Frame IDs 254, 255, and 0.</t>

<t>If a sender is not interested in feedback for frames prior to and including a given Frame ID, it can effectively signal this by sending a request (FFR=01, 10, or 10) where the Feedback Start (or Frame ID for FFR=01) is more recent. This implicitly acknowledges prior frames up to the new Feedback Start. Alternatively, a Feedback Length of 0 can be used with FFR=10 if no specific frames need feedback but an acknowledgment point needs to be set.</t>

</section>
</section>
</section>
<section anchor="frame-acknowledgment-feedback-rtcp-message"><name>Frame Acknowledgment Feedback RTCP Message</name>

<t>The Frame Acknowledgement Feedback message is an RTCP message (<xref target="RFC4585"/>) containing a vector of status symbols, corresponding to the state for the frames requested in a Frame Acknowledgement Extension.</t>

<t>This message is identified by PT = RTPFB (205) and FMT = TBD (to be assigned by IANA, suggested value 12).</t>

<t><spanx style="verb">ascii-art
     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|  FMT    |   PT=RTPFB    |          length               |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                  SSRC of packet sender                        |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                  SSRC of media source                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    | Start FrameID |    Length     |      status vector + padding  |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                            ...                                |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
</spanx></t>

<section anchor="start-frame-id-8-bits"><name>Start Frame ID (8 bits)</name>

<t>The first Frame ID (inclusive) for which feedback is provided in this message. This corresponds to a Frame ID previously sent in a Frame Acknowledgment Request extension.</t>

</section>
<section anchor="length-8-bits"><name>Length (8 bits)</name>

<t>An unsigned integer denoting how many consecutive frames, starting from Start Frame ID, this message contains feedback for. The last Frame ID included in the feedback is (Start Frame ID + Length - 1), with wrap-around logic applied to Frame IDs. A Length of 0 indicates no feedback information is present, though this <bcp14>SHOULD NOT</bcp14> be sent.</t>

</section>
<section anchor="status-vector-variable-length"><name>status vector (variable length)</name>

<t>A bit vector of the size indicated by the Length field. Each bit corresponds to a Frame ID, starting from Start Frame ID and incrementing by one for each subsequent bit.
*   A value of <strong>0</strong> indicates the frame has not been received or has not been decoded (or is not expected to be decoded).
*   A value of <strong>1</strong> indicates the frame has been received and has been or will be decoded.</t>

<t>The status vector <bcp14>MUST</bcp14> be padded with 0 to 23 zero bits to align to the next 32-bit boundary if its length is not a multiple of 32 bits. This padding is not included in the Length field but is included in the RTCP packet's length field.</t>

</section>
</section>
<section anchor="frame_id_considerations"><name>Frame ID considerations</name>

<t>As stated above, the sender <bcp14>MUST</bcp14> increment the Frame ID by one for each new frame with the Frame Acknowledgement header extension present, in sending order. More than that, it must make sure that no wrap-around ambiguity can occur.
Since feedback is only really necessary for frames which the codec stores in a reference buffer pending future use, the number of outstanding frames is in practice limited by the number of available reference buffers. E.g. for AV1, the upper limit will be 8. Although the optimal behavior will be application dependent, it is often advisable to spread reference buffer usage out across an RTT and to cull earlier buffer usage once later frames have been acknowledged.</t>

<section anchor="point-to-multi-point"><name>Point-to-Multi-Point</name>

<t>When considering a multi-way application with an SFU/SFM-type relay in the middle, the middlebox may need to do translations/rewriting of Frame IDs such that the outgoing FrameIDs from a middlebox to a receiver still fulfill the requirement that the FrameIDs are incremented by one for each new frame that is marked for feedback. This must be true even if independent video streams for different senders are multiplexed onto the same SSRC. Further the middlebox should typically not acknowledge a frame to a sender unless all active receivers have acknowledged that frame.</t>

</section>
</section>
<section anchor="security-considerations"><name>Security Considerations</name>

<t>The messages in this proposal may expose a small amount of data, namely the number of frames that have been sent, and potentially in an indirect way which frames the sender sees as important for recovery.</t>

<t>This data should however not pose any significant privacy or security risks.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>

<t>The RTP header extension needs to have a URI identifier assigned by IANA. See <xref target="IANAEXT"/>.</t>

<t>The RTCP message uses PT = 205 (RTPFB, Generic RTP Feedback). As of writing, the next available FMT value is 12. A dedicated ID needs to be assigned by IANA. See <xref target="IANARTCP"/>.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">

<reference anchor="DD" target="https://aomediacodec.github.io/av1-rtp-spec/#dependency-descriptor-rtp-header-extension">
  <front>
    <title>Dependency Descriptor RTP Header Extension</title>
    <author >
      <organization>AOM</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANARTCP" target="https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml#rtp-parameters-4">
  <front>
    <title>FMT Values for RTPFB Payload Types</title>
    <author >
      <organization>IANA</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="IANAEXT" target="https://www.iana.org/assignments/rtp-parameters/rtp-parameters.xhtml#rtp-parameters-10">
  <front>
    <title>RTP Compact Header Extensions</title>
    <author >
      <organization>IANA</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference>

<reference anchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author fullname="B. Leiba" initials="B." surname="Leiba"/>
    <date month="May" year="2017"/>
    <abstract>
      <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="8174"/>
  <seriesInfo name="DOI" value="10.17487/RFC8174"/>
</reference>




    </references>

    <references title='Informative References' anchor="sec-informative-references">

<reference anchor="SVC" target="https://www.w3.org/TR/webrtc-svc">
  <front>
    <title>Scalable Video Coding (SVC) Extension for WebRTC</title>
    <author >
      <organization>W3C</organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="TWCC" target="https://datatracker.ietf.org/doc/html/draft-holmer-rmcat-transport-wide-cc-extensions-01">
  <front>
    <title>RTP Extensions for Transport-wide Congestion Control</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="VFTI" target="http://www.webrtc.org/experiments/rtp-hdrext/video-frame-tracking-id">
  <front>
    <title>Video Frame Tracking Id</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>
<reference anchor="LNTF" target="https://www.ietf.org/archive/id/draft-majali-avtcore-lntf-feedback-message-00.html">
  <front>
    <title>RTCP feedback Message for Loss Notification</title>
    <author >
      <organization></organization>
    </author>
    <date year="n.d."/>
  </front>
</reference>


<reference anchor="RFC7667">
  <front>
    <title>RTP Topologies</title>
    <author fullname="M. Westerlund" initials="M." surname="Westerlund"/>
    <author fullname="S. Wenger" initials="S." surname="Wenger"/>
    <date month="November" year="2015"/>
    <abstract>
      <t>This document discusses point-to-point and multi-endpoint topologies used in environments based on the Real-time Transport Protocol (RTP). In particular, centralized topologies commonly employed in the video conferencing industry are mapped to the RTP terminology.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7667"/>
  <seriesInfo name="DOI" value="10.17487/RFC7667"/>
</reference>

<reference anchor="RFC4585">
  <front>
    <title>Extended RTP Profile for Real-time Transport Control Protocol (RTCP)-Based Feedback (RTP/AVPF)</title>
    <author fullname="J. Ott" initials="J." surname="Ott"/>
    <author fullname="S. Wenger" initials="S." surname="Wenger"/>
    <author fullname="N. Sato" initials="N." surname="Sato"/>
    <author fullname="C. Burmeister" initials="C." surname="Burmeister"/>
    <author fullname="J. Rey" initials="J." surname="Rey"/>
    <date month="July" year="2006"/>
    <abstract>
      <t>Real-time media streams that use RTP are, to some degree, resilient against packet losses. Receivers may use the base mechanisms of the Real-time Transport Control Protocol (RTCP) to report packet reception statistics and thus allow a sender to adapt its transmission behavior in the mid-term. This is the sole means for feedback and feedback-based error repair (besides a few codec-specific mechanisms). This document defines an extension to the Audio-visual Profile (AVP) that enables receivers to provide, statistically, more immediate feedback to the senders and thus allows for short-term adaptation and efficient feedback-based repair mechanisms to be implemented. This early feedback profile (AVPF) maintains the AVP bandwidth constraints for RTCP and preserves scalability to large groups. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4585"/>
  <seriesInfo name="DOI" value="10.17487/RFC4585"/>
</reference>

<reference anchor="RFC8888">
  <front>
    <title>RTP Control Protocol (RTCP) Feedback for Congestion Control</title>
    <author fullname="Z. Sarker" initials="Z." surname="Sarker"/>
    <author fullname="C. Perkins" initials="C." surname="Perkins"/>
    <author fullname="V. Singh" initials="V." surname="Singh"/>
    <author fullname="M. Ramalho" initials="M." surname="Ramalho"/>
    <date month="January" year="2021"/>
    <abstract>
      <t>An effective RTP congestion control algorithm requires more fine-grained feedback on packet loss, timing, and Explicit Congestion Notification (ECN) marks than is provided by the standard RTP Control Protocol (RTCP) Sender Report (SR) and Receiver Report (RR) packets. This document describes an RTCP feedback message intended to enable congestion control for interactive real-time traffic using RTP. The feedback message is designed for use with a sender-based congestion control algorithm, in which the receiver of an RTP flow sends back to the sender RTCP feedback packets containing the information the sender needs to perform congestion control.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8888"/>
  <seriesInfo name="DOI" value="10.17487/RFC8888"/>
</reference>

<reference anchor="RFC5285">
  <front>
    <title>A General Mechanism for RTP Header Extensions</title>
    <author fullname="D. Singer" initials="D." surname="Singer"/>
    <author fullname="H. Desineni" initials="H." surname="Desineni"/>
    <date month="July" year="2008"/>
    <abstract>
      <t>This document provides a general mechanism to use the header extension feature of RTP (the Real-Time Transport Protocol). It provides the option to use a small number of small extensions in each RTP packet, where the universe of possible extensions is large and registration is de-centralized. The actual extensions in use in a session are signaled in the setup information for that session. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5285"/>
  <seriesInfo name="DOI" value="10.17487/RFC5285"/>
</reference>




    </references>

</references>


<?line 297?>

<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA91c23YbuZV951dg5IdINkmJku12tNJJ1LbVrTW+aCTanqys
rBhkgWSNi1WcQpVottv/Mi/zIzM/NvucA6BQRUq200keRn2xWMTlYOOcfS5A
eTAY9Kq0ysyp2rsaP71U58YkEz39oF4aa/XcKJ0n6sr8Z21shWfThc5Tu1Sz
olTnpV6aQWZuTKbOph/yYp2ZZG6WJq/2enoyKc0NRn2bJqaQttutproy86Lc
nKo0nxW9XlJMczQ8VUmpZ9XArkqdzwf6ppoWpRnMeELdHmRwNOrZerJMrU2L
vNqs0Pvi+fi8l9fLiSlPewnmOFXHR8ePBqMj/NubFrk1ua3tqarK2vQg5UlP
l0afqrOr52e9dVF+mJdFvTpVbmb17sfeB7PBF8lpTw3U1fhS/njKf/5kdGJK
9fxjhWEhBD3jZdMvL8ZXvRuT1wY91fawSonI7zBpms/Vj9QCT5c6zbjhH1NT
zYZFOcdDXU4Xp2pRVSt7eniIhemqBBymHPpGh+v5oRudpkurRT05VYKjKdMP
hzsxRNMMKNmqGVy6DqfF8vBLvQ8nWTE5hMD54ddv23CZ9Hq6rhZFSZBCAqVm
dZbJ9j/HZOp6Vf7vf+dz/gpLg+L9rCvAe6p+LIp5ZvgLI0DJlH+c8xckda+X
F+US7W8Y+GfPTrl5pcu5iZapi6VJUj0tEjMdujWnBSAcDcpqhZWY6eG9xKxM
nph8uhkkxk7LdFUVJX+/4J0fmGbnaQ6xp2ehF371vUh1dugLfgIWyq0X2vj6
JT5enL06I03bvYD1ej1Mda558zVsYJ4TvPaQxFtpgr4yZffj8OOiWmb32g8H
D2Pxz1+O1Vudwe7Z2CH3+Q/qUm+yQidqDJ21t4lNAju5n//7+B8vNkw6kpsA
flosV3pabQF9t8g94qBIZ67fPr1d+PUJiz6+OlybSVlNB/ZmGotxPdWZnmRG
iAASJWTd+xjzoJGHkX1nJtje2yR7d0Jfjd89vUWWnSQAGj0kpJw9LopsCS0t
l6DbARrndlWU1WANyQbTaaO9lri0A2WDHQs7bvXGskAMloySfq3KIkP/t+fj
i21hPW6MFktpPq5AKs22L5ISohzeEGCONHhlAG6QJrFgsU8Zuybqgpq8eDU+
v0PjPEBEpNjlwzRxEC31f+gsDZSV5dVsMHOucLAUVzg4OhoSqm2I4DNnXZ9J
SL0orFWviiqdpVOmrV6vNxgMlJ5YWlXV640XqVXYqpogUMIsE5ibVsuWnyXj
gHBY4nqRTheKAVIMkFULfWPUxJhclWZqsKaEPTboDJSWqMkGw5VmWVRGrQx0
RF1UCvS4KlNLU+WdFSwjr89fXirhOBW0RNUWA1cFhpWowOo0CSMMe73XuVHF
TFULQ16M26upto5IKl41tFbhT4ySLlcZewR1o8u0qLnV0tIIL6BdamzKJQKQ
mSlBpUbtw58eYGr/GWDW06oujR0Kvss0SeAbevfUBSlkgm8Z/DGJU1he/RKr
WOsNywO/n1XQQgcrJJoYxUayTKsKKxUxMRkABZir0lTVRi1r7MQs/YgGlk09
zVI8DuL0laUWGp0XBQAADgQIzFl9+gQW+PzZUYT0W9LgWWorrOIid30xsskJ
lD73FQFFkBJy0NoIVFGEvQlUJMk2e2oNN1bUFa9MBadLgK4XGtsFwjA8oNML
pzglrTTNh+qNJV3D0wIPN40y2rAkQCAAcczVJxzXukyUKUsgCgtCZyYFUqOZ
ttXAtaCBV5p05kO6WjE/OvFFnkYQ+ATYReL2g1viV1HrBg2oM8CCD3cKJljD
LyyKxEL7NiovKhrA5EU9X/RZZ9OSxEA8x1N7NbZuKkuqqMkKMxIUigW2Y63m
aQv8r4TV5UlfpaLkfkdIaicnoLe0/Antg1jt19lrCv2E3U1IVxEgYpNBFWg1
VGRVpLOijrairwN22FYEsLzZuVtHGN4W0gCibvzgFO2VYshY6ryGM80rWLBC
AJU01mW92hK6pEBmOB+iM5hVZcRviP3B3n3EqUXKm0uNcxqITGsF7cqrVGfZ
xnVqKw76wxXAc2SZ4VWiHdNDSuZfMUaQpBQ1gKB7OxhhL6IARbw7vhLWhCet
IFlGxjBfyE59pKggtGcFAetsxOgQ3QMUmgnOASsTWaifpUCuhM3bKtbG1i5z
OzYtx31em/sABFDaFF9uQRSIV0jeskJXLceg0XotNO3ZGcQBm1Z7u7MqsWPh
PtlgrTjAVXqegwHT6TbfB2Ze1eUKNjRU53VJqt6/1Q20ZxEdzLJi3YKM0XRb
6/1FmByDsN4TKg40mH0xTTXxLiv3ULGX3DnwBLYYBoVZY8R46K5xwNFAI6Dn
vFiyAITmfbY+sCy2lHjNgo7Zr+g5XBfGZTWHcGHkFcVaFXmbVwXzKIaH1Xoh
vWukuYC7UAy2wBs4WYwnDsdmMHLSDxqC2Iq8c4bIFrkj+mWk8brDj8FgbZh/
nWaZ0nBYy1XVYcoAJEbgSERn0Yanbow10UteifS0p9LXLzsxGYwFgiydD4CW
2BSoDdU1DCxLmhW57fSL59EX6MGsF6WB5BrSjH1b3l7fyzfX47CzuqFqlo3d
Ur8FJI1jkmb2iSHYmCi1SsrCuRqsABEQhQYIVom5mINIAZ6ZWZqn/FkiBUyp
KN0H55Awe335U716zb9fPf+3NxdXz5/R79c/nb14EX7puRbXP71+8+JZ81vT
8+nrly+fv3omnfFUtR719l6e/WlP1HLv9eX44vWrsxd7wsMtViiNI3oYoSkp
KmFb7/k4MqE+Pzy9/J//Gj1EyPEvV+dPj0ej3yLukA9PRt89xIc1wJfZihw2
Kh/JVfT0amV0SaNAsUE5KxBYRlxviVvhZ8AOBmje/zMh85dT9bvJdDV6+Hv3
gBbceugxaz1kzLafbHUWEHc82jFNQLP1vIN0W96zP7U+e9yjh7/7A8Ir2OTo
yR9+j0j+nM3HeLq0wl/RBgEntcday3yckII5Ms43oqmskzXUjjpP0gp+yeil
xMZsNKCjOquCE65XCUduhbhkZnTxOPvsl5ugeFLP8Cv2yhBBr+BVmd/65G8P
ZGwXCPgQQEe9iRpISFtPLNkgJyd3yzukikA6ZU8vbEJ0RK6SizrCBH3IRT4C
AUmaT7M68VGbDyuBWF6wcu057iDdzhPnKyVoaeTEIyYBxOS6rGLKaQasQAzU
ELF0lqIPCEPIGrGyq89UWbwfZAlL/QFSCdxR8F+G0BkLlDiQhreHztMQpB0Z
mWzOVivM7SJ9qM4up93aD1qsBPsCMWsA5y5VsSqyYp4ay4kcOx1LZE/hQ4iW
285eghuIJUnVp09/gPV/9/jxd58/99VlAYgHVTHgX5SLd3guSlPT+aLywb0k
1ASrIIjgJzW22gqEADU4OGvofKjOkBknqZbqASDC+uhfhtBuLJyWd2ROL7Tz
XyXznE2XKeJH7BPm2cAvzspiKeYHLV9J7OgjCB8f0DI4FUSc8NEvLIgETEhd
QjkjFg1twzYEfF7CElNBKfJYMgNNwLEhKQ6UT6iZP9wgcU8knczY92Ljrg1J
KQkS/v2zKMTFM0WFaWy7OGn7l/17rFh/TZO/tr85YAe3ZuV6/hFJI/m8ULg/
5xqWdfUFPxGCDFIpTvnJgd6kZs2JmwpVLwoMAqH1CU/OrIyfIcQC0t5t2ZSd
PydOZIukkdC1nKtoHCWdPf3XfuA/KLIo4MNHTx6RAga52P2EXIzTB4m0tlJD
dnhoJcMhoZJ0NcrZoXGgLuaIKHIja0HYEioqQnRtOwRFkkJJzgI9pgpDXN4I
CVTBqbqs5Ql+4EqJOj59olIdPrh1kYYOZCHdqbg9jJc0nJM9KB3IkqxlCd/L
iJOeS+997Hrlqj6cPjAxLchJ58yrYj8SQmrQ85xEAKMth+onhKWtmMnzJJpD
s2Zp2WTaIW0k4zQyYBNvhnBzThvjYlrg0NRnLlNJra5N5jTvIk9cBUztX11e
XxzwRuRi/UG5XCIiPgITrGq380R3U9pHpxvUWBg/ndZghdhxOZ/R1pgBbzeX
4ZjrOb5miVwyJgwUbzyG2GX4nqs8984kRfKumLpjFommLCEOHaPCTplLE0Tz
pEI6NBVUBo72SJ6ztyPu/tPw+PHjoer1tsqIUDEqclLoxh4Ou0wGm7QzxOA4
qVZQZDeO04UjrfG6YQPeJNnXJUBcGiSvAzxJ2agWQk62rgbFbCBJdEfVrWQf
GeUnpXOvQj3wqGxj7DEG19dXT4nt62yqbRUn9hLhXH8cf2RErRAJ19EOOLNz
yQhR4hXXeGRiV/cTVGwIowU0bA8nhhFWMMAZhS6cVRSU0Am5NCOe9nojqlnE
LpYq9AsGtSqmRUYhjCPFuclZDaT+RDPQ6SLwKQlWDqzrsvRsMKvZdkRZhr3j
YThwucipOqr5qG7XVLQREtBwVk0hJJUBnS1I/JJEQdtKxqV9adyu7WiyNygK
kvCZI8qgBoGqWfBOPQHCn1AhEUM679aMgRU8/0gWmJLDlFNP0i8OovqUonJk
BbUCI7K15xStpb6meJPqJgl/OFSvWeO6AImPiuFhf8xlxZVL/ELdxu2vL8O5
SlAQath7RF47TwbWHXrQSQe0283lQg7jVsUEwpyH5VNCJRBB31uVwKb0s2hc
aA6vArtnq79yxli1p2maN1XRCtjwLC49Fs9BTmrX1nxHE6yR9CIhdmO7ckgs
yxLa2WctiuOqieEtcTNXdW5caeDG0tZx6RyR62w27D2RaV5DHioeuZlyU7EJ
FO4x26QPTrmk49wlj0Zrgtby741sSyTry/Rndj33tu4WsHNtDleZAXYH3a1i
1p3HHSwYnVaIHm/8JgrmnbpWrFhcYee8YdiD13BJq8utCzFPLjS7VXMWE53w
iDfxCbXvyPECm0jBUU7eRN1S7QEu97ZMr13lDPUVURtylnEs6Fbh61bePNdm
qwwaMMFalsL0ruzVgXsLWqq/IgCp6JRIqxAHQ9Ys2VGSbDYSjWTHngygHUhK
Xf5DVD4n9acR+i4VLfUKbcuizpnijwgu0r6Zi6Fv0SB36aUNGmVAcZFxR9WX
d9ylL/3YdLqFUJf4huGE7bgDifOVGPq4j11yyFvazC2Rw5AtoUvg8Wmguq4o
kw4Yk2q8MPm8WgiiYEF2DRsvKF8MiYmP6nw+9NHJDfiYKKcfRThcaxWnmqWs
QuCPlE+aHIRRTTx3ZUiHIAXfZjYLhwVM6e0zhQbczmg+5aNi+m428LecOGvK
K6E+dj5T8f3ANmRZjFSfPTjtf20p1aPLEsCyKKVIo2Mo2a9LFudKLnEllJB2
qQWi2kxOblsZK9ICh0Iggy3iCXOb1DlRRy6tuYJMroZlK1c+kQ8UH3zZLNQz
ijFe6A1IopNqNifZXBKmdhm3cya9zcYy8I6bMaKyjbLzYCyvbTzT+fnVIXwl
clqGjZiW63OazswGP+CBH3df2+1M9NGxZKLXTvyHw+MDsdv3F8/eOzIKMZB1
B0lOIqFnbpyZPLQmW3rI1MRaod6/eu8LHD4w4GMgvqJG0PPCSHYbhZ1BBpoj
Gh/2dB8usKak2dwnXqytSFwVFQyvGdaPWLalDufv7189GL0PcI3Xxd8C18nf
ApcQNy0K7BK6tdD5psXsp0Mz7O/WB7XKaqm7FitX5hAcD7D09+/faztN0wGU
qhddzSH9djdxjtwfaqSO1Yl6qB6px+o7fvhg0PmHn/4CEX5RQQb1i1L752lJ
bnMjrqIt/cFdY+G/YLHyed/Xp/tUdKH13j0Ak9bQkfuvGMC5gm8aAPASl9yj
NqeyEKzjsCFSzyf7x5yeHDgyCYaUFVPtSj1M5y0YtxVBcvOWHq2QQEpKS7Vd
o/PovDGqcXd0Q8KNb9NBUe5aphXLRx8yft8DBjtg4cWP/8bGdt33jNwxC+4M
24w62gOX7lkfhQBfmRIJ6n1sxf37R0enEdfn2WZ4/z7v0ninkaSeevy1oSBr
OzAbyhgMTAcAQed72Ml+a/wHYYgD6U1804Hi1CHxvTpq2nRWfdogg0mk2aui
VeGLYhHnHr0vxZcyytDjM4rwecAXkTgp7UZI/y9hO48wa4DyatpJ/HllYTmO
atuhEEb2DaKvHGNg1gOP+uiojXpzDvPrgK8WJZiIoTzdtQv91sNuGEc1rR1f
t4LfL2/gya0bSL+28XrQneVr9vj46/b4xMnK5/uk1pCOM1hf+PV1F46hWuG+
FFtu3ZKgIa5GhEVyDhB2FzYVls+JiJS0kJjQbnI4V9KdbSbhx0z5nou3t5iC
5tI/Ielc+sylEj55Oho67xKU84l3I5dM+xXVu4kbAcXRUV8djZhlR+h4lm8n
jhyk1XmKxVIZpwljtL9GAffCATifvDeJATQQu8ZLNhpZHaUZgvU+PBdF7ux1
KI90J7ChiD+JLY0n+HLKeq+rTnete3TESx7dsWS+s2dXRS4iNZ42snpK4Sxy
kYM4JWvoo3tE9O0rcdb2K5dyW4jNr31Maz4rjC4dfnEdfUk4wnlMG3jKy4Kn
P+Lwgo9MfH2oNK5kFki21WPkevDp163M297qmLH9tR5Kw/G80xKAf4l11ECN
XHpOe+sKfrRtA7drcgCj6RBbauReJdp3oJpkfYcfiGi2Oz8hJMmAxF1N0aaP
jLhsyk0Vkv1c6qlTndHZD+8Jrx3RGnGi+ajp7lSfrzMIXwnDdV3V8aOHO4Uh
Cm/rzxfVw+90i0otzdDH/x7Joo989aEZjkrS7ZPMXaOGjJ5GaYooWs1TOstr
oHYXR+PqiDvl5MgHWuQ5qMGGnNX3RIijI0eKB4Rv6baxQzD+jS+OaOgDd+bT
PC5HUqUir4aR15EwLKo9+PW4xdUrzzVclOnaVXOOnNE9va3NYoOL703IFkAs
sAQog+6StE4yrLt36cfh6yjxlTSuQ6z4qC9mZ/ia2wvNTSJD52/uDYC7is6h
Qzira+7h+0f78SH5ga+Ryu7dYIMLZjRXeLKb5aSgm1kNiXP1oIiqk63ALo74
osprV9CoCiM5WSRwm6Aux7AceUNo//jo0YHY1kt6Ov4BrsNd4raOrtGDXrih
K/LzuYghhDg63s7IJfPe/hnteHa849nJzuRdPVG//ZZnu7Pbb/1H0um33x//
cokkmgByCf7l+HuBz312PxLRdRb0y99Tlm28+AwWyuXOIxxh3fLzT5KF39FT
tqhLuJh/jixRJRx8x7K9aHbDyeorv2KRD4BZwqb3j8al+RkOh3d9/ffExVVy
umcETbQ2vjtojA5Ao9zT3ZNJwtG8IxnnRzpxaXRItCrNDb0ulG2kWr+TyFoV
axPxGdaxFW3uiihBcwW7/EWxRtaUb3aEkd0AsQ1Qv7UsT+W2EyqPfaW+Od+S
M/mm8BWBtt/ZgwdRMHfwbSEcgtHYnTbBTx7XVaJjQd4zDstpZe7VCjxsruM2
J9kEc9tG9vmUni9jS9IL2BXXyYNXY6eV/myCLOEspH0U9ZzSLOp6q47cvTE+
pJIUjq+Nd3K4qDiIeSTFjWL3+/eP7t/vhIsSvtMpmLx4FL/nU5TtL/zR6n4R
AkJ6JXJahctYrsXBjqlHd0y9/XpReEo26K7mNre3xi5MaLbJZ7hEaD6wOiKh
jk/Uz6YsJG8nsDPYSxPFfazUyTEH8xNSPF1u5Mat9a4sXFBb0rWqVcarOZHS
rzN5T6IhRm7bQawEcnnJbrXhWEoc2G/C1K6I04uKBe1rlerTbRcuP0NLrURS
CZ2LU54UJQeMVtCkVg50R12gOb/aGX1tHfQGq+vWE4bqZbgOQMkTJwPd+6hc
cSharKCXk3Re09uHFEQX02ldDnvXnMbFZOMuZvLFOHmTibY1znyY1OM76UUp
d63iW+VyJ12tnORNXajfydOLuqJbYdJKZuAtBgB0gj6l9ySXaUQLTVd9o1N5
63rrLjz4gm6Qkdhnb0d9d6F+hX48WrCKJ5x4NK+M0anAUtNXdNE0Mh+9crcI
+cTT1cv67m60vL2mk5vU+lsSFvunk21AanYLfHHaXQqjXGAsB2UFnwZDc0ow
d9npQoPIffOtdwvj816h4V33GXu9d5xNO12X9IINc0BvGsYr9Gfh1+dvDq/P
Xw7oL62gE3y98TYnV6H73WvR9AqmEUJLitZF6MPSrMu0cocxTebMlyL8G4sE
zLzg+80Silmhch3NwZwfrnsiQ6cXDqJ7fNHtvWbcMJzcAPyaQp6/aUHF087r
e466QqmiBE37y7ZxObV9q59GSNIZK4SPtEUgz470ejEChqK5FUIhcXg5rwO2
uyBVhVcxmGobVWheySqaUkSdZ8ZdRZQLKgFKp1CtuwOMQbhiRIfAdUkM8rTF
l1+6dUlaAVdH7+pquWgGMgInVf4ovK/o7wHJuvYdv9LXKLuwItlL/MIp0U9z
cZBfnW1dv4v429KLdNp23hD0L0D77FfuHgjEC7lRzQDLMvJNfM2Y6hw3eroh
f2s9RmVqP1iGjbLfnZDtvIAW3fam7VBvri6iO5lbabW8YPDpk/v7Nz5/Hvqx
owJDTfd9OG1Hvq72Ofnsqx/ptioiRRLDlykOQIhconfG2m9cfUO3lMpKcEI1
2mOKKuGOXfQGLxhXU+6Sl2RkgelNfpqd359phfO29+lUNMIk3+/NdGbN3ufe
/wERLZNmyEgAAA==

-->

</rfc>

