<?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-sprang-avtcore-frame-acknowledgement-02" 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="March" day="13"/>

    <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-sprang-avtcore-frame-acknowledgement/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        avtcore WG Working Group mailing list (<eref target="mailto:avt@ietf.org"/>),
        which is archived at <eref target="https://datatracker.ietf.org/wg/avtcore"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/avt/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/sprangerik/frame-acknowledgement"/>.</t>
    </note>


  </front>

  <middle>


<?line 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 enabling reliable delivery of the feedback since the sender can effectively make retransmission requests of the feedback.</t>

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

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

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

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

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

<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.</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.
Since feedback is only really necessary for frames which the codec stores in a reference buffer pending future use, the number of outstanding frames is in practice limited by the number of available reference buffers. E.g. for AV1, the upper limit will be 8. Although the optimal behavior will be application dependent, it is often advisable to spread reference buffer usage out across an RTT and to cull earlier buffer usage once later frames have been acknowledged.</t>

<section anchor="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="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 396?>

<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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
at8Pb2B9VOs11Z7I+n+X7o+EH48AAA==

-->

</rfc>

