<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.34 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-jiang-moq-multimodal-feedback-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.32.0 -->
  <front>
    <title>MoQ Multimodal Feedback</title>
    <seriesInfo name="Internet-Draft" value="draft-jiang-moq-multimodal-feedback-00"/>
    <author initials="M." surname="Jiang" fullname="Minghui Jiang">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>shimei.jmh@alibaba-inc.com</email>
      </address>
    </author>
    <author initials="Y." surname="Liu" fullname="Yanmei Liu">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>miaoji.lym@alibaba-inc.com</email>
      </address>
    </author>
    <author initials="R." surname="Wu" fullname="Ronghua Wu">
      <organization>Ant Group.</organization>
      <address>
        <email>r.wu@antgroup.com</email>
      </address>
    </author>
    <date year="2026" month="March" day="17"/>
    <area>Applications and Real-Time</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 42?>

<t>This document defines an extension to Media over QUIC Transport (MOQT) that
enables MoQ receivers to report delivery quality information for media Objects
to senders. The MoQ layer synthesizes MMF feedback and local congestion control
(CC) output to compute control decisions such as bitrate, frame rate, and
pacing, and inform the CC algorithm module via a cross-layer control
interface. This mechanism reuses the MOQT Track/Object data model without
introducing new control message types. While QUIC ACK and reception timestamp
extensions continue to provide per-packet CC signals; this mechanism adds
per-Object media semantic feedback when the MMF extension is negotiated and enabled.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Media Over QUIC Working Group mailing list (moq@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.</t>
      <t>Source for this draft and an issue tracker can be found at
    <eref target="https://github.com/Yanmei-Liu/draft-moq-multimodal-feedback"/>.</t>
    </note>
  </front>
  <middle>
    <?line 55?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media over QUIC Transport (MOQT, <xref target="MoQTransport"/>) is a QUIC-based
publish/subscribe media transport framework. In low-latency interactive
scenarios, senders need to obtain media delivery quality information from peer to
adjust sending strategies. Adjustments occur at two layers:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Application layer:</strong> Encoders adjust bitrate/frame rate, inference systems
adjust generation rate, and ABR switches Tracks.</t>
        </li>
        <li>
          <t><strong>Transport layer:</strong> Congestion control (CC) algorithms adjust cwnd/pacing
rate.</t>
        </li>
      </ul>
      <t>QUIC Transport layer feedback (QUIC-ACK, receive timestamps <xref target="quic-receive-ts"/>)
only covers the transport layer,
leaving blind spots at the MoQ semantic level (see Section 2 for details). This
document defines a MoQ-layer feedback mechanism that provides per-Object media
semantic feedback to the application layer. The MoQ layer also serves as the
control layer for CC algorithms, synthesizing MMF signals and local transport
state to issue control commands such as pacing rate and pacing gain to CC (see
Section 3.3 for details).</t>
      <section anchor="definition">
        <name>Conventions and Definitions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" 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>
        <t>The following terms are used throughout this document:</t>
        <ul spacing="normal">
          <li>
            <t><strong>MOQT:</strong> Media over QUIC Transport, following <xref target="MoQTransport"/>.</t>
          </li>
          <li>
            <t><strong>Object:</strong> The smallest semantic unit of data delivery in MOQT.</t>
          </li>
          <li>
            <t><strong>Feedback Track:</strong> A MoQ Track that carries MMF feedback.</t>
          </li>
          <li>
            <t><strong>MMF (MoQ Multimodal Feedback):</strong> A receiver report at the MoQ layer
containing per-Object delivery status.</t>
          </li>
          <li>
            <t><strong>Cross-Layer Control Interface:</strong> A mechanism for the MoQ layer to issue
control commands to CC algorithms; the specific form is implementation-
defined.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="motivation">
      <name>Motivation</name>
      <t>QUIC layer feedback mechanisms (ACK, Receive Timestamps) operate at the packet
level, leaving the following blind spots at the MoQ layer:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Blind Spot</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Object Semantics</td>
            <td align="left">QUIC ACK confirms packets but cannot perceive frame integrity, type, or deadline</td>
          </tr>
          <tr>
            <td align="left">Frame-Level Timing</td>
            <td align="left">QUIC ACK provides packet-level delay but cannot provide inter-Object arrival timing</td>
          </tr>
          <tr>
            <td align="left">Playback Progress</td>
            <td align="left">QUIC layer cannot know peer's playback buffer level or application-layer consumption state</td>
          </tr>
        </tbody>
      </table>
      <t>This document defines a MoQ-layer feedback mechanism (MMF) that supplements
Object-level semantic signals which are unavailable at the QUIC layer. MMF serves both
the application layer (per-Object delivery status) and CC algorithms (aggregate
statistics injection). MMF enables senders to reduce sending quality before the
peer's playback buffer is depleted, rather than passively responding after
stuttering occurs.</t>
    </section>
    <section anchor="architecture">
      <name>Architecture</name>
      <section anchor="three-layer-architecture-application-moq-transport">
        <name>Three-Layer Architecture: Application / MoQ / Transport</name>
        <t>This mechanism adopts a three-layer architecture: the application layer serves
as the media source, the transport layer implements CC algorithms, and the MoQ
layer resides in between, responsible for semantic understanding and signal
distribution.</t>
        <section anchor="application-layer-media-sources">
          <name>Application Layer: Media Sources</name>
          <t>MMF does not restrict the type of application-layer media sources. Two typical
media source types are:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Media Source Type</th>
                <th align="left">Characteristics</th>
                <th align="left">MMF-Driven Adjustments</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Traditional Media (encoder/camera/live streaming)</td>
                <td align="left">Unidirectional output, controllable frame rate/bitrate</td>
                <td align="left">Unidirectional adjustment: encoding bitrate, frame rate, resolution, ABR Track switching</td>
              </tr>
              <tr>
                <td align="left">AI Inference Pipeline (multimodal inference engine)</td>
                <td align="left">Bidirectional interaction, tunable generation parameters</td>
                <td align="left">Bidirectional adjustment: above general adjustments + inference parameters (chunk_size, flush strategy)</td>
              </tr>
            </tbody>
          </table>
          <t>Both media source types share the same MMF format; the difference lies only in
the adjustable actions that can be taken after consuming MMF.</t>
        </section>
        <section anchor="moq-layer-semantic-hub">
          <name>MoQ Layer: Semantic Hub</name>
          <t>The MoQ layer assumes two responsibilities in the three-layer architecture:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Semantic Translation:</strong> The MoQ Track/Object/Group model provides feedback
with frame-level semantics. MMF reports Object delivery status (complete,
expired, lost) rather than packet-level status.</t>
            </li>
            <li>
              <t><strong>Control Hub:</strong> The MoQ layer synthesizes MMF feedback and local transport
state, driving application-layer adjustments upward via callbacks (encoding
bitrate, frame rate) and instructing CC to adjust sending rate downward via
the cross-layer control interface (pacing_rate, pacing_gain). The MoQ layer
can also directly execute certain adjustments (ABR Track switching, Object
transmission frequency control) without requiring application-layer media
source cooperation.</t>
            </li>
          </ul>
          <t>The Feedback Track is a normal MoQ Track, at the same level as audio/video/text
Tracks. This mechanism introduces no new QUIC frames or MOQT control messages.</t>
        </section>
        <section anchor="transport-layer-cc-algorithms">
          <name>Transport Layer: CC Algorithms</name>
          <t>CC algorithms (BBR, GCC, etc.) are responsible for congestion detection and
bandwidth estimation based on local QUIC ACK and receive-ts. In real-time media
scenarios, the MoQ layer issues control commands (pacing_rate, pacing_gain) to
CC via the cross-layer control interface (Section 3.3); CC algorithms SHOULD
execute these commands. The MoQ layer makes decisions by synthesizing three
sources of information: MMF feedback, local CC output (BWE), and frame-level
statistics (Section 8.1), achieving higher information completeness than CC
algorithms alone. An integration example is provided in Section 8.4.</t>
        </section>
      </section>
      <section anchor="dual-layer-feedback-model-quic-receive-ts-and-mmf">
        <name>Dual-Layer Feedback Model: QUIC receive-ts and MMF</name>
        <t>CC algorithms rely on per-packet delay signals for bandwidth estimation and
congestion detection; this signal is provided by QUIC receive-ts
(<xref target="quic-receive-ts"/>). MMF operates at the MoQ layer, forming a
dual-layer feedback which could cooperate with QUIC receive-ts.
Both mechanisms can be enabled simultaneously in implementations.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Feedback Layer</th>
              <th align="left">Granularity</th>
              <th align="left">Hop</th>
              <th align="left">CC Role</th>
              <th align="left">Application Layer Role</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">QUIC receive-ts</td>
              <td align="left">per-packet (~us)</td>
              <td align="left">QUIC connection layer</td>
              <td align="left">Primary signal (delay gradient, BW est.)</td>
              <td align="left">None</td>
            </tr>
            <tr>
              <td align="left">MoQ MMF</td>
              <td align="left">per-Object (~ms)</td>
              <td align="left">Client/Server direct</td>
              <td align="left">MoQ layer synthesizes and issues control commands</td>
              <td align="left">Primary signal (bitrate/frame rate/ABR/inference parameter adjustment)</td>
            </tr>
          </tbody>
        </table>
        <t>The two layers cover different granularities:</t>
        <t>QUIC receive-ts provides per-packet inter-arrival delta, enabling CC algorithms
to perform delay-based congestion detection and bandwidth estimation.</t>
        <t>MMF supplements additional signals:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Per-Object Signals:</strong> QUIC transport layer cannot determine whether an Object is complete or
arrived within deadline. MMF provides per-Object status (RECEIVED_LATE,
NOT_RECEIVED, etc.).</t>
          </li>
          <li>
            <t><strong>Application-Layer Metrics:</strong> Playout headroom (PLAYOUT_AHEAD), receiver-side
bandwidth estimation, etc.</t>
          </li>
        </ul>
        <section anchor="quic-receive-ts-requirements">
          <name>QUIC receive-ts Requirements</name>
          <t>Implementations would still need to support both QUIC receive-ts (<xref target="quic-receive-ts"/>)
and MMF simultaneously when both extensions are negotiated.</t>
          <t>QUIC receive-ts carries per-packet reception timestamps (Timestamp Range /
Timestamp Delta) via ACK_EXTENDED frames, enabling CC algorithms to compute
inter-arrival delta (delay gradient) and bandwidth estimation. Its role is
equivalent to TWCC in WebRTC:</t>
          <ul spacing="normal">
            <li>
              <t><strong>QUIC receive-ts:</strong> per-packet reception timestamps --&gt; delay-based CC
(GCC/SQP, etc.)</t>
            </li>
            <li>
              <t><strong>MMF:</strong> per-Object delivery status --&gt; application-layer adaptation + MoQ-layer
CC control</t>
            </li>
          </ul>
          <t>Compared to WebRTC GCC+TWCC, this framework adds a per-Object semantic feedback
layer on top of per-packet feedback. TWCC only provides packet-level arrival
times and cannot express Object completeness, expiration status, or playout
headroom.</t>
        </section>
      </section>
      <section anchor="cross-layer-control-interface">
        <name>Cross-Layer Control Interface</name>
        <t>MoQ implementations could provide a cross-layer control interface that enables
the MoQ layer to issue control commands to CC algorithms. The specific form of
the interface is implementation-defined.</t>
        <t>Distinct from approaches that pass raw data to CC algorithms for independent
judgment, this mechanism could help the MoQ layer to achieve better performance.
The MoQ layer possesses three kinds of information resource: MMF feedback,
local CC output (BWE), and frame-level statistics (Section 8.1),
achieving higher information completeness than CC algorithms alone.</t>
        <t>CC algorithms could still run their own congestion detection logic,
or adapted to accept control commands issued by the MoQ layer.</t>
        <t><strong>Control Commands:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Command</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>target_bitrate</tt></td>
              <td align="left">Target encoding bitrate computed by MoQ layer from BWE and MMF; notifies CC of current application-layer sending budget</td>
            </tr>
            <tr>
              <td align="left">
                <tt>pacing_gain</tt></td>
              <td align="left">Sending gain coefficient; MoQ layer calculates from MMF signals (Object loss rate, expiration rate, playout headroom); CC may execute as <tt>pacing_rate = BWE x pacing_gain</tt></td>
            </tr>
            <tr>
              <td align="left">
                <tt>pacing_rate</tt></td>
              <td align="left">Directly specify sending rate; MoQ layer calculates and issues in scenarios like frame-level pacing (Section 8.1.4)</td>
            </tr>
          </tbody>
        </table>
        <t><strong>MoQ Layer Decision Inputs:</strong></t>
        <t>The MoQ layer synthesizes the following signals for control decisions:</t>
        <ul spacing="normal">
          <li>
            <t><strong>MMF Signals (from peer):</strong> Object loss rate, expiration rate, Avg Inter-Arrival Delta, PLAYOUT_AHEAD_MS</t>
          </li>
          <li>
            <t><strong>CC Output (from local):</strong> BWE, RTT, loss rate</t>
          </li>
          <li>
            <t><strong>Frame-Level Statistics (from local, Section 8.1.3):</strong> per-Object transmission/loss/delivery duration</t>
          </li>
        </ul>
        <t><strong>CC Algorithm Behavior:</strong></t>
        <t>CC algorithms SHOULD execute control commands after receiving them:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Upon <tt>pacing_gain</tt>:</strong> Update sending rate as <tt>pacing_rate = BWE x pacing_gain</tt></t>
          </li>
          <li>
            <t><strong>Upon <tt>pacing_rate</tt>:</strong> Use this value directly as sending rate</t>
          </li>
          <li>
            <t><strong>Upon <tt>target_bitrate</tt>:</strong> Record current application-layer sending budget for internal decision reference</t>
          </li>
        </ul>
        <t>When no control commands are issued by the MoQ layer, CC algorithms operate
normally according to their own logic.</t>
        <t>The cross-layer control interface is optional. CC algorithms that do not support
this interface can still operate independently but cannot benefit from MMF-driven
frame-level control capabilities.</t>
      </section>
      <section anchor="bidirectional-mmf-output-feedback-and-input-feedback">
        <name>Bidirectional MMF: Output Feedback and Input Feedback</name>
        <t>The MMF report direction described in the preceding sections is from client to server,
reporting delivery quality of downstream media (audio_response, text_response).
In streaming input scenarios, the server simultaneously subscribes to upstream
media (audio_input, video_input) and MAY establish a reverse feedback Track to
report upstream media delivery quality to the client.</t>
        <t><tt>
Client                          Server
  |                                |
  |----- audio_input -------------&gt;|  Server subscribes
  |&lt;---- input_feedback (MMF) -----|  Server reports input delivery quality
  |                                |
  |&lt;---- audio_response -----------|  Client subscribes
  |-- multimodal_feedback (MMF) --&gt;|  Client reports output delivery quality
  |                                |
</tt></t>
        <t>Output MMF (client--&gt;server) and Input MMF (server--&gt;client) use the same report
format (Section 5). Their purposes differ:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Output MMF:</strong> Server adjusts encoding bitrate, inference parameters, and CC
based on it.</t>
          </li>
          <li>
            <t><strong>Input MMF:</strong> Client adjusts upstream behavior based on it:
            </t>
            <ul spacing="normal">
              <li>
                <t><strong>Audio Input:</strong> Adjust chunk size, encoding bitrate, transmission frequency</t>
              </li>
              <li>
                <t><strong>Video Input:</strong> Adjust frame rate, resolution, pause/resume</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Input MMF is optional. Support of the input MMF is declared via bit-2 of
the Setup Parameter bitmap.</t>
      </section>
    </section>
    <section anchor="feedback-track">
      <name>Feedback Track</name>
      <section anchor="track-definition">
        <name>Track Definition</name>
        <t>The Feedback Track is a normal MoQ Track where the Payload of each Object is an
MMF. Each MMF is published as an independent Object with monotonically
increasing Object ID within a Group.</t>
        <t>The Group division strategy for Feedback Track is implementation-defined. It is
RECOMMENDED to use a single Group (Group ID = 0) with continuously incrementing
Object IDs to simplify implementation.</t>
        <t>Each Feedback Track MUST be associated 1:1 with a media Track. The association
is established during the PUBLISH phase (Section 4.3) and is not repeated in
MMF reports.</t>
        <t>When feedback is needed for multiple media Tracks, independent Feedback Tracks
MUST be established separately.</t>
      </section>
      <section anchor="track-naming">
        <name>Track Naming</name>
        <t>Feedback Track naming SHOULD follow these conventions:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Namespace:</strong> Same Namespace as the media Track being fed back.</t>
          </li>
          <li>
            <t><strong>Track Name:</strong> <tt>multimodal-feedback/&lt;media_track_name&gt;</tt>.</t>
          </li>
        </ul>
        <t>Examples: <tt>multimodal-feedback/audio_response</tt>, <tt>multimodal-feedback/video_response</tt>.</t>
        <t>Media Track Names MUST NOT contain the <tt>/</tt> character to avoid parsing ambiguity
in Feedback Track Names.</t>
        <t>When reverse feedback exists in a session (see Section 3.4), the Input Feedback
Track Name is <tt>input-feedback/&lt;media_track_name&gt;</tt>.</t>
        <t>When a sender receives a PUBLISH request for a Feedback Track, it MUST identify
the associated media Track via the <tt>&lt;media_track_name&gt;</tt> portion of the Track
Name. If no matching established media Track is found, it SHOULD respond with
REQUEST_ERROR.</t>
      </section>
      <section anchor="track-establishment-and-lifecycle">
        <name>Track Establishment and Lifecycle</name>
        <t>The Feedback Track is established by the feedback generator (typically the media
receiver) as Publisher through MOQT's PUBLISH / PUBLISH_OK negotiation.</t>
        <t><strong>Establishment Flow Example:</strong></t>
        <t><tt>
Media Receiver                    Media Sender
(Media Subscriber /               (Media Publisher /
 Feedback Publisher)               Feedback Subscriber)
  |                                    |
  | SUBSCRIBE(track=audio_response)    |  (1) Subscribe media Track
  |-----------------------------------&gt;|
  | SUBSCRIBE_OK                       |
  |&lt;-----------------------------------|
  |                                    |
  | PUBLISH(track=multimodal-feedback/ |  (2) Publish Feedback Track
  |   audio_response,                  |  (Role reversal: receiver
  |   namespace=same_as_media)         |   becomes feedback Publisher)
  |-----------------------------------&gt;|
  | PUBLISH_OK                         |
  |&lt;-----------------------------------|
  |                                    |
  | [Object: MMF seq=0]                |  (3) Send MMF
  |-----------------------------------&gt;|
  | [Object: MMF seq=1]                |
  |-----------------------------------&gt;|
  | ...                                |
</tt></t>
        <t><strong>Lifecycle Rules:</strong></t>
        <t>The Feedback Track lifecycle SHOULD align with the subscribed media Track it
covers. After the media Track publisher sends PUBLISH_DONE for the media Track,
the Feedback Track publisher (i.e., the media receiver) SHOULD send PUBLISH_DONE
for the Feedback Track after transmitting the final MMF and stop publishing
Objects.</t>
        <t>When re-establishing a Feedback Track after connection interruption, the Report
Sequence SHOULD restart from 0.</t>
      </section>
      <section anchor="transport-and-priority">
        <name>Transport and Priority</name>
        <t>The Feedback Track SHOULD be carried over QUIC Stream (consistent with ordinary
MoQ Objects).</t>
        <t>The Subscriber Priority for Feedback Track SHOULD be set lower than media Tracks
(<xref target="MoQTransport"/>, Section 7). Example priority assignment:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Track Type</th>
              <th align="left">Subscriber Priority</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>audio_response</tt></td>
              <td align="left">0 (highest)</td>
              <td align="left">Audio media</td>
            </tr>
            <tr>
              <td align="left">
                <tt>video_response</tt></td>
              <td align="left">1</td>
              <td align="left">Video media</td>
            </tr>
            <tr>
              <td align="left">
                <tt>multimodal-feedback</tt></td>
              <td align="left">3</td>
              <td align="left">Feedback Track</td>
            </tr>
          </tbody>
        </table>
        <t>When bandwidth contention occurs, media data SHOULD take precedence over feedback
data transmission.</t>
      </section>
    </section>
    <section anchor="feedback-report-format">
      <name>Feedback Report Format</name>
      <t>This section defines the binary encoding format of MMF. All integer fields use
QUIC Variable-Length Integer encoding (RFC 9000, Section 16) unless otherwise
specified.</t>
      <t>Fields marked as "signed encoding" use ZigZag mapping and are transmitted as
unsigned QUIC varint:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Encoding:</strong> <tt>unsigned = (signed &lt;&lt; 1) ^ (signed &gt;&gt; 63)</tt></t>
        </li>
        <li>
          <t><strong>Decoding:</strong> <tt>signed = (unsigned &gt;&gt;&gt; 1) ^ -(unsigned &amp; 1)</tt></t>
        </li>
      </ul>
      <t>Mapping examples: <tt>0 -&gt; 0</tt>, <tt>-1 -&gt; 1</tt>, <tt>1 -&gt; 2</tt>, <tt>-2 -&gt; 3</tt>, <tt>2 -&gt; 4</tt>.</t>
      <section anchor="report-structure">
        <name>Report Structure</name>
        <t><tt>
MoQ Multimodal Feedback {
  Report Timestamp (i),
  Report Sequence (i),
  Object Entry Count (i),
  Object Entry (..) ...,
  Summary Stats (..),
  Optional Metric Count (i),
  Optional Metric (..) ...,
}
</tt></t>
        <t>The MMF format version is negotiated via Setup Parameter (Section 6.1) and is
not repeated in each report. This document defines version 0.</t>
        <t>Each MMF reports Object delivery status for a single media Track associated with
its Feedback Track (1:1 association, see Section 4.1).</t>
        <t><strong>Report Timestamp (varint):</strong> The moment when the report is generated, using
receiver's local monotonic clock value in microseconds. This value is only used
for Receive Timestamp Delta chain anchoring and report ordering, not for
cross-end time alignment. Monotonic clock MUST be used.</t>
        <t><strong>Report Sequence (varint):</strong> Monotonically increasing from 0. Senders detect
feedback loss via sequence gaps (Section 10.1).</t>
        <t><strong>Object Entry Count (varint):</strong> Number of Object Entries that follow. When the
value is 0, the report contains only Summary Stats (for heartbeat purposes).</t>
      </section>
      <section anchor="object-entry">
        <name>Object Entry</name>
        <t><tt>
Object Entry {
  Object ID (i),
  Status (i),
  [Receive Timestamp Delta (i)],
}
</tt></t>
        <t>Object Entries within the same MMF MUST be sorted in ascending order by Object ID.</t>
        <section anchor="object-id">
          <name>Object ID</name>
          <t>The Object ID (varint) within the media Track.</t>
        </section>
        <section anchor="status">
          <name>Status</name>
          <t>Delivery status code (varint), see Section 5.3 for values.</t>
        </section>
        <section anchor="receive-timestamp-delta">
          <name>Receive Timestamp Delta</name>
          <t>Conditional presence field (varint, signed encoding): Present only when Status
is <tt>RECEIVED</tt> (0x00) or <tt>RECEIVED_LATE</tt> (0x01). Encoding rules:</t>
          <ul spacing="normal">
            <li>
              <t><strong>First received Object within the same MMF</strong> (i.e., the first entry with
Status <tt>RECEIVED</tt> or <tt>RECEIVED_LATE</tt> when iterating through the list): Delta
is the offset of the Object's arrival time relative to Report Timestamp in
microseconds, encoded as signed varint (negative values indicate arrival time
earlier than report generation time).</t>
            </li>
            <li>
              <t><strong>Subsequent received Objects:</strong> Delta is the offset of the Object's arrival
time relative to the arrival time of the most recent entry with Status
<tt>RECEIVED</tt> or <tt>RECEIVED_LATE</tt> that precedes it in the list, encoded as signed
varint.</t>
            </li>
          </ul>
          <t><tt>NOT_RECEIVED</tt> and <tt>PARTIALLY_RECEIVED</tt> entries are skipped in the delta chain.</t>
          <t>Since Object Entries are sorted by Object ID in ascending order while Objects
may arrive out of order, delta values can be negative (indicating the Object
arrived earlier than the previous received Object in the list). Negative delta
from reordering is a valid network state signal.</t>
          <t>This Delta chain encoding approach is consistent with QUIC Receive Timestamps
(draft-ietf-quic-receive-ts-00), but at Object granularity rather than packet.
For small Objects (audio frames ~200B, approximately 1 packet/Object), the Delta
sequence approaches per-packet precision.</t>
        </section>
      </section>
      <section anchor="delivery-status-codes">
        <name>Delivery Status Codes</name>
        <table>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>0x00</tt></td>
              <td align="left">
                <tt>RECEIVED</tt></td>
              <td align="left">Completely received and within delivery deadline</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x01</tt></td>
              <td align="left">
                <tt>RECEIVED_LATE</tt></td>
              <td align="left">Completely received but exceeded delivery deadline</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x02</tt></td>
              <td align="left">
                <tt>NOT_RECEIVED</tt></td>
              <td align="left">No bytes received at report generation time</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x03</tt></td>
              <td align="left">
                <tt>PARTIALLY_RECEIVED</tt></td>
              <td align="left">Partial bytes received but Object is incomplete</td>
            </tr>
          </tbody>
        </table>
        <section anchor="receivedlate-determination">
          <name>RECEIVED_LATE Determination</name>
          <t>Receiver MUST determine Object expiration based on local playback deadline:</t>
          <t>An Object is <tt>RECEIVED_LATE</tt> when its arrival time exceeds its expected playback
moment.</t>
          <t>When playback deadline is unavailable (e.g., non-real-time playback scenarios),
receiver SHOULD report <tt>RECEIVED</tt> rather than <tt>RECEIVED_LATE</tt>.</t>
        </section>
        <section anchor="notreceived-reporting-timing">
          <name>NOT_RECEIVED Reporting Timing</name>
          <t>Receiver SHOULD report an Object as <tt>NOT_RECEIVED</tt> when one of the following
conditions is met:</t>
          <ul spacing="normal">
            <li>
              <t>A subsequent Object with larger Object ID has arrived, but this Object has not.</t>
            </li>
            <li>
              <t>The Object's expected arrival time has exceeded <tt>2 x expected_interval</tt>
(see Section 5.4.6) without arrival, and no subsequent Object is available for
reference.</t>
            </li>
          </ul>
          <t>Condition 2 covers the "last Object lost" scenario (no subsequent Object to
trigger Condition 1).</t>
          <t>Receiver MUST NOT report <tt>NOT_RECEIVED</tt> for Objects that are not yet reasonably
expected to arrive.</t>
        </section>
        <section anchor="partiallyreceived">
          <name>PARTIALLY_RECEIVED</name>
          <t>Applicable to Objects carried over QUIC Stream: When a Stream is terminated by
<tt>RESET_STREAM</tt> or closed due to timeout, Objects with partially received data
SHOULD be reported as <tt>PARTIALLY_RECEIVED</tt>.</t>
          <t>The timeout threshold used to determine whether a partially received Object
should be reported as <tt>PARTIALLY_RECEIVED</tt> is application-defined. Different
applications may have different latency requirements (e.g., real-time voice vs.
file transfer), and the receiver's application layer is best positioned to
decide when an incomplete Object is no longer useful. Implementations SHOULD
allow the application layer to configure or signal this timeout value.</t>
          <t>For Objects carried over QUIC Datagram: Since QUIC Datagrams are not
retransmitted by the transport layer, any Object whose Datagram(s) are lost
results in incomplete data at the receiver. If the receiver detects that some
but not all Datagrams constituting an Object have arrived, and the remaining
Datagrams are not expected to arrive (e.g., a subsequent Object has arrived or
the application-defined timeout has expired), the Object SHOULD be reported as
<tt>PARTIALLY_RECEIVED</tt>. If no Datagrams for the Object have arrived, the Object
SHOULD be reported as <tt>NOT_RECEIVED</tt> instead.</t>
        </section>
      </section>
      <section anchor="summary-stats-block">
        <name>Summary Stats Block</name>
        <t><tt>
Summary Stats {
  Report Interval (i),
  Total Objects Evaluated (i),
  Objects Received (i),
  Objects Received Late (i),
  Objects Lost (i),
  Avg Inter-Arrival Delta (i),
}
</tt></t>
        <t>Summary Stats MUST always be included in every MMF, not controlled by negotiation
bitmap. It provides windowed aggregate information, enabling lightweight CC
consumers that do not parse Object Entry to obtain effective signals. The MoQ
layer can compute control decisions based on this block and issue them to CC
algorithms via the cross-layer control interface (Section 3.3).</t>
        <t>The Report Interval window of Summary Stats is independent from the coverage of
Object Entries. Object Entries MAY include Objects outside the Report Interval
window (e.g., continuously reported NOT_RECEIVED entries, see Section 7.4).</t>
        <section anchor="report-interval">
          <name>Report Interval</name>
          <t>The time window length covered by this report (varint), in microseconds. This
window spans from <tt>Report Timestamp - Report Interval</tt> to <tt>Report Timestamp</tt>.
RECOMMENDED value is 50000-200000 (50-200ms).</t>
        </section>
        <section anchor="total-objects-evaluated">
          <name>Total Objects Evaluated</name>
          <t>Total number of Objects (varint) evaluated within the Report Interval window.
Includes Objects of all statuses. MUST equal
<tt>Objects Received + Objects Received Late + Objects Lost</tt>.</t>
        </section>
        <section anchor="objects-received">
          <name>Objects Received</name>
          <t>Number of Objects (varint) with status <tt>RECEIVED</tt> within the window.</t>
        </section>
        <section anchor="objects-received-late">
          <name>Objects Received Late</name>
          <t>Number of Objects (varint) with status <tt>RECEIVED_LATE</tt> within the window.</t>
        </section>
        <section anchor="objects-lost">
          <name>Objects Lost</name>
          <t>Number of Objects (varint) with status <tt>NOT_RECEIVED</tt> or <tt>PARTIALLY_RECEIVED</tt>
within the window.</t>
        </section>
        <section anchor="avg-inter-arrival-delta">
          <name>Avg Inter-Arrival Delta</name>
          <t>Average arrival interval deviation (varint, signed encoding) of consecutive
received Object pairs within the window, in microseconds. Calculation method:</t>
          <t>For consecutive received Object pairs (i-1, i) sorted by arrival time within the
window:</t>
          <t><tt>
delta(i) = (A(i) - A(i-1)) - expected_interval
Avg Inter-Arrival Delta = mean(delta(i)) for all i
</tt></t>
          <t>Where <tt>A(i)</tt> is the arrival time of Object i, and <tt>expected_interval</tt> is the
expected arrival interval.</t>
          <t>Methods to determine <tt>expected_interval</tt> (by priority):</t>
          <ol spacing="normal" type="1"><li>
              <t>Known media frame rate (e.g., 50 obj/s --&gt; 20000us).</t>
            </li>
            <li>
              <t>Historical average arrival interval within current session (sliding window).</t>
            </li>
          </ol>
          <t>If neither method is available, receiver SHOULD use method 2 or set this field
to 0.</t>
          <t>Positive values indicate Object arrival interval greater than expected (increased
queuing), negative values indicate less than expected. When fewer than 2 received
Objects exist in the window, this field MUST be 0.</t>
        </section>
      </section>
      <section anchor="optional-media-metrics">
        <name>Optional Media Metrics</name>
        <t>Optional Media Metrics immediately follow Summary Stats. <tt>Optional Metric Count</tt>
(varint) specifies the number of subsequent Optional Metrics; a value of 0
indicates no optional metrics are included.</t>
        <t>Each metric uses Key-Value-Pair encoding (draft-ietf-moq-transport-17,
Section 1.4.2):</t>
        <t><tt>
Optional Metric {
  Metric Type (i),
  Metric Value (i),
}
</tt></t>
        <t>Defined metric types are divided into two categories: Application-Layer Metrics
and QUIC Layer Summary Metrics.</t>
        <t><strong>Application-Layer Metrics:</strong></t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">Unit</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>0x02</tt></td>
              <td align="left">
                <tt>PLAYOUT_AHEAD_MS</tt></td>
              <td align="left">milliseconds</td>
              <td align="left">Remaining time until playback stall at receiver, i.e., buffered but not yet played media duration. Smaller values indicate closer to stall (0 = currently stalled).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x04</tt></td>
              <td align="left">
                <tt>ESTIMATED_BANDWIDTH_KBPS</tt></td>
              <td align="left">kbps</td>
              <td align="left">Available bandwidth estimate observed at receiver. Can be calculated as bytes received in window / window duration. For sender to cross-reference with local bandwidth estimation.</td>
            </tr>
          </tbody>
        </table>
        <t><strong>QUIC Layer Summary Metrics:</strong></t>
        <t>The following metrics expose the receiver's local QUIC connection transport state
to the sender for CC algorithm cross-validation.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">Unit</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>0x10</tt></td>
              <td align="left">
                <tt>PEER_RTT_US</tt></td>
              <td align="left">microseconds</td>
              <td align="left">Receiver's local QUIC connection smoothed RTT, corresponding to <tt>smoothed_rtt</tt> in RFC 9002. For sender to cross-validate with local RTT estimation.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x12</tt></td>
              <td align="left">
                <tt>PEER_LOSS_RATE</tt></td>
              <td align="left">per mille</td>
              <td align="left">Receiver's local QUIC connection packet loss rate within Report Interval, expressed in per mille (e.g., 50 = 5.0%).</td>
            </tr>
          </tbody>
        </table>
        <t>MMF's core CC signals rely on <tt>Receive Timestamp Delta</tt> in Object Entry
(Section 5.2.3, referencing QUIC receive-ts / WebRTC TWCC per-packet delta
encoding approach) and <tt>Summary Stats</tt> (Section 5.4), not Optional Metrics.
Optional Metrics serve only as supplements.</t>
        <t>Type values <tt>0x00-0x1f</tt> are reserved for this specification. Values <tt>0x20</tt> and
above are available for application-layer custom use.</t>
        <t>Receiver MUST ignore unrecognized Metric Types.</t>
        <t>Optional Media Metrics MAY be included in MMF only when both parties have
declared <tt>bit1=1</tt> in Setup negotiation (Section 6). When not negotiated or
<tt>bit1=0</tt>, <tt>Optional Metric Count</tt> MUST be 0.</t>
      </section>
      <section anchor="report-size-control">
        <name>Report Size Control</name>
        <t>A single MMF is RECOMMENDED not to exceed 1200 bytes to avoid QUIC packet
fragmentation.</t>
        <t>When the number of Objects to report exceeds the capacity of a single MMF,
receiver SHOULD:</t>
        <ul spacing="normal">
          <li>
            <t>Prioritize including recent Object Entries (largest Object IDs).</t>
          </li>
          <li>
            <t>Trim the oldest Object Entries.</t>
          </li>
          <li>
            <t>Ensure Summary Stats covers the complete Report Interval window (Summary Stats
is not affected by Object Entry trimming).</t>
          </li>
        </ul>
        <section anchor="encoding-example">
          <name>Encoding Example</name>
          <t>The following is an encoding structure of a typical MMF reporting delivery status
of the 5 most recent Objects on the <tt>audio_response</tt> Track. Object Entries are
sorted in ascending order by Object ID. Signed fields use ZigZag-encoded
unsigned values (encoding convention at the beginning of Section 5).</t>
          <t>```
MoQ Multimodal Feedback:
  Report Timestamp: 2000000 (2000000us = 2s since setup)
  Report Sequence: 10 (10th report)
  Object Entry Count: 5 (5 Objects)</t>
          <t>Object Entry [0]: (smallest Object ID, first in list)
    Object ID: 96
    Status: 0x00 (RECEIVED)
    Recv Ts Delta: 169999 (ZigZag(-85000): 85ms before Report Timestamp)
    (First received Object, baseline=Report Timestamp)</t>
          <t>Object Entry [1]:
    Object ID: 97
    Status: 0x02 (NOT_RECEIVED)
    (No Recv Ts Delta)</t>
          <t>Object Entry [2]:
    Object ID: 98
    Status: 0x01 (RECEIVED_LATE)
    Recv Ts Delta: 100000 (ZigZag(+50000): 50ms later than Object 96)
    (Skip NOT_RECEIVED 97, baseline=Object 96)</t>
          <t>Object Entry [3]:
    Object ID: 99
    Status: 0x00 (RECEIVED)
    Recv Ts Delta: 40000 (ZigZag(+20000): 20ms later than Object 98)</t>
          <t>Object Entry [4]:
    Object ID: 100
    Status: 0x00 (RECEIVED)
    Recv Ts Delta: 40000 (ZigZag(+20000): 20ms later than Object 99)</t>
          <t>Summary Stats:
    Report Interval: 100000 (100000us = 100ms)
    Total Objects Evaluated: 5
    Objects Received: 3
    Objects Received Late: 1
    Objects Lost: 1
    Avg Inter-Arrival Delta: 6000 (ZigZag(+3000): avg arrival interval 3ms larger)</t>
          <t>Optional Metric Count: 2
  Optional Metric [0]:
    Metric Type: 0x02 (PLAYOUT_AHEAD_MS)
    Metric Value: 150 (playout headroom 150ms)
  Optional Metric [1]:
    Metric Type: 0x04 (ESTIMATED_BANDWIDTH_KBPS)
    Metric Value: 800 (estimated bandwidth 800kbps)
```</t>
          <t>In this example, Object 97 is lost and Object 98 arrived late. Object 98's delta
(+50ms) is significantly larger than normal interval (~20ms). Avg Inter-Arrival
Delta is positive (+3ms) indicating larger-than-expected arrival intervals.
PLAYOUT_AHEAD_MS is only 150ms. These signals combined indicate deteriorating
network conditions.</t>
        </section>
      </section>
    </section>
    <section anchor="negotiation">
      <name>Negotiation</name>
      <section anchor="setup-parameter">
        <name>Setup Parameter</name>
        <t>During MOQT Setup phase, both parties declare Multimodal Feedback capability via
Setup Parameter.</t>
        <t><tt>
MOQT_MULTIMODAL_FEEDBACK Setup Parameter {
  Type = TBD1 (i),
  Length (i),
  Value (i),
}
</tt></t>
        <t>The <tt>Value</tt> field is a capability bitmap (varint) with the following bit
definitions:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Bit</th>
              <th align="left">Name</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">
                <tt>OUTPUT_FEEDBACK</tt></td>
              <td align="left">Support output direction Feedback Track (receiver--&gt;sender)</td>
            </tr>
            <tr>
              <td align="left">1</td>
              <td align="left">
                <tt>OPTIONAL_METRICS</tt></td>
              <td align="left">Support Optional Media Metrics (Section 5.5)</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">
                <tt>INPUT_FEEDBACK</tt></td>
              <td align="left">Support input direction Feedback Track (sender--&gt;receiver, Section 3.4)</td>
            </tr>
            <tr>
              <td align="left">3-62</td>
              <td align="left">Reserved</td>
              <td align="left">Sender MUST set to 0, receiver MUST ignore</td>
            </tr>
          </tbody>
        </table>
        <t><strong>Negotiation Example:</strong></t>
        <t><tt>
Client                              Server
  |                                    |
  | CLIENT_SETUP(                      |
  |   version=16,                      |
  |   params=[                         |
  |     {type=0x00, value=0x02},       | (ROLE=Publisher)
  |     {type=TBD1, value=0x03}        | (MULTIMODAL_FEEDBACK: bit0|1=1)
  |   ])                               |
  |-----------------------------------&gt;|
  |                                    |
  | SERVER_SETUP(                      |
  |   version=16,                      |
  |   params=[                         |
  |     {type=0x00, value=0x03},       | (ROLE=PubSub)
  |     {type=TBD1, value=0x01}        | (MULTIMODAL_FEEDBACK: bit0=1)
  |   ])                               |
  |&lt;-----------------------------------|
  |                                    |
  | Negotiation Result:                |
  |   bit0=1 (Output Feedback)         |
  |   bit1=0 (Client declared but      |
  |         Server did not,            |
  |         Optional Metrics disabled) |
</tt></t>
      </section>
      <section anchor="capability-negotiation-rules">
        <name>Capability Negotiation Rules</name>
        <t>Feature enable conditions (both parties MUST declare corresponding bit as 1):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Feature</th>
              <th align="left">Enable Condition</th>
              <th align="left">Dependency</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Output Feedback</td>
              <td align="left">Both bit0=1</td>
              <td align="left">None</td>
            </tr>
            <tr>
              <td align="left">Optional Media Metrics</td>
              <td align="left">Both bit1=1</td>
              <td align="left">Output Feedback enabled</td>
            </tr>
            <tr>
              <td align="left">Input Feedback</td>
              <td align="left">Both bit2=1</td>
              <td align="left">None</td>
            </tr>
          </tbody>
        </table>
        <t>When a feature is not enabled:</t>
        <ul spacing="normal">
          <li>
            <t>Receiver MUST NOT publish Feedback Track in corresponding direction.</t>
          </li>
          <li>
            <t>When sender receives PUBLISH request for Feedback Track in un-negotiated
direction, it SHOULD respond with <tt>REQUEST_ERROR</tt> (draft-ietf-moq-transport-17,
Section 9.8).</t>
          </li>
          <li>
            <t>MMF MUST NOT include un-negotiated optional fields (e.g., Optional Metrics).</t>
          </li>
        </ul>
      </section>
      <section anchor="behavior-when-parameter-not-declared">
        <name>Behavior When Parameter Not Declared</name>
        <t>When peer's Setup does not include <tt>MOQT_MULTIMODAL_FEEDBACK</tt> Parameter, it is
equivalent to <tt>Value=0</tt> (no Multimodal Feedback capability supported).</t>
        <t>This end MUST NOT proactively establish Feedback Track.</t>
      </section>
      <section anchor="runtime-capability-change">
        <name>Runtime Capability Change</name>
        <t>This version does not support runtime changes to Multimodal Feedback capability.
If change is needed, MoQ session MUST be re-established.</t>
      </section>
    </section>
    <section anchor="receiver-behavior">
      <name>Receiver Behavior</name>
      <section anchor="arrival-time-recording">
        <name>Arrival Time Recording</name>
        <t>Receiver MUST record the arrival time of each Object. Arrival time is defined as
the moment when the last byte of the Object arrives at the receiver's MoQ layer.
Implementation MUST use monotonic clock, unaffected by system time adjustments.
Time precision SHOULD be no less than 1 millisecond, RECOMMENDED to be
microsecond-level.</t>
      </section>
      <section anchor="delivery-status-determination">
        <name>Delivery Status Determination</name>
        <t>Receiver MUST maintain delivery status for each known Object:</t>
        <ul spacing="normal">
          <li>
            <t>Last byte of Object arrives and within deadline: <tt>RECEIVED</tt> (0x00).</t>
          </li>
          <li>
            <t>Last byte of Object arrives but exceeds deadline: <tt>RECEIVED_LATE</tt> (0x01).</t>
          </li>
          <li>
            <t>Object has not arrived but is reasonably considered lost (see Section 5.3):
<tt>NOT_RECEIVED</tt> (0x02).</t>
          </li>
          <li>
            <t>Object partially arrived and carrying Stream is closed: <tt>PARTIALLY_RECEIVED</tt>
(0x03).</t>
          </li>
        </ul>
        <t>Object status MAY be updated in subsequent MMF. For example, from <tt>NOT_RECEIVED</tt>
to <tt>RECEIVED</tt> (when a delayed Object is eventually received). Therefore, counts
such as <tt>Objects Lost</tt> in Summary Stats reflect an observation snapshot at
report generation time and are not guaranteed to be consistent with final
statistics. Sender SHOULD use them as immediate signals rather than precise
statistics.</t>
      </section>
      <section anchor="mmf-generation-frequency">
        <name>MMF Generation Frequency</name>
        <t>Receiver SHOULD generate MMF at the following recommended frequencies:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Scenario</th>
              <th align="left">Recommended Frequency</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Audio Track (~50 Object/s)</td>
              <td align="left">Every 50-100ms</td>
              <td align="left">High-frequency Objects require dense feedback</td>
            </tr>
            <tr>
              <td align="left">Video Track (~2-30 Object/s)</td>
              <td align="left">Every 100-200ms</td>
              <td align="left">Low-frequency Objects can reduce feedback frequency</td>
            </tr>
            <tr>
              <td align="left">No new Objects arriving</td>
              <td align="left">Every 500ms-1s</td>
              <td align="left">Heartbeat to prevent sender from misjudging connection state</td>
            </tr>
          </tbody>
        </table>
        <t>Generation frequency SHOULD NOT exceed once per 50ms (to avoid feedback itself
consuming excessive bandwidth). Generation frequency SHOULD NOT be lower than
once per 2s (to ensure sender receives timely feedback).</t>
        <t>When receiver detects rapid deterioration in delivery quality (e.g., consecutive
Object losses), it MAY immediately generate an additional MMF (without waiting
for the scheduled cycle) to accelerate sender response.</t>
      </section>
      <section anchor="object-entry-selection">
        <name>Object Entry Selection</name>
        <t>When generating MMF, receiver SHOULD follow these Object Entry selection
strategies:</t>
        <ul spacing="normal">
          <li>
            <t>Prioritize covering recent Objects (most recent in time).</t>
          </li>
          <li>
            <t>Total number of Object Entries per MMF is RECOMMENDED not to exceed 50.</t>
          </li>
          <li>
            <t>For Objects already reported in previous MMF with unchanged status, they MAY
be omitted.</t>
          </li>
          <li>
            <t>Objects with status <tt>NOT_RECEIVED</tt> SHOULD be continuously reported (for at
least 3 MMF cycles) until status changes or exceeding the report window.</t>
          </li>
        </ul>
      </section>
      <section anchor="exception-handling">
        <name>Exception Handling</name>
        <ul spacing="normal">
          <li>
            <t><strong>Object Out-of-Order Arrival:</strong> Receiver MUST record by actual arrival time
without reordering. Arrival time reflects actual network behavior; out-of-order
itself is a valid network signal.</t>
          </li>
          <li>
            <t><strong>Duplicate Objects:</strong> Receiver SHOULD ignore duplicate arrivals, retaining the
first arrival time.</t>
          </li>
          <li>
            <t><strong>Feedback Track Publish Failure:</strong> Receiver SHOULD retry establishing Feedback
Track with backoff strategy. Retry interval is RECOMMENDED to use exponential
backoff (initial 1s, maximum 30s).</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="sender-behavior">
      <name>Sender Behavior</name>
      <section anchor="object-to-quic-packet-mapping">
        <name>Object to QUIC Packet Mapping</name>
        <t>If a sender needs to correlate MMF feedback with local transmission events, it MUST maintain the mapping relationship between Objects and QUIC packets. Without this mapping, the sender cannot determine the number of packets, packet loss count, and delivery duration for a single video frame, and the per-Object status reported by MMF cannot be aligned with sender-side statistics.</t>
        <section anchor="object-granularity">
          <name>Object Granularity</name>
          <t>In real-time media scenarios, a MoQ Object SHOULD correspond to an independently decodable media unit (a video frame or an audio frame).</t>
          <t>This enables per-Object feedback in MMF to directly carry frame-level semantics: Object loss = frame loss, Object expiration = frame expiration. If an Object contains multiple frames or a single frame spans multiple Objects, there will be deviation between the delivery status reported by MMF and the actual media quality.</t>
        </section>
        <section anchor="packet-not-crossing-object-boundaries">
          <name>Packet Not Crossing Object Boundaries</name>
          <t>Senders SHOULD avoid merging data from different Objects into the same QUIC packet.</t>
          <t>If a packet contains data from two Objects, then loss or delay of that packet cannot be attributed to a single Object, leading to:</t>
          <ul spacing="normal">
            <li>
              <t>Frame-level packet loss rate statistics distortion (single packet loss affects statistics for both frames)</t>
            </li>
            <li>
              <t>Frame-level delivery time cannot be accurately measured (transmission times of two frames overlap)</t>
            </li>
            <li>
              <t>Per-Object arrival time at the receiver becomes inaccurate</t>
            </li>
          </ul>
          <t>During implementation, when the QUIC send queue attempts to append new data to an existing packet, it SHOULD check whether both belong to the same Object; if not, it SHOULD create a new packet.</t>
        </section>
        <section anchor="sender-side-per-object-transmission-statistics">
          <name>Sender-Side per-Object Transmission Statistics</name>
          <t>Senders SHOULD maintain the following transmission statistics for each Object:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Statistic</th>
                <th align="left">Description</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">
                  <tt>sent_packets</tt></td>
                <td align="left">Number of QUIC packets sent for this Object</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>lost_packets</tt></td>
                <td align="left">Number of QUIC packets lost for this Object</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>first_sent_time</tt></td>
                <td align="left">Transmission time of the first packet for this Object</td>
              </tr>
              <tr>
                <td align="left">
                  <tt>all_acked_time</tt></td>
                <td align="left">Time when all packets for this Object are acknowledged</td>
              </tr>
            </tbody>
          </table>
          <t>Based on these statistics, the sender can compute:</t>
          <ul spacing="normal">
            <li>
              <t><strong>Frame-level bandwidth sample:</strong> <tt>object_size / (all_acked_time - first_sent_time)</tt></t>
            </li>
            <li>
              <t><strong>Frame-level packet loss rate:</strong> <tt>lost_packets / sent_packets</tt></t>
            </li>
            <li>
              <t><strong>Frame-level delivery duration:</strong> <tt>all_acked_time - first_sent_time</tt></t>
            </li>
          </ul>
          <t>These metrics provide the foundation for frame-level BWE and frame-level pacing (Section 8.1.4). Standard CC algorithms (BBR, CUBIC) sample bandwidth at the packet level. Frame-level bandwidth sampling serves as a complementary approach, suitable for real-time video scenarios with large frame size variations (I-frames may be 10x larger than P-frames), helping to reduce noise from single-packet sampling.</t>
          <t>Whether a CC algorithm provides BWE output depends on the algorithm type. Model-based algorithms such as BBR and GCC provide bandwidth estimation; pure loss-based algorithms like CUBIC only output cwnd without explicit BWE. When the CC algorithm does not provide BWE, the MoQ layer MAY use frame-level bandwidth sampling as the bandwidth estimation source.</t>
        </section>
        <section anchor="frame-level-pacing">
          <name>Frame-Level Pacing</name>
          <t>Real-time video exhibits significant frame size variations. When using a global fixed pacing rate for transmission, large frames (I-frames) will burst a large number of packets in a short time, while small frames (P-frames) underutilize the sending window.</t>
          <t>Senders SHOULD calculate pacing intervals at Object granularity.</t>
          <t>The packet sending interval for each Object is RECOMMENDED to be computed as follows:</t>
          <t><tt>
pkt_send_interval = media_pace_duration / (sent_packets - 1)
</tt></t>
          <t>Where <tt>media_pace_duration</tt> is the media duration corresponding to this Object (e.g., 33ms@30fps for video, 20ms@50fps for audio). The first packet of an Object is sent immediately, and subsequent packets are sent at equal intervals of <tt>pkt_send_interval</tt>.</t>
          <t>This approach distributes an Object's data uniformly across its frame interval. I-frames have denser packet intervals, P-frames have sparser intervals, but neither produces bursts.</t>
          <t>Frame-level pacing may conflict with CC's pacing rate. When they are inconsistent, senders SHOULD use the lower sending rate to prevent frame-level pacing from bypassing CC's congestion control.</t>
        </section>
      </section>
      <section anchor="application-layer-consumption">
        <name>Application-Layer Consumption</name>
        <t>After the sender's MoQ layer receives MMF, it exposes the following information to the inference scheduler/ABR through application-layer callbacks:</t>
        <ul spacing="normal">
          <li>
            <t>Delivery quality (loss rate, expiration rate) of the associated media Track</t>
          </li>
          <li>
            <t>Per-Object status and timestamps (can be used for detailed analysis)</t>
          </li>
          <li>
            <t>Optional media metrics (playout headroom, bandwidth estimation, etc.)</t>
          </li>
        </ul>
        <t>The inference scheduler makes decisions based on the above information (see Section 9 for details).</t>
      </section>
      <section anchor="transport-layer-consumption-cross-layer-control">
        <name>Transport-Layer Consumption (Cross-Layer Control)</name>
        <t>The MoQ layer synthesizes MMF signals and local CC output, computes control decisions, and issues them to CC algorithms via the cross-layer control interface (Section 3.3). CC algorithms do not directly parse MMF, but instead execute control commands from the MoQ layer. Decision inputs, issuable commands, and CC behavior are described in Section 3.3.</t>
      </section>
      <section anchor="example-moq-layer-controlling-bbr">
        <name>Example: MoQ Layer Controlling BBR</name>
        <t>The core formula of BBR is <tt>pacing_rate = bandwidth x pacing_gain</tt>.</t>
        <t>BBR itself estimates bandwidth through ACK sampling and controls <tt>pacing_gain</tt> via its state machine. In cross-layer control mode, the MoQ layer takes over control of <tt>pacing_gain</tt>. BBR remains responsible for bandwidth estimation, while <tt>pacing_gain</tt> is determined by the MoQ layer based on MMF feedback:</t>
        <t>```
MoQ Layer:
 1. Read BBR's BWE
 2. Read MMF: Objects Lost, Late, PLAYOUT_AHEAD_MS, Delta
 3. Compute pacing_gain (comprehensive judgment)
 4. Issue pacing_gain --&gt; CC</t>
        <t>BBR:
 1. Receive pacing_gain
 2. pacing_rate = BWE x pacing_gain
  3. Send at pacing_rate
```</t>
        <t>Example logic for MoQ layer computing <tt>pacing_gain</tt>:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Objects Lost &gt; 0 and BBR local loss = 0</strong> --&gt; Reduce <tt>pacing_gain</tt> to 1.0
(CC local ACK is normal, but peer is actually losing frames; stop probing upward)</t>
          </li>
          <li>
            <t><strong>PLAYOUT_AHEAD_MS &lt; 100ms</strong> --&gt; Reduce <tt>pacing_gain</tt> to 1.0
(Insufficient playout headroom; avoid aggressive probing)</t>
          </li>
          <li>
            <t><strong>Avg Inter-Arrival Delta consistently positive</strong> --&gt; Reduce <tt>pacing_gain</tt> to 0.9
(Receiver-side queuing is worsening; proactively reduce speed)</t>
          </li>
          <li>
            <t><strong>High proportion of Objects Received Late</strong> --&gt; Reduce <tt>target_bitrate</tt>
(Transmission has no packet loss but delay exceeds deadline; reduce per-frame data volume at the source)</t>
          </li>
          <li>
            <t><strong>None of the above conditions met</strong> --&gt; Do not issue commands; BBR runs according to its own state machine</t>
          </li>
        </ol>
        <t>When the MoQ layer does not issue commands, BBR operates normally according to its own state machine. The MoQ layer overrides <tt>pacing_gain</tt> only when MMF signals indicate intervention is needed; otherwise, BBR operates fully autonomously.</t>
      </section>
    </section>
    <section anchor="application-scenarios-streaming-media-and-ai-inference">
      <name>Application Scenarios: Streaming Media and AI Inference</name>
      <t>This section describes the usage of MMF in streaming media and AI inference scenarios. Section 9.1 presents a general adaptation framework, and Section 9.2 illustrates with concrete use cases.</t>
      <section anchor="mmf-driven-rate-quality-adaptation">
        <name>MMF-Driven Rate-Quality Adaptation</name>
        <t>The following adaptation rules apply to all MoQ streaming media scenarios:</t>
        <table>
          <thead>
            <tr>
              <th align="left">MMF Field (Section)</th>
              <th align="left">Adaptation Action</th>
              <th align="left">Effect</th>
              <th align="left">Applicable Scenarios</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">PLAYOUT_AHEAD_MS downward trend (5.5)</td>
              <td align="left">Reduce encoding bitrate</td>
              <td align="left">Less data per frame</td>
              <td align="left">Video/Audio/Inference</td>
            </tr>
            <tr>
              <td align="left">PLAYOUT_AHEAD_MS downward trend (5.5)</td>
              <td align="left">Reduce frame rate / Object sending frequency</td>
              <td align="left">Reduced transmission volume</td>
              <td align="left">Video</td>
            </tr>
            <tr>
              <td align="left">Objects Lost &gt; 0 (5.4.5)</td>
              <td align="left">Reduce sending rate (with CC)</td>
              <td align="left">Match available bandwidth</td>
              <td align="left">All</td>
            </tr>
            <tr>
              <td align="left">Objects Received Late &gt; 0 (5.4.4)</td>
              <td align="left">Reduce quality to meet deadline</td>
              <td align="left">Trade quality for timeliness</td>
              <td align="left">All</td>
            </tr>
            <tr>
              <td align="left">Avg Inter-Arrival Delta increasing (5.4.6)</td>
              <td align="left">Preventive quality reduction (before packet loss)</td>
              <td align="left">Avoid sudden degradation</td>
              <td align="left">All</td>
            </tr>
            <tr>
              <td align="left">PLAYOUT_AHEAD_MS recovery (5.5)</td>
              <td align="left">Gradually restore bitrate/frame rate</td>
              <td align="left">Improve experience</td>
              <td align="left">All</td>
            </tr>
          </tbody>
        </table>
        <t>These adaptations can be executed at the MoQ publishing layer with per-Object granularity and latency &lt; 1 frame cycle, without requiring application-layer media source cooperation. When the application layer is an AI inference pipeline, MMF can also adjust inference pipeline parameters (real-time flush, dynamic chunk_size).</t>
        <t>Unidirectional and bidirectional adaptation modes are described in Section 3.4 (Bidirectional MMF).</t>
      </section>
      <section anchor="typical-use-cases">
        <name>Typical Use Cases</name>
        <t>The following use cases assume BBR as the CC algorithm (integration method described in Section 8.4) and illustrate the effects of MMF in different scenarios. All cases follow the strategy of prioritizing audio output and progressively reducing quality.</t>
        <section anchor="use-case-a-video-live-streaming-abr-adaptation">
          <name>Use Case A: Video Live Streaming ABR Adaptation</name>
          <ul spacing="normal">
            <li>
              <t><strong>Scenario:</strong> Sender publishes video live streaming with two Tracks: 1080p (3Mbps) and 720p (1.5Mbps). Receiver is currently subscribed to the 1080p Track.</t>
            </li>
            <li>
              <t><strong>Trigger condition:</strong> Available network bandwidth drops from 4Mbps to 2Mbps.</t>
            </li>
            <li>
              <t><strong>MMF signals:</strong> Proportion of Objects Received Late increases (video frames arrive but exceed deadline), PLAYOUT_AHEAD_MS gradually decreases.</t>
            </li>
            <li>
              <t><strong>CC response:</strong> BBR reduces <tt>pacing_rate</tt> to match new bandwidth.</t>
            </li>
            <li>
              <t><strong>Application-layer response:</strong> MoQ publishing layer detects persistently high Objects Received Late on the 1080p Track, triggers ABR switching: switches to 720p Track at the next Group boundary (native MoQ Track switching mechanism).</t>
            </li>
            <li>
              <t><strong>Recovery:</strong> After MMF reports Objects Received Late returning to normal and PLAYOUT_AHEAD_MS recovering, sender may attempt to switch back to 1080p.</t>
            </li>
            <li>
              <t><strong>Benefit:</strong> Per-frame integrity and deadline information provided by MMF enables higher ABR decision accuracy than pure CC-driven approaches.</t>
            </li>
          </ul>
        </section>
        <section anchor="use-case-b-bandwidth-drop-audio-video-mixed">
          <name>Use Case B: Bandwidth Drop (Audio-Video Mixed)</name>
          <ul spacing="normal">
            <li>
              <t><strong>Trigger condition:</strong> Available bandwidth drops sharply.</t>
            </li>
            <li>
              <t><strong>MMF signals:</strong> Objects Lost increases, Avg Inter-Arrival Delta increases, PLAYOUT_AHEAD_MS decreases.</t>
            </li>
            <li>
              <t><strong>CC response:</strong> MoQ layer issues <tt>pacing_gain=1.0</tt> based on MMF loss signal, pauses upward probing.</t>
            </li>
            <li>
              <t><strong>Application-layer response:</strong> Reduce Opus bitrate, pause video Track (prioritize audio).</t>
            </li>
            <li>
              <t><strong>Benefit:</strong> Peer-side frame loss signal from MMF and congestion signal from BBR local ACK can cross-validate. Gradually restore bitrate after network recovery.</t>
            </li>
          </ul>
        </section>
        <section anchor="use-case-c-multi-layer-quality-adaptation-ai-inference">
          <name>Use Case C: Multi-Layer Quality Adaptation (AI Inference)</name>
          <ul spacing="normal">
            <li>
              <t><strong>Trigger condition:</strong> Persistent congestion.</t>
            </li>
            <li>
              <t><strong>MMF signals:</strong> Objects Lost persistently high, PLAYOUT_AHEAD_MS at low level.</t>
            </li>
            <li>
              <t><strong>CC response:</strong> MoQ layer continuously issues low <tt>pacing_gain</tt>, pauses upward probing.</t>
            </li>
            <li>
              <t><strong>Application-layer response:</strong> Based on general adaptation from Use Case B, inference pipeline reduces <tt>chunk_size</tt>, accelerates audio flush, reduces output latency. CC and application layer adjust synchronously.</t>
            </li>
            <li>
              <t><strong>Benefit:</strong> Per-frame level adaptation takes effect within frame cycle; audio remains uninterrupted throughout. During recovery, gradually restore <tt>chunk_size</tt> and bitrate.</t>
            </li>
          </ul>
        </section>
        <section anchor="use-case-d-generation-rate-overload-ai-inference">
          <name>Use Case D: Generation Rate Overload (AI Inference)</name>
          <ul spacing="normal">
            <li>
              <t><strong>Trigger condition:</strong> Inference model suddenly generates long response, audio_response traffic spikes.</t>
            </li>
            <li>
              <t><strong>MMF signals:</strong> High proportion of Objects Received Late (frames arrive but exceed playback deadline), Avg Inter-Arrival Delta is large.</t>
            </li>
            <li>
              <t><strong>CC response:</strong> Reduce <tt>pacing_rate</tt>.</t>
            </li>
            <li>
              <t><strong>Application-layer response:</strong> Reduce encoding bitrate, accelerate flush, guide inference to generate more concise responses (reduce audio duration at the source).</t>
            </li>
            <li>
              <t><strong>Benefit:</strong> Trade quality for timeliness, avoid playback stuttering.</t>
            </li>
          </ul>
        </section>
        <section anchor="use-case-e-streaming-input-inference-bidirectional-mmf">
          <name>Use Case E: Streaming Input Inference (Bidirectional MMF)</name>
          <ul spacing="normal">
            <li>
              <t><strong>Trigger condition:</strong> Uplink network jitter (streaming input inference scenario).</t>
            </li>
            <li>
              <t><strong>MMF signals:</strong> Input MMF reports high proportion of NOT_RECEIVED.</t>
            </li>
            <li>
              <t><strong>Application-layer response:</strong>
              </t>
              <ul spacing="normal">
                <li>
                  <t><strong>Client:</strong> Increase chunk size, reduce uplink bitrate, pause video input.</t>
                </li>
                <li>
                  <t><strong>Server:</strong> Manage KV cache, adjust handling strategy for incomplete input.</t>
                </li>
              </ul>
            </li>
            <li>
              <t><strong>Benefit:</strong> Bidirectional MMF coordinates quality of both uplink and downlink paths. MMF session activity signals (feedback frequency, PLAYOUT_AHEAD_MS) can be used for KV cache eviction and priority decisions.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines the following code points for registration:</t>
      <ul spacing="normal">
        <li>
          <t><strong>TBD1:</strong> MOQT_MULTIMODAL_FEEDBACK Setup Parameter Type (Section 6.1)</t>
        </li>
        <li>
          <t><strong>Delivery Status Code Registry</strong> (Section 5.3):
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>0x00</tt>: RECEIVED</t>
            </li>
            <li>
              <t><tt>0x01</tt>: RECEIVED_LATE</t>
            </li>
            <li>
              <t><tt>0x02</tt>: NOT_RECEIVED</t>
            </li>
            <li>
              <t><tt>0x03</tt>: PARTIALLY_RECEIVED</t>
            </li>
          </ul>
        </li>
        <li>
          <t><strong>Optional Metrics Type Registry</strong> (Section 5.5):
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>0x02</tt>: PLAYOUT_AHEAD_MS</t>
            </li>
            <li>
              <t><tt>0x04</tt>: ESTIMATED_BANDWIDTH_KBPS</t>
            </li>
            <li>
              <t><tt>0x10</tt>: PEER_RTT_US</t>
            </li>
            <li>
              <t><tt>0x12</tt>: PEER_LOSS_RATE</t>
            </li>
          </ul>
        </li>
      </ul>
    </section>
    <section anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The design of this document references QUIC Extended ACK Receive Timestamps, RTP Transport Congestion Control Feedback, and drafts from the MoQ Working Group (MOQT / MSF / Metrics), as well as real-time multimodal inference systems (LongCat-Flash-Omni, Qwen3-Omni, Voxtral-Realtime), the vLLM-Omni Stage Pipeline framework, and vLLM streaming input mode.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-references">
      <name>Normative References</name>
      <reference anchor="QUIC-TRANSPORT">
        <front>
          <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
          <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
          <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
          <date month="May" year="2021"/>
          <abstract>
            <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9000"/>
        <seriesInfo name="DOI" value="10.17487/RFC9000"/>
      </reference>
      <reference anchor="MoQTransport">
        <front>
          <title>Media over QUIC Transport</title>
          <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
            <organization>Cisco</organization>
          </author>
          <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
            <organization>Google</organization>
          </author>
          <author fullname="Ian Swett" initials="I." surname="Swett">
            <organization>Google</organization>
          </author>
          <author fullname="Alan Frindell" initials="A." surname="Frindell">
            <organization>Meta</organization>
          </author>
          <date day="2" month="March" year="2026"/>
          <abstract>
            <t>   This document defines the core behavior for Media over QUIC Transport
   (MOQT), a media transport protocol designed to operate over QUIC and
   WebTransport, which have similar functionality.  MOQT allows a
   producer of media to publish data and have it consumed via
   subscription by a multiplicity of endpoints.  It supports
   intermediate content distribution networks and is designed for high
   scale and low latency distribution.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-17"/>
      </reference>
      <reference anchor="quic-receive-ts">
        <front>
          <title>QUIC Extended Acknowledgement for Reporting Packet Receive Timestamps</title>
          <author fullname="Ian Swett" initials="I." surname="Swett">
            <organization>Google LLC</organization>
          </author>
          <author fullname="Joseph Beshay" initials="J." surname="Beshay">
            <organization>Meta Platforms, Inc.</organization>
          </author>
          <date day="2" month="March" year="2026"/>
          <abstract>
            <t>   This document defines an extension to the QUIC transport protocol
   which supports reporting multiple packet receive timestamps for post-
   handshake packets.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-quic-receive-ts-01"/>
      </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>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA81963IbR5bm/3qKXHfsGnADIEFKvlAtR/OmNrcpiU1S9vZ0
9JIFoEiUBVRhqgqkOKb75z7A/pkHmjfZJ9nznXPyUhdQ9MxOxCqi2yBQlXky
89xvORwOo1k+zeJlsmdmRXxTDX9O4+x2uMz/ebhcL6p0mc/ixfAmSWaTePpx
uL0dVWm1oKff5n8xb90T5o0+EcVFEu+ZL/ZXq0U6jas0z0oTZzNzntA4l+ky
+SK6z4uPt0W+XtFzb5NZGpv3d0lh/vLh5PCL6GPyQL/P9sxJViVFllTDI8AV
Rat0z/ytyqcDU+ZFVSQ3JX16WOLD36NpPkuz2z2zLodxOU3TiKZObvPiYc+U
1Swq6fl4SWMeX76J0lWxZ6piXVY729vfbe/QrwTgVbzIs4R/SKIoXlfzvNiL
jBnS/4xJs5KWPDL/HbvD38ievaVZ5+s0+D4vbuMs/Rde+Z7ZX6STeBLTYqYj
/jlZxumCgJrTTqSjn5fzP8byyDClR6b5MqrP+deROU3XwYx/jTN60335vOmW
aZz/nI4WD8vPTHc+Mj+Fs53nWF9sv2zMllXmTzjH2lzF6H79xzir+IRliiwv
lvTOXYINxTEPL8/3312cvT+/pOdvpt9tE14ZoNRlEWflis6Xzmp4NBKUTJPq
hjGysr8Ox9/Q8/+8TqfDIpkmNPKwKluvNH4fbo+jKEqzGw9NNBwOTTwh9Iin
hGKX87Q0RA/rZUJLmyU3aZYAe03yqUqykhZtqtwIyuYWZY2D2fTevv/LZd9U
87iKkiyeLOht0InCUJR4vUj42VmywFcPtAo6kurBOMBoFvpklkIZk5+TaVVG
9GKZZDMaY2Qu5wkPu4gfCIbyIavmSZn+CyZ7+8ZYWmWqW+RTIs4pnWJS8sj0
sSryRdQ7POybfF2t1hWAomOiT4n9maCbpiXTbrmezk1cmklKm1QlA3NTEGYY
+UxTRKt4SkTAn3UNtAGJOTw08YIoMK3mS0M8Yr1IzB0tKDbTIi/LoQBvwUlB
7DfxNMHq6BCWyXROmFYuabvWJa0MQ2J3sdvTj1uyLWYWVzEGTxbmniai9WCk
gmYDTCZL7t2KlklZxreJqR5WCe3hT/OUAOLz2z/8MwOPU1rxJhFTo+2Kl6vI
HXzJA6XZOsF2rYr8Lp0lZpUUQ1r/x6TCesv0NosX5SsCtraEeDYrIzyqUMvJ
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
Iq//C7U1ZvNlwQAA

-->

</rfc>
