<?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.31 (Ruby 3.3.8) -->


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

]>


<rfc ipr="trust200902" docName="draft-ietf-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>
    <author fullname="Gurtej Singh Chandok">
      <organization>Apple</organization>
      <address>
        <email>gchandok.ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Shridhar Majali">
      <organization>Nvidia</organization>
      <address>
        <email>smajali@nvidia.com</email>
      </address>
    </author>

    <date year="2026" month="July" day="06"/>

    <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 76?>

<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. Additionally, the mechanism provides a way for receivers to request resynchronization frames that reference acknowledged frames, enabling efficient recovery from partial or full frame loss without requiring a full keyframe.</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/ietf-wg-avtcore/frame-acknowledgement/blob/main/draft-ietf-avtcore-frame-acknowledgement.md"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-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/ietf-wg-avtcore/frame-acknowledgement"/>.</t>
    </note>


  </front>

  <middle>


<?line 82?>

<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>Additionally, there are situations where the receiver may experience partial or full frame loss that cannot be recovered through retransmission or other means. In such cases, the receiver may wish to skip the unrecoverable frame and move forward, but needs a frame encoded with a reference that has been acknowledged. The Frame Acknowledgement Feedback message provides a mechanism for the receiver to request such resynchronization frames, avoiding the need for a full keyframe and thereby minimizing recovery latency and bandwidth usage.</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>
  <t>Resynchronization Support
  The receiver should be able to request frames encoded with previously acknowledged references when the decoder state becomes out of sync, enabling efficient recovery without requiring a full keyframe.</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 a 16-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 reliable delivery of the feedback and the ability to signal state relating to multiple independent streams interleaved within a single SSRC.</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>

<figure><artwork><![CDATA[
 Extension Data:
     0
     0 1 2 3 4 5 6 7
    +-+-+-+-+-+-+-+-+
    |FFR| Reserved  |  (First byte of extension data)
    +-+-+-+-+-+-+-+-+
    |   Frame ID    |  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
    | Frame ID cont.|  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
    |   Fb. Start   |  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
    | Fb. Start cont|  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
    |  Fb. Length   |  (OPTIONAL, see FFR)
    +-+-+-+-+-+-+-+-+
]]></artwork></figure>

<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 = 3 (FFR/Reserved + Frame ID).
For one-byte header: <spanx style="verb">len</spanx> = 2.
For two-byte header: <spanx style="verb">length</spanx> = 3.
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 = 3 (FFR/Reserved + Frame ID).
For one-byte header: <spanx style="verb">len</spanx> = 2.
For two-byte header: <spanx style="verb">length</spanx> = 3.
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 five bytes: a two-byte Frame ID, a two-byte Feedback Start, and a one-byte Feedback Length field.
Total extension data bytes = 6 (FFR/Reserved + Frame ID + Feedback Start + Feedback Length).
For one-byte header: <spanx style="verb">len</spanx> = 5.
For two-byte header: <spanx style="verb">length</spanx> = 6.
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-16-bits"><name>Frame ID (16 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. The sender <bcp14>MAY</bcp14> start at 0, but receivers <bcp14>MUST</bcp14> accept any arbitrary starting point value.</t>

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

<t>Present if FFR is 10.
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.
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 and Feedback Start are 16-bit fields that wrap, care must be taken when calculating ranges. For example, a request with Feedback Start = 65534 and Feedback Length = 3 indicates the sender is requesting feedback for frames with Frame IDs 65534, 65535, 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>

