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


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

]>


<rfc ipr="trust200902" docName="draft-sprang-avtcore-frame-acknowledgement-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>

    <date year="2025" month="March" day="17"/>

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

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

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



    </abstract>

    <note title="About This Document" removeInRFC="true">
      <t>
        The latest revision of this draft can be found at <eref target="https://github.com/sprangerik/frame-acknowledgement/blob/main/draft-ietf-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 94?>

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

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

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

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

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

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

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

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

<?line -18?>

</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 - e.g. by acknowledging a frame only if all recipients of that stream have acknowledged said frame.</t>

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

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

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

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

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

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

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

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

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

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

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

<t>In order to request and receive information about decoded frames, we must be able to identify them. Rather than adding new metadata for this purpose alone, we do that by picking the first available option from a list of available sources:</t>

<t><list style="numbers" type="1">
  <t>The frame_number from a Dependency Descriptor header extension <xref target="DD"/></t>
</list></t>

<t>Note: In this draft version, only a single source is allowed. Future versions may add other alternatives. Cases can be made for anything from a new dedicated identification system (similar to <xref target="VFTI"/>) to mappings from codec specific payload data.</t>

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

<t>A Frame Acknowledgement Request is an RTP header extension indicating the oldest frame ID the sender is interested in receiving feedback for.
The request <bcp14>MUST</bcp14> be done on the media SSRC of video frames in question.
The request implies a status request for all frames starting at the given frame ID, up to and including the frame contained in the RTP packet the header extension is attached to - even if that frame is not yet complete.
If the extension is attached to a packet not containing a video frame, the feedback should be up to and including the immediately preceding frame ID.</t>

<t>Note that the Frame ID is a 16 bit counter with rollover, so e.g. a request with Frame ID = 65535 attached to a packet containing Frame ID = 1 is a request for the three frames {65535, 0, 1}.</t>

<t>If a new Frame Acknowledgement Request is sent with an incremented Frame ID, 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 prior to either the last acknowledged Frame ID or start of the stream.</t>

<section anchor="data-layout-overview"><name>Data layout overview</name>

<figure><artwork><![CDATA[
 0                   1                   2
 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  ID   | len=1 |           Frame ID            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

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

<t>The earliest Frame ID that feedback is requested for.</t>

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

<section anchor="data-layout-overview-1"><name>Data layout overview</name>

<t>Short feedback message (L = 0):</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=12  |   PT = 205    |          length               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 SSRC of RTCP packet sender                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Start Frame ID         |L|   length    |  status + pad |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|  ...                                                          |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

<t>Long feedback message (L = 1):</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=12  |   PT = 205    |          length               |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                 SSRC of RTCP packet sender                    |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|        Start Frame ID         |L|          length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                            status + pad . . .                 |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork></figure>

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

<t>The first Frame ID in this feedback.</t>

</section>
<section anchor="l-1-bit"><name>L (1 bit)</name>

<t>If the number frames in the feedback vector is &lt; 128, then L = 0.
Otherwise L = 1.</t>

</section>
<section anchor="length-7-bits-or-15-bits"><name>length (7 bits or 15 bits)</name>

<t>An unsigned integer denoting how many consecutive frames this message contains feedback for. The last Frame ID is thus Frame ID + length - 1.</t>

<t>If L = 0, length is 7 bits, otherwise length is 15 bits.</t>

</section>
<section anchor="status-n-bit"><name>status (N bit)</name>

<t>A bit vector of the length specified in the length field above. For each bit position, the Frame ID is incremented by one.</t>

<t>A value of 0 indicates the frame has not been received and decoded.
A value of 1 indicates the frame has been received and decoded.</t>

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




    </references>

</references>


<?line 271?>

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

</section>


  </back>

<!-- ##markdown-source:
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
m1tdTnHep09eePM3P7D/AvE6/PmV5n7I1bZ+mizFNa5HKx+pO35+E1muOZzv
efqXsy8DleCTx6rvIGjy95YliqJdJ/5lP38vWQK+dt0dHpN/hMc/wmM7PB7W
zG+rl97PICgj/u+30otksC2FbOUxKeQ6Zuerqd5bU7zIGebRtMdBQ1Xb0q0h
6gPueYPyVq423qjJ09f+CoPTVhRcEHFZW9SZHKjNHt4qe69YPmIukxeNqIe5
qnN/6URVxwJbo8AqmNsvUdxnqMaYc5m45uuZ9pYdMrSvJwivdMMCxfcdBmqg
ibXrHnzXSBeyvNABn2XcPMYEEXssBSSfrvvOH6Q5qfeBvfdepYfMpL3OPFHz
k30N2JUg/jn/4QM1BOgVHPo7DwMazcuggOcL4/E9zt5ntWCcKMEi2pu5LG37
pNcu6ooguiGXl5UeeDco6q8xeXCNb8ynv+aA3Up64ezI82bdu/R+uG1KVbu5
lZ6FdIqUzqgiIVmoXB7zX9Ckm77Ptv205hWA5s0nxxcvJFr/DSG6aO46f/yu
06B/1quJHb35QDeWg1c6mjfWoubVSuJ6vjpbypUIa1iOkW/69wTE9290vGEi
3+iotO4zOxO/H7xTZTuL+951Dd3mqQ9Xp/2ulLzuLM5BC1Ov0ai7O//C9Nev
UbN2r8HPf2DSZqA9fh17rH6idrONWYzmQvAxyhpurq1xCMTt2L9xdNtvJNHb
3eJMFDZPqRLqeipw4/7fH31LXpKRBaZXL2l3vhkfEG8X3B2IR5jk+9Fcp86M
vgbB/wNvmZ397zUAAA==

-->

</rfc>

