<?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-00" 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="May" day="28"/>

    <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/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-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/sprangerik/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 an 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 contatining frames upto 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 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 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 inlcuded 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 FrameID upto latest received FrameID.</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 menchanism 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, the 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, imaging 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. This guarantees that the sender is always able to acquire feedback for all frames it has sent.</t>

</section>
<section anchor="out-of-order-message-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>
<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>
<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>



    </references>

</references>


<?line 410?>

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