<figure><artwork><![CDATA[
     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                         |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |R| Reserved    | Start FrameID                 |    Length     |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
    |                 status vector + padding                       |
    +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<section anchor="flags-8-bits"><name>Flags (8 bits)</name>

<t>The flags byte contains the Resync Request Flag and reserved bits for future use.</t>

<section anchor="resync-request-flag-1-bit"><name>Resync Request Flag (1 bit)</name>

<t>The most significant bit (bit 0) of the flags byte indicates whether the receiver is requesting a resync frame. When set to 1, indicates that the receiver is requesting a resync frame. When set to 0, acknowledgement is triggered by sender request. If R=1, Start Frame ID should indicate latest decoded frame ID and status vector containing frames up to the latest received Frame ID assuming length field is less than 256.</t>

</section>
<section anchor="reserved-7-bits"><name>Reserved (7 bits)</name>

<t>The remaining 7 bits (bits 1-7) are reserved for future use and <bcp14>MUST</bcp14> be set to 0 by senders and <bcp14>MUST</bcp14> be ignored by receivers.</t>

</section>
</section>
<section anchor="start-frame-id-16-bits"><name>Start Frame ID (16 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 entries are present (e.g., when the requested range has no overlap with the receiver's status window, see <xref target="receiver_state_limits">Receiver State Limits</xref>).</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 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.</t>

<t>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>

<t>Also note that no exceptions are made for keyframes. I.e. keyframes may or may not be assigned a Frame ID, and any frames preceding a keyframe must still be included in the feedback if requested by the media sender - despite the keyframe being a new recovery point.</t>

<t>The Frame ID sequence (and consequently the feedback messages corresponding to it) is unique per sender/receiver SSRC pair. Thus if a sender or receiver SSRC is changed, a new Frame ID sequence is started and all previous state is discarded. Otherwise no gaps or resets in the Frame ID sequence are allowed.</t>

<section anchor="resync-request-handling"><name>Resync Request Handling</name>

<t>When a receiver detects that its decoder state has become out of sync with the encoder (for example, due to an unrecoverable partial frame loss), it <bcp14>MAY</bcp14> send a Frame Acknowledgement Feedback message with the R flag (bit 0) set to 1 and specify status vector from latest decoded Frame ID up to latest received Frame ID.</t>

<t>Upon receiving a resync request, the sender <bcp14>SHOULD</bcp14>:
1. Verify that the decoded Frame ID corresponds to a frame that is still available in its reference buffer.
2. Encode the next frame using the specified frame or another frame with references it knows to be available at the receiver.
3. If the specified frame is no longer available in the reference buffer, the sender <bcp14>SHOULD</bcp14> encode a keyframe.</t>

<t>This mechanism allows for efficient recovery from decoder desynchronization without the overhead of a full keyframe, as the sender can encode a frame referencing a known good state at the receiver.</t>

</section>
<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 anchor="using-acknowledgement-ranges"><name>Using acknowledgement ranges</name>

<t>The feedback request mechanism has the ability to respond with the status of a range of Frame IDs, not just the last decoded Frame ID. If video is encoded as a single dependency chain, only the last decoded Frame ID would likely be sufficient. However, when spatial scalability such as "simulcast" is employed the situation gets more complex.</t>

<t>For instance, imagine the following scenario where two independent layers are sent (with the numbers indicating frame timestamps and ID being the Frame IDs):
S1: 100 -&gt; 101 (ID = 1) -&gt; 102 -&gt; 103
S0: 100 -&gt; 101 -&gt; 102 (ID = 2) -&gt; 103
Here, if the feedback for Frame ID 1 is lost, it is not enough to know that some receiver has been able to decode Frame ID 2. It is for this reason the sender can request feedback starting at Frame ID 1, with a length of two. The receiver should never remove state information about frames prior to the earliest Frame ID it has received a feedback request for, except as described in <xref target="receiver_state_limits">Receiver State Limits</xref> when the receiver's status window is exceeded. This guarantees that the sender is always able to acquire feedback for all frames it has sent.</t>

</section>
<section anchor="receiver_state_limits"><name>Receiver State Limits</name>

<t>The receiver maintains a "status window" — a sliding window of contiguous Frame IDs for which it retains decode/receive status. The size of this window (the "status window size") represents the maximum number of consecutive Frame IDs the receiver tracks at any given time. As new Frame IDs are received, the window advances and the oldest entries are discarded.</t>

<t>The default status window size is 255 frames. A different status window size <bcp14>MAY</bcp14> be negotiated via SDP (see <xref target="status_window_size_signaling">Status Window Size Signaling</xref>). A receiver <bcp14>MUST</bcp14> be prepared to maintain a status window of at least the negotiated size, or 255 if no value is negotiated.</t>

<t>When a new Frame ID is received that would cause the number of tracked Frame IDs to exceed the status window size, the receiver <bcp14>MUST</bcp14> advance the window by discarding the status of the oldest Frame IDs first (FIFO order), retaining only the most recent entries up to the status window size.</t>

<t>If the receiver receives a feedback request whose Feedback Start refers to a Frame ID that has fallen outside its status window (i.e., the state for that Frame ID has been discarded), the receiver <bcp14>MUST</bcp14> respond with a feedback message where the Start Frame ID is set to the oldest Frame ID still within its status window. The Length and status vector cover the intersection of the requested range and the receiver's available state. If there is no overlap between the requested range and the receiver's status window (i.e., the entire requested range has been discarded), the receiver <bcp14>MUST</bcp14> respond with a feedback message with the Start Frame ID set to the Feedback Start from the sender's request and Length set to 0. A sender that receives a feedback response with a Start Frame ID newer than what it requested or a Length of 0 <bcp14>SHOULD</bcp14> interpret this as an indication that the receiver has discarded state for the older frames and <bcp14>MUST NOT</bcp14> use those older frames as references.</t>

<t>If the negotiated status window size exceeds 255 frames and the receiver needs to report status for more Frame IDs than a single feedback message can carry (limited by the 8-bit Length field to 255 entries), the receiver <bcp14>MUST</bcp14> split the feedback across multiple RTCP Frame Acknowledgement Feedback messages, each covering a contiguous subset of the requested range.</t>

<t>A sender <bcp14>SHOULD</bcp14> issue feedback requests regularly and <bcp14>SHOULD NOT</bcp14> allow the number of unacknowledged Frame IDs to exceed the receiver's status window size. If the sender fails to do so, the receiver will discard state for older frames as described above.</t>

</section>
<section anchor="out_of_order_handling"><name>Out-of-order Message Handling</name>

<t>Though rare, it is possible that Frame Acknowledgement Request header extensions are received out of order. This can happen due to e.g., network reordering, but more likely due to retransmissions or recovery of packets using FEC. Regardless of the cause, if a Frame ID is present, the receiver must store it and the state associated with the frame in this packet. If a feedback request is contained in the header extension, and no feedback request has been processed with a Frame ID larger than contained in the requested range, the receiver must process the request. Otherwise, the request must be ignored.</t>

</section>
</section>
<section anchor="sdp_signaling"><name>SDP Signaling</name>

<t>This section defines how to signal the Frame Acknowledgement RTP header extension and the Frame Acknowledgement Feedback RTCP message using the Session Description Protocol (SDP).</t>

<section anchor="rtp-header-extension"><name>RTP Header Extension</name>

<t>The Frame Acknowledgement extension is declared in SDP using the "extmap" attribute. The extension does not use any extension attributes.</t>

<t>The URI for declaring this header extension in an extmap attribute is "urn:ietf:params:rtp-hdrext:frame-acknowledgement".</t>

<t>Example attribute line in SDP:</t>

<figure><artwork><![CDATA[
   a=extmap:4 urn:ietf:params:rtp-hdrext:frame-acknowledgement
]]></artwork></figure>

<t>The extension identifier (4 in the example) is chosen per <xref target="RFC8285"/> and <bcp14>MUST</bcp14> be unique within the media description.</t>

</section>
<section anchor="rtcp-feedback"><name>RTCP Feedback</name>

<t>Support for the Frame Acknowledgement Feedback RTCP message is signaled using the "rtcp-fb" attribute as defined in <xref target="RFC4585"/>. The feedback type "frame-acknowledgement" indicates that the endpoint supports sending and/or receiving the Frame Acknowledgement Feedback message (PT=RTPFB, FMT as assigned by IANA for this feedback type).</t>

<t>The "rtcp-fb" attribute is specified with a payload type value that identifies the RTP payload format for which Frame Acknowledgement Feedback is supported.</t>

<t>Syntax:</t>

<figure><artwork><![CDATA[
   a=rtcp-fb:<payload type> frame-acknowledgement
]]></artwork></figure>

<t>When used in an offer/answer context, inclusion of "a=rtcp-fb:96 frame-acknowledgement" (with the appropriate payload type for the media) in the SDP indicates that the sender of the SDP is capable of receiving Frame Acknowledgement Feedback messages for the indicated payload type, and that the receiver of the SDP may send Frame Acknowledgement Feedback messages when the RTP header extension is also negotiated for the same media.</t>

</section>
<section anchor="receiver-triggered-resync"><name>Receiver-Triggered Resync</name>

<t>A receiver that supports sending resync requests (R=1 in the Frame Acknowledgement Feedback message) <bcp14>MAY</bcp14> indicate that it will trigger resync based on decode starvation, and <bcp14>MAY</bcp14> configure the timeout for doing so, using an optional parameter on the "frame-acknowledgement" rtcp-fb attribute.</t>

<t>The "resync-timeout" parameter specifies the time in milliseconds that the receiver will wait for decoding to make progress before sending a resync request. Decode starvation occurs when the receiver cannot advance decoding (e.g., it is blocked waiting for a frame or data that cannot be recovered). If decoding does not make progress for the specified duration, the receiver should send a Frame Acknowledgement Feedback message with the R flag set and a Resync Frame ID referencing the last successfully decoded frame.</t>

<t>Syntax:</t>

<figure><artwork><![CDATA[
   a=rtcp-fb:<payload type> frame-acknowledgement;resync-timeout=<timeout-ms>
]]></artwork></figure>

<t>The value "timeout-ms" is an integer in the range 1-65535, representing the timeout in milliseconds. If "resync-timeout" is omitted, the receiver <bcp14>MAY</bcp14> still send resync requests at its discretion (e.g., on unrecoverable loss) but need not use a timeout-based trigger. Inclusion of "resync-timeout" indicates that the receiver supports and shall use timeout-based resync when decode starves for at least the given duration.</t>

<t>Example attribute lines in SDP (Only one of the format must be present per payload type):</t>

<figure><artwork><![CDATA[
   a=rtcp-fb:96 frame-acknowledgement
   Or
   a=rtcp-fb:96 frame-acknowledgement;resync-timeout=500
]]></artwork></figure>

<t>The first format signals support only for Frame Acknowledgement Feedback. The second format additionally signals that the receiver shall trigger resync after 500 ms of decode starvation. "resync-timeout" helps use-cases to choose how long receiver need to wait before triggering resync request. Media sender can adjust its interval to request frame acknowledgement feedback if "resync-timeout" based resync feedback is supported by receiver. Media sender can avoid sending frequent frame acknowledgement requests depending on the use-case. Additionally sender could consider RTT during handling of resync feedbacks.</t>

</section>
<section anchor="status_window_size_signaling"><name>Status Window Size Signaling</name>

<t>A receiver <bcp14>MAY</bcp14> signal the maximum number of frame statuses it is prepared to maintain (its status window size) using the "status-window-size" parameter on the "frame-acknowledgement" rtcp-fb attribute.</t>

<t>Syntax:</t>

<figure><artwork><![CDATA[
   a=rtcp-fb:<payload type> frame-acknowledgement;status-window-size=<N>
]]></artwork></figure>

<t>The value N is an integer representing the maximum number of unacknowledged frame statuses the receiver will retain at any given time. N <bcp14>MUST</bcp14> be in the range 1 to 32767 inclusive. The upper bound follows from the Frame ID being a 16-bit field that wraps (see <xref target="frame_identifier">Frame Identifier</xref>): ordering wrapped Frame IDs relies on the same serial-number arithmetic used for RTP sequence numbers (see <xref target="RFC3550"/>, Appendix A.1), which is only unambiguous when the values being compared are less than 2^15 (32768) apart. Values larger than 255 are permitted; in such cases, the receiver <bcp14>MUST</bcp14> split feedback across multiple RTCP messages as described in <xref target="receiver_state_limits">Receiver State Limits</xref>.</t>

<t>When used in an offer/answer context, the offerer <bcp14>MAY</bcp14> include a "status-window-size" value to propose a maximum status window size. The answerer <bcp14>MUST</bcp14> respond with a value less than or equal to the offered value. Both the offered and answered values <bcp14>MUST</bcp14> be within the range 1 to 32767 inclusive; a recipient that receives a "status-window-size" value outside this range <bcp14>MUST</bcp14> ignore the parameter and use the default value of 255. If the answerer omits the "status-window-size" parameter entirely, the default value of 255 <bcp14>SHALL</bcp14> be used. The negotiated value (the answerer's value, or 255 if omitted) is the operative status window size for the session; the sender <bcp14>MUST</bcp14> ensure that the number of outstanding (unacknowledged) Frame IDs does not exceed this value.</t>

<t>If multiple parameters are present, they are separated by semicolons:</t>

<figure><artwork><![CDATA[
   a=rtcp-fb:96 frame-acknowledgement;resync-timeout=500;status-window-size=64
]]></artwork></figure>

</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 anchor="state-exhaustion"><name>State Exhaustion</name>

<t>A misbehaving sender could attempt to exhaust receiver memory by continuously assigning Frame IDs without ever issuing feedback requests, causing the receiver to accumulate frame state indefinitely. Receivers <bcp14>MUST</bcp14> implement a status window as described in <xref target="receiver_state_limits">Receiver State Limits</xref> and discard state for older frames when this window is exceeded. The maximum state a compliant receiver will maintain is bounded by its status window size, which limits memory consumption to a small, predictable amount regardless of sender behavior.</t>

</section>
<section anchor="feedback-amplification"><name>Feedback Amplification</name>

<t>A sender could potentially request feedback repeatedly for the same set of Frame IDs, causing the receiver to generate RTCP feedback traffic. This concern is mitigated by the RTCP feedback timing rules defined in <xref target="RFC4585"/> (Sections 3.3 and 3.5), which govern when and how often immediate and early feedback can be transmitted. Receivers <bcp14>MUST</bcp14> comply with these timing rules regardless of how frequently feedback is requested.</t>

<t>When a receiver defers transmission of a feedback message to comply with these timing rules (or due to bandwidth constraints), its status window continues to advance as new Frame IDs are received in the interim. The receiver <bcp14>MUST</bcp14> generate the contents of a deferred feedback message based on the state of its status window at the time the message is sent, not at the time the request was received. Consequently, frames that have fallen outside the status window between request and transmission are reported using the shifted Start Frame ID, reduced range, or Length=0 rules defined in <xref target="receiver_state_limits">Receiver State Limits</xref>. For example, if a request for Frame IDs 1 through 4 cannot be answered until the status window has advanced to 3 through 6, the receiver responds with feedback covering only Frame IDs 3 and 4.</t>

<t>If a receiver receives a new feedback request before it has transmitted a response to an earlier, still-pending request, the receiver <bcp14>SHOULD</bcp14> drop the older request and respond only to the most recent one. This complements the supersession rule in <xref target="out_of_order_handling">Out-of-order Message Handling</xref>, and ensures that a sender requesting feedback faster than the timing rules permit responses does not cause a backlog of feedback messages to accumulate at the receiver.</t>

</section>
</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>
<reference anchor="RFC8285">
  <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"/>
    <author fullname="R. Even" initials="R." role="editor" surname="Even"/>
    <date month="October" year="2017"/>
    <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 decentralized. The actual extensions in use in a session are signaled in the setup information for that session. This document obsoletes RFC 5285.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8285"/>
  <seriesInfo name="DOI" value="10.17487/RFC8285"/>
</reference>
<reference anchor="RFC3550">
  <front>
    <title>RTP: A Transport Protocol for Real-Time Applications</title>
    <author fullname="H. Schulzrinne" initials="H." surname="Schulzrinne"/>
    <author fullname="S. Casner" initials="S." surname="Casner"/>
    <author fullname="R. Frederick" initials="R." surname="Frederick"/>
    <author fullname="V. Jacobson" initials="V." surname="Jacobson"/>
    <date month="July" year="2003"/>
    <abstract>
      <t>This memorandum describes RTP, the real-time transport protocol. RTP provides end-to-end network transport functions suitable for applications transmitting real-time data, such as audio, video or simulation data, over multicast or unicast network services. RTP does not address resource reservation and does not guarantee quality-of- service for real-time services. The data transport is augmented by a control protocol (RTCP) to allow monitoring of the data delivery in a manner scalable to large multicast networks, and to provide minimal control and identification functionality. RTP and RTCP are designed to be independent of the underlying transport and network layers. The protocol supports the use of RTP-level translators and mixers. Most of the text in this memorandum is identical to RFC 1889 which it obsoletes. There are no changes in the packet formats on the wire, only changes to the rules and algorithms governing how the protocol is used. The biggest change is an enhancement to the scalable timer algorithm for calculating when to send RTCP packets in order to minimize transmission in excess of the intended rate when many participants join a session simultaneously. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="64"/>
  <seriesInfo name="RFC" value="3550"/>
  <seriesInfo name="DOI" value="10.17487/RFC3550"/>
</reference>



    </references>

</references>


<?line 456?>

<section numbered="false" anchor="appendix-a-example-flows"><name>Appendix A: Example Flows</name>

<section numbered="false" anchor="notation-legend"><name>Notation Legend</name>

<t>The sequence diagrams in this appendix use the following notation:</t>

<t><list style="symbols">
  <t><strong>TS</strong>: Timestamp - the RTP timestamp of the video frame</t>
  <t><strong>FFR</strong>: FrameID / Feedback Request field in the Frame Acknowledgement extension</t>
  <t><strong>ID</strong>: Frame ID - unique identifier assigned to frames marked for acknowledgement</t>
  <t><strong>refs</strong>: References - indicates which frame(s) this frame uses as a reference for decoding. This information is contained in the encoded bitstream.</t>
  <t><strong>FbStart</strong>: Feedback Start - the first Frame ID being requested in feedback</t>
  <t><strong>FbLen</strong>: Feedback Length - the number of consecutive Frame IDs being requested</t>
  <t><strong>R</strong>: Resync Request flag in RTCP feedback (R=0: normal feedback, R=1: resync request)</t>
  <t><strong>Len</strong>: Length field in RTCP feedback - number of Frame IDs included in the status vector</t>
  <t><strong>Vector</strong>: Status vector in RTCP feedback - bit vector indicating decoded status (1=decoded, 0=not decoded)</t>
</list></t>

</section>
<section numbered="false" anchor="normal-operation-flow"><name>Normal Operation Flow</name>

<t>In this scenario, the Media Sender transmits several frames and then requests feedback to confirm which frames have been decoded by the Media Receiver.</t>

<t>The Media Sender begins by sending frames with Frame IDs but without requesting feedback (FFR=00). On the fourth frame, the sender requests feedback for all frames sent so far using FFR=10 with Feedback Start=0 and Feedback Length=4.</t>

<figure><artwork><![CDATA[
Media Sender                              Media Receiver
    |                                          |
    |--- Frame TS=0 (FFR=00, ID=0) ----------->|
    |--- Frame TS=100 (FFR=00, ID=1) --------->|
    |--- Frame TS=200 (FFR=00, ID=2) --------->|
    |--- Frame TS=300 (FFR=10, ID=3, --------->|
    |    FbStart=0, FbLen=4)                   |
    |                                          |
    |<-- RTCP Feedback (R=0, Start=0, ---------|
    |    Len=4, Vector=1111)                   |
    |                                          |
]]></artwork></figure>

<t>The Media Receiver decodes all four frames and updates its status vector. On decoding the fourth frame it responds with an RTCP Frame Acknowledgement Feedback message with R=0 (not a resync request), Start Frame ID=0, Length=4, and a status vector of 1111 indicating all four frames were successfully decoded.</t>

<t>The Media Sender now knows that Frame IDs 0-3 are confirmed as decoded and can safely be used as long-term references.</t>

<t>For subsequent frames, the sender may choose not to mark some frames with Frame IDs if feedback is not needed. When confirmation is needed for a specific frame, the sender can use implicit feedback requests (FFR=01):</t>

<figure><artwork><![CDATA[
Media Sender                              Media Receiver
    |                                          |
    |--- Frame TS=400 (no extension) --------->|
    |--- Frame TS=500 (no extension) --------->|
    |--- Frame TS=600 (no extension) --------->|
    |--- Frame TS=700 (FFR=01, ID=4) --------->|
    |                                          |
    |<-- RTCP Feedback (R=0, Start=4, ---------|
    |    Len=1, Vector=1)                      |
    |                                          |
]]></artwork></figure>

<t>Frames at timestamps 400, 500, and 600 are sent without the Frame Acknowledgement extension since the sender does not need feedback for them. The frame at timestamp 700 is marked with Frame ID=4 (incrementing from the last assigned ID) and uses FFR=01 for an implicit feedback request.</t>

<t>On decoding the frame with ID=4 updates its status vector with just one entry for Frame ID=4. It sends feedback with Start Frame ID=4, and implicitly signals that frames prior to ID=4 (Frame IDs 0-3) are no longer being tracked.</t>

</section>
<section numbered="false" anchor="sender-side-recovery-from-frame-loss"><name>Sender-side Recovery From Frame Loss</name>

<t>In this scenario, a frame is lost in transit. The Media Sender uses a pattern of requesting feedback for the last 2 frames plus the current frame on each feedback request.</t>

<t>The Media Receiver receives the frame with ID=10 and decodes it successfully, but the frame with ID=11 is lost. The frame with ID=12 is received but cannot be decoded because it references the missing frame at timestamp 1100.</t>

<figure><artwork><![CDATA[
Media Sender                              Media Receiver
    |                                          |
    |--- Frame TS=1000 (FFR=10, ID=10, ------->|
    |    FbStart=8, FbLen=3, refs TS=900)      |
    |                                          |
    |<-- RTCP Feedback (R=0, Start=8, ---------|
    |    Len=3, Vector=111)                    |
    |                                          |
    |--- Frame TS=1100 (FFR=10, ID=11, ------X |
    |    FbStart=9, FbLen=3, refs TS=1000) LOST|
    |                                          |
    |--- Frame TS=1200 (FFR=10, ID=12, ------->|
    |    FbStart=10, FbLen=3, refs TS=1100)    |
    |                                          |
    |<-- RTCP Feedback (R=0, Start=10, --------|
    |    Len=3, Vector=100)                    |
    |                                          |
]]></artwork></figure>

<t>The Media Receiver sends feedback indicating that Frame ID 10 was decoded (bit set to 1), while Frame IDs 11 and 12 were not decoded (bits set to 0). The feedback is sent when it is time to decode the frame with ID=12 to meet its playout deadline, but it is found to have a missing reference (the frame at timestamp 1100).</t>

<t>Upon receiving this feedback, the Media Sender updates its state: Frame ID 10 confirmed decoded, Frame IDs 11 and 12 are marked as not decoded. The sender can choose to encode future frames without referencing the frames at timestamps 1100 or 1200.</t>

</section>
<section numbered="false" anchor="receiver-triggered-resync-request"><name>Receiver-Triggered Resync Request</name>

<t>Continuing from the frame loss scenario, suppose a frame at timestamp 2100 was partially received. When it is time to decode this frame to meet its presentation deadline, the receiver discovers that it is incomplete and marks it as lost. Since retransmission is not viable within the latency budget and the Media Receiver's decoder is out of sync, the receiver immediately sends a resync request.</t>

<t>The Media Receiver sends an RTCP Frame Acknowledgement Feedback message with the R flag set to 1, indicating a resync request. The Start Frame ID points to the latest successfully decoded frame (Frame ID 20), and the status vector shows the state of frames from that point up to the latest received Frame ID.</t>

<figure><artwork><![CDATA[
Media Sender                              Media Receiver
    |                                          |
    |--- Frame TS=2000 (FFR=10, ID=20, ------->|
    |    FbStart=18, FbLen=3)                  |
    |                                          |
    |<-- RTCP Feedback (R=0, Start=18, --------|
    |    Len=3, Vector=111)                    |
    |                                          |
    |--- Frame TS=2100 (no extension, -------->|
    |    refs TS=2000)         (partial)       |
    |                                          |
    |<-- RTCP Feedback (R=1, Start=20, --------|
    |    Len=1, Vector=1)                      |
    |                                          |
    |--- Frame TS=2200 (no extension, -------->|
    |    refs TS=2100)                         |
    |                                          |
    |--- Frame TS=2300 (FFR=10, ID=21, ------->|
    |    FbStart=20, FbLen=2, refs TS=2000)    |
    |                                          |
    |<-- RTCP Feedback (R=0, Start=20, --------|
    |    Len=2, Vector=11)                     |
    |                                          |
]]></artwork></figure>

<t><strong>How the sender generates the refresh frame:</strong></t>

<t>Upon receiving the resync request (R=1) with status vector 1, the Media Sender:</t>

<t><list style="numbers" type="1">
  <t>Examines the feedback to identify the latest decoded Frame ID from the status vector (Frame ID 20 in this case)</t>
  <t>Checks if the frame at timestamp 2000 (Frame ID 20) is still available in its reference buffer</t>
  <t>Since the frame at timestamp 2000 is available, encodes the frame at timestamp 2300 using only the frame at timestamp 2000 as a reference</t>
  <t>The frame at timestamp 2300 is marked with Frame ID=21 (incrementing from the last assigned ID of 20) and uses FFR=10 to request feedback to confirm it was decoded</t>
</list></t>

<t>Frames at timestamps 2100 and 2200 are sent without the Frame Acknowledgement extension since the sender does not need feedback for them. The frame at timestamp 2200 arrives but cannot be decoded since it references the frame at timestamp 2100. The Media Receiver receives the frame at timestamp 2300 (assigned Frame ID=21) and can decode it successfully since it only references the frame at timestamp 2000 (Frame ID 20). The decoder is back in sync, and the receiver sends acknowledgement with R=0, Start Frame ID=20, Length=2, and status vector=11 (Frame IDs 20 and 21 decoded).</t>

<t>If the Media Sender no longer had the frame at timestamp 2000 available in its reference buffer, it would instead encode and send a keyframe (IDR frame) to allow the receiver to resynchronize.</t>

</section>
<section numbered="false" anchor="feedback-loss-and-recovery"><name>Feedback Loss and Recovery</name>

<t>The Frame Acknowledgement mechanism provides resilience against lost feedback messages through re-requests.</t>

<t>In this scenario, the Media Sender requests feedback for frames with IDs 10-11, but the RTCP feedback message from the receiver is lost in transit.</t>

<figure><artwork><![CDATA[
Media Sender                              Media Receiver
    |                                          |
    |--- Frame TS=1000 (FFR=10, ID=10, ------->|
    |    FbStart=9, FbLen=2)                   |
    |                                          |
    |    X<-- RTCP Feedback (Start=9, ---------|
    |  LOST   Len=2, Vector=11)                |
    |                                          |
    |--- Frame TS=1100 (FFR=10, ID=11, ------->|
    |    FbStart=9, FbLen=3)                   |
    |                                          |
    |<-- RTCP Feedback (R=0, Start=9, ---------|
    |    Len=3, Vector=111)                    |
    |                                          |
]]></artwork></figure>

<t>The Media Sender detects that no feedback was received for its earlier request. After a timeout when sending new frames, it re-requests feedback for Frame IDs 9-11 by sending the frame with ID=11 using FFR=10, Feedback Start=9, and Feedback Length=3.</t>

<t>The Media Receiver responds with updated feedback for the requested range, confirming all three Frame IDs (9, 10, 11) have been decoded. The sender now has the confirmation it needed despite the earlier feedback loss.</t>

<t>This mechanism allows the sender to control feedback reliability by re-requesting as needed, providing resilience against both media packet loss and feedback packet loss.</t>

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

</section>


  </back>

<!-- ##markdown-source:
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

-->

</rfc>

