<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-liu-moq-feedback-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>MoQ Feedback</title>
    <seriesInfo name="Internet-Draft" value="draft-liu-moq-feedback-00"/>
    <author initials="Y." surname="Liu" fullname="Yanmei Liu">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>miaoji.lym@alibaba-inc.com</email>
      </address>
    </author>
    <author initials="M." surname="Jiang" fullname="Minghui Jiang">
      <organization>Alibaba Inc.</organization>
      <address>
        <email>shimei.jmh@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="July" day="31"/>
    <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>Relay:</strong> A MoQ node that forwards a media Track between its publisher and
subscribers, following <xref target="MoQTransport"/>.</t>
          </li>
          <li>
            <t><strong>Media Original Publisher:</strong> The Original Publisher, as defined by
<xref target="MoQTransport"/>, of the media Track associated with a Feedback Track.</t>
          </li>
          <li>
            <t><strong>Adjacent Media Publisher:</strong> The Publisher from which a Subscriber receives
the associated media Track on a particular MOQT session. It can be a Relay or
the Media Original Publisher.</t>
          </li>
          <li>
            <t><strong>Feedback Publisher:</strong> The Publisher of a Feedback Track, typically a
Subscriber of the associated media Track.</t>
          </li>
          <li>
            <t><strong>Feedback Track:</strong> A MoQ Track that carries MMF feedback.</t>
          </li>
          <li>
            <t><strong>Feedback Type:</strong> A Relay-visible Track Property that identifies whether a
Feedback Track terminates at the Adjacent Media Publisher or is delivered to
the Media Original Publisher.</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 anchor="feedback-improves-qoe-in-relay-based-scenarios">
        <name>Feedback Improves QoE in Relay-Based Scenarios</name>
        <t>In relay-based audio/video conferences, media can traverse a cascade of multiple
relays before reaching participants. Adaptive bitrate is commonly used in such
topologies to preserve the participants' quality of experience (QoE) as
downstream path conditions change. Implementations can support adaptive bitrate
in two ways:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Representation tiers at the Media Original Publisher:</strong> The Media Original
Publisher transcodes the media into multiple resolution and bitrate tiers,
allowing a suitable tier to be selected for each participant. This approach
is appropriate for conferences with many participants because the tiers can
be shared. In a small conference with only two or three participants,
however, most tiers may remain unused, making their transcoding cost a waste
of resources.</t>
          </li>
          <li>
            <t><strong>Multi-level feedback-driven adaptation:</strong> The last-hop Relay combines
participant feedback with its local forwarding context and generates feedback
that is meaningful to the Media Original Publisher. The Media Original
Publisher considers this information when choosing an appropriate source
bitrate. This approach avoids generating unused tiers and is suitable for
small conferences or when the Media Original Publisher does not provide
tiered transcoding.</t>
          </li>
        </ul>
        <t>By exposing delivery quality across the relay topology, MMF can support the
second approach and help the Media Original Publisher make bitrate decisions
before late or lost Objects degrade participant QoE.</t>
      </section>
    </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 9.1), achieving higher information completeness than CC
algorithms alone. An integration example is provided in Section 9.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">Hop-local or across Relays</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 9.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 9.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 9.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
  |-- output 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 6). 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. Input and output feedback independently use the
Feedback Track naming and type rules in Section 5.</t>
      </section>
    </section>
    <section anchor="moq-feedback-delivery-scenarios">
      <name>MoQ Feedback Delivery Scenarios</name>
      <t>MMF supports deployments in which feedback is consumed by the immediate
media-path peer as well as deployments in which feedback is delivered to the
Media Original Publisher. The Feedback Type Track Property defined in Section
5.1 identifies the intended consumer and required Relay behavior.</t>
      <section anchor="cascaded-relay-architecture">
        <name>Cascaded Relay Architecture</name>
        <t>In a cascaded Relay architecture, media from a Media Original Publisher
traverses multiple Relays before reaching a Subscriber. The Subscriber is the
feedback source, the Relay adjacent to the Subscriber can consume feedback for
the last-mile path, and the Relay chain can carry a separate Feedback Track to
the Media Original Publisher.</t>
        <t><tt>
Media:           Media Original Publisher -&gt; ... -&gt; L2 Relay -&gt; L1 Relay -&gt; Subscriber
HOP_FEEDBACK:                                                   L1 Relay &lt;- Subscriber
ORIGIN_FEEDBACK: Media Original Publisher &lt;- ... &lt;- L2 Relay &lt;- L1 Relay
</tt></t>
        <t>The following Feedback Tracks serve different consumers:</t>
        <ul spacing="normal">
          <li>
            <t>A <tt>HOP_FEEDBACK</tt> Track terminates at the L1 Relay. It enables the L1
Relay to react to last-mile delivery conditions, for example by selecting an
ABR Track, changing Object scheduling or priority, or adjusting pacing on the
downstream connection.</t>
          </li>
          <li>
            <t>The L1 Relay MAY use received <tt>HOP_FEEDBACK</tt> together with its local media
forwarding state to generate a new <tt>ORIGIN_FEEDBACK</tt> Track when required by
application policy. It MUST NOT relabel or mechanically forward the
<tt>HOP_FEEDBACK</tt> Objects as <tt>ORIGIN_FEEDBACK</tt>. The new report can provide the
Media Original Publisher with context suitable for source bitrate, frame-rate,
resolution, or generation-rate adaptation.</t>
          </li>
          <li>
            <t>An <tt>ORIGIN_FEEDBACK</tt> Track can traverse zero or more Relays. When Relays are
present, its MMF Payload remains opaque to intermediate Relays. In a direct
Subscriber-to-Media-Original-Publisher connection, the Subscriber can publish
<tt>ORIGIN_FEEDBACK</tt> without an intervening Relay.</t>
          </li>
        </ul>
        <t>A Subscriber behind an L1 Relay SHOULD publish its feedback report to that Relay
using <tt>HOP_FEEDBACK</tt>. A deployment MAY instead allow Subscriber-originated
<tt>ORIGIN_FEEDBACK</tt> when the Media Original Publisher has sufficient context to
interpret it.</t>
        <t>The relative importance of the two Feedback Types depends on the application:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Live streaming:</strong> The Media Original Publisher commonly provides an ABR
ladder. The L1 Relay primarily consumes <tt>HOP_FEEDBACK</tt> and selects a
representation suitable for the last-mile path.</t>
          </li>
          <li>
            <t><strong>Audio/video conferencing:</strong> The Media Original Publisher might need
feedback from every participant session, particularly when it does not
provide an ABR ladder. <tt>ORIGIN_FEEDBACK</tt> gives the Media Original
Publisher the information needed for source-rate adaptation. In large
conferences, forwarding every participant report can produce a 1:N feedback
implosion. A Relay performing aggregation acts as a new Feedback Publisher
and publishes a distinct Feedback Track. The aggregation format and policy
are outside the scope of this document.</t>
          </li>
        </ul>
        <t>Other applications include live-agent media between a user and an inference
service, cloud rendering, and cloud gaming. These applications can use
<tt>ORIGIN_FEEDBACK</tt> so that the source reacts directly to receiver QoE.</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>Each Feedback Track has exactly one Feedback Type and MUST NOT mix
<tt>HOP_FEEDBACK</tt> and <tt>ORIGIN_FEEDBACK</tt>. The type controls Track distribution and
is carried in the Relay-visible <tt>MMF_FEEDBACK_TYPE</tt> Track Property. A feedback
source that generates both types MUST publish two distinct Feedback Tracks.</t>
        <t>The <tt>MMF_FEEDBACK_TYPE</tt> Track Property has a varint value:</t>
        <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>HOP_FEEDBACK</tt></td>
              <td align="left">Intended for the Adjacent Media Publisher on the current MOQT session</td>
            </tr>
            <tr>
              <td align="left">
                <tt>0x01</tt></td>
              <td align="left">
                <tt>ORIGIN_FEEDBACK</tt></td>
              <td align="left">Intended for the Media Original Publisher across zero or more Relays</td>
            </tr>
          </tbody>
        </table>
        <t>Every Feedback Track MUST include the <tt>MMF_FEEDBACK_TYPE</tt> Track Property (TBD2)
in its PUBLISH Track Properties. This Property is immutable for the lifetime of
the Track. A Relay that recognizes it MUST NOT modify or remove it. A Relay that
does not recognize it forwards and caches it according to the unknown Property
rules in <xref target="MoQTransport"/>. An MMF-aware Relay uses this Property without
inspecting MMF Object Payloads. A terminal feedback consumer that receives an
unsupported value MUST reject the Feedback Track.</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 encoded in the Feedback Full Track Name (Section 5.2) and is not repeated in
MMF reports. This Full Track Name binding is the media Track binding mechanism
defined by this document; no per-Object binding parameter is required.</t>
        <t>When feedback is needed for multiple media Tracks, independent Feedback Tracks
MUST be established separately.</t>
        <t>Each feedback publisher or publication session MUST use a distinct Feedback
Full Track Name. This prevents independent publishers from producing different
Payloads for the same Group ID and Object ID on what MOQT would otherwise treat
as a single Track.</t>
      </section>
      <section anchor="track-naming">
        <name>Track Naming</name>
        <t>The Feedback Full Track Name carries the information that Relays need to
distribute a Feedback Track without inspecting Object Payloads. Let <tt>++</tt> denote
appending fields to a Track Namespace tuple. A Feedback Track MUST use:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Track Namespace:</strong> The media Track Namespace with three fields appended in
this order: the literal <tt>mmf</tt>, the feedback type label, and the feedback
source ID.</t>
          </li>
          <li>
            <t><strong>Track Name:</strong> The Track Name of the associated media Track.</t>
          </li>
        </ul>
        <t>The <tt>feedback-type-label</tt> is the ASCII string <tt>hop-feedback</tt> for <tt>HOP_FEEDBACK</tt>
or <tt>origin-feedback</tt> for <tt>ORIGIN_FEEDBACK</tt>. It enables Namespace prefix
matching. The label MUST agree with the <tt>MMF_FEEDBACK_TYPE</tt> Track Property. A
node that detects a mismatch MUST reject the Feedback Track.</t>
        <t>The <tt>feedback-source-id</tt> is an opaque, non-empty byte string selected by the
Feedback Publisher. It MUST distinguish that publisher and publication session
from every other Feedback Publisher and session for the associated media Track.
It is not required to identify a user and MUST NOT be interpreted as a user
identity. A publisher MUST select a new value before reusing a Group ID and
Object ID pair or restarting its Report Sequence space.</t>
        <t>For example, feedback for media Full Track Name
<tt>(example.com, meeting, audio_response)</tt> can use:</t>
        <t><tt>
(example.com, meeting, mmf, hop-feedback, receiver-17, audio_response)
(example.com, meeting, mmf, origin-feedback, relay-l1-4, audio_response)
</tt></t>
        <t>The same naming construction applies to output and input feedback. The media
Track being reported determines the direction; a separate Track Name prefix is
not used.</t>
        <t>A node receiving a PUBLISH for a Feedback Track reconstructs the associated
media Full Track Name by removing the final three Namespace fields and retaining
the Feedback Track Name. If it cannot identify the associated media Track or
does not support the indicated type, it SHOULD respond with <tt>REQUEST_ERROR</tt>.</t>
      </section>
      <section anchor="track-establishment-and-lifecycle">
        <name>Track Establishment and Lifecycle</name>
        <t>The Feedback Track is established by the feedback generator (a media receiver
or a Relay generating new feedback) as Publisher through MOQT's PUBLISH /
PUBLISH_OK negotiation.</t>
        <t>For a <tt>HOP_FEEDBACK</tt> Track, the terminal feedback consumer is the Adjacent
Media Publisher on that MOQT session. The consumer accepts the PUBLISH and MUST
NOT advertise or forward that Feedback Track on another MOQT session.</t>
        <t>An L1 Relay that generates <tt>ORIGIN_FEEDBACK</tt> is a new Feedback Publisher. It
uses a new Feedback Full Track Name, Report Sequence space, and MMF Payload. It
can derive that Payload from <tt>HOP_FEEDBACK</tt>, local media transmission state, and
application policy.</t>
        <t>An <tt>ORIGIN_FEEDBACK</tt> type does not create a route by itself. Before feedback
Objects can be delivered, an interest and authorization chain MUST be
established between the Media Original Publisher and the Feedback Publisher:</t>
        <ol spacing="normal" type="1"><li>
            <t>The Media Original Publisher, acting as a Feedback Subscriber, expresses
interest in the <tt>origin-feedback</tt> Namespace for the media Track. It can use
SUBSCRIBE_NAMESPACE for the corresponding Namespace prefix, or use
deployment-specific prior interest and authorization as permitted by
<xref target="MoQTransport"/>.</t>
          </li>
          <li>
            <t>Each intermediate Relay binds the Feedback Track to the media forwarding
state identified by Section 5.2. It propagates feedback interest only to
downstream peers to which it forwards the associated media Track. Feedback
Objects travel in the opposite direction, toward the peer from which the
Relay received that media Track.</t>
          </li>
          <li>
            <t>The Feedback Publisher sends PUBLISH for its unique Feedback Full Track Name.
Each hop uses the PUBLISH / PUBLISH_OK and SUBSCRIBE / SUBSCRIBE_OK procedures
in <xref target="MoQTransport"/> to establish forwarding with Forward State 1.</t>
          </li>
        </ol>
        <t>PUBLISH_NAMESPACE is not a route discovery mechanism. A Relay MUST NOT use it to
search a richly connected Relay topology for a path to the Media Original
Publisher. A Relay forwards <tt>ORIGIN_FEEDBACK</tt> only toward the peer from which it
received the associated media Track, and MUST NOT forward it back toward the
feedback publisher or another downstream media peer. If there is no unique
reverse media-path binding, the Relay MUST reject the Feedback Track. These
rules prevent a feedback loop in the single-upstream media topology defined by
this document.</t>
        <t>If any hop has no matching interest, lacks authorization, has no media-path
binding, or rejects the request, that hop MUST reject establishment using the
applicable MOQT request error. The Feedback Publisher MUST NOT send MMF Objects
until its PUBLISH is accepted. It MAY continue or fall back to a separately
established <tt>HOP_FEEDBACK</tt> Track, but it MUST NOT relabel a rejected Track to
bypass the failure.</t>
        <t>Relays route both Feedback Track types solely from the Full Track Name and
<tt>MMF_FEEDBACK_TYPE</tt> Track Property. In accordance with <xref target="MoQTransport"/>, the
Object Payload is opaque to a Relay and is not processed to make a forwarding
decision. An <tt>ORIGIN_FEEDBACK</tt> MMF Payload can therefore be protected between
the Feedback Publisher and the Media Original Publisher. A <tt>HOP_FEEDBACK</tt> MMF
Payload can be protected for its adjacent terminal feedback consumer.</t>
        <t><strong>Direct Establishment Flow Example:</strong></t>
        <t><tt>
Media Receiver                    Media Original Publisher
(Media Subscriber /               (Media Publisher /
 Feedback Publisher)               Feedback Subscriber)
  |                                    |
  | SUBSCRIBE(track=audio_response)    |  (1) Subscribe media Track
  |-----------------------------------&gt;|
  | SUBSCRIBE_OK                       |
  |&lt;-----------------------------------|
  |                                    |
  | PUBLISH(                           |  (2) Publish origin-feedback Track
  |   namespace=media_namespace ++     |
  |     ("mmf", "origin-feedback",     |
  |      "receiver-17"),               |
  |   track=audio_response,            |
  |   property=MMF_FEEDBACK_TYPE(1))   |
  |-----------------------------------&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 a MOQT session carrying a Feedback Track is disconnected, a Relay MUST
discard the associated forwarding state and MUST NOT re-advertise the old
Feedback Track after reconnecting. The Feedback Publisher establishes a new
Feedback Track with a new <tt>feedback-source-id</tt>; its Report Sequence SHOULD
restart from 0.</t>
        <t>Feedback is time-sensitive. A Feedback Publisher SHOULD use the
<tt>MAX_CACHE_DURATION</tt> Track Property defined by <xref target="MoQTransport"/> to bound the
period for which MMF Objects can be served from cache. A terminal feedback
consumer MUST NOT apply an MMF from a previous publication session.</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">Feedback Track</td>
              <td align="left">3</td>
              <td align="left">MMF feedback</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 7.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 5.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 independently for
each Feedback Track. A gap can indicate an omitted report only when the
publication policy for that Track requires a contiguous Report Sequence. An
Object ID gap alone, without a Prior Object ID Gap property as defined by
<xref target="MoQTransport"/>, MUST NOT be interpreted as feedback loss. Because
<tt>HOP_FEEDBACK</tt> and <tt>ORIGIN_FEEDBACK</tt> use separate Tracks, terminating one type
cannot create sequence gaps in the other type's sequence space.</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 {
  Group ID (i),
  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
<tt>(Group ID, Object ID)</tt>.</t>
        <section anchor="group-id">
          <name>Group ID</name>
          <t>The Group ID (varint) of the Object in the associated media Track.</t>
        </section>
        <section anchor="object-id">
          <name>Object ID</name>
          <t>The Object ID (varint) within the identified Group of the associated media
Track.</t>
          <t>The media Full Track Name from Section 5.2, Group ID, and Object ID together
identify the media Object being reported. A Relay forwarding the same media
Track preserves these coordinates. A Relay that changes the Full Track Name or
media Object coordinates is publishing a different media Track and MUST NOT
associate its Feedback Track with the pre-transformation media Track.</t>
        </section>
        <section anchor="status">
          <name>Status</name>
          <t>Delivery status code (varint), see Section 6.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 <tt>(Group ID, Object ID)</tt> 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 a larger Object ID in the same Group 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 6.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 8.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 6.2.3, referencing QUIC receive-ts / WebRTC TWCC per-packet delta
encoding approach) and <tt>Summary Stats</tt> (Section 6.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 7). 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 media Object locations).</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 <tt>(Group ID, Object ID)</tt>. Signed fields use
ZigZag-encoded unsigned values (encoding convention at the beginning of
Section 6). The Feedback Track carries the <tt>MMF_FEEDBACK_TYPE</tt> Track Property
with value <tt>ORIGIN_FEEDBACK</tt>.</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 media Object location, first in list)
    Group ID: 7
    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]:
    Group ID: 7
    Object ID: 97
    Status: 0x02 (NOT_RECEIVED)
    (No Recv Ts Delta)</t>
          <t>Object Entry [2]:
    Group ID: 7
    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]:
    Group ID: 7
    Object ID: 99
    Status: 0x00 (RECEIVED)
    Recv Ts Delta: 40000 (ZigZag(+20000): 20ms later than Object 98)</t>
          <t>Object Entry [4]:
    Group ID: 7
    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, the Track Property identifies an <tt>ORIGIN_FEEDBACK</tt> Track.
Intermediate Relays forward the Track toward the Media Original Publisher
without inspecting its MMF Payload. Object 97 in Group 7 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 6.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>
        <t>The Setup Parameter is required for an endpoint that generates or consumes MMF.
An intermediate Relay that only forwards an <tt>ORIGIN_FEEDBACK</tt> Track does not
need to parse MMF or negotiate an additional Feedback Type capability. It
forwards the <tt>MMF_FEEDBACK_TYPE</tt> Track Property according to the unknown Property
rules in <xref target="MoQTransport"/>.</t>
      </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 6.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 identify duplicates by Group ID and
Object ID, ignore duplicate arrivals, and retain 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 media Object coordinates (Full
Track Name, Group ID, and Object ID) 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 9.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 10 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 10.1 presents a general adaptation framework, and Section 10.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 (6.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 (6.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 (6.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 (6.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 (6.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 (6.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 9.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 7.1)</t>
        </li>
        <li>
          <t><strong>TBD2:</strong> MMF_FEEDBACK_TYPE Track Property (Section 5.1)</t>
        </li>
        <li>
          <t><strong>Feedback Type Registry</strong> (Section 5.1):
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>0x00</tt>: HOP_FEEDBACK</t>
            </li>
            <li>
              <t><tt>0x01</tt>: ORIGIN_FEEDBACK</t>
            </li>
          </ul>
        </li>
        <li>
          <t><strong>Delivery Status Code Registry</strong> (Section 6.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 6.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 authors would like to thank Cullen Jennings for his valuable review
comments, proposed revisions, and insightful suggestions on application
scenarios for this document.</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:
H4sIAAAAAAAAA8196XLj2JXmfzwFphwzRbpISlRm1qJ0Oqwtq7KdiywpXe12
eCSIhCRUkgRNgKlSW/bPeYD50w/UbzJPMuc7y10AUFJ1T0dMRthFkcBdzz3r
d84dDofJtJwssnm+m05X2VU9nBXr4bz86/Aqz6eX2eTTcHs7qYt6Rg+8K/+Q
vtavk2yVZ7vpF3vL5ayYZHVRLqo0W0zTkzybDc+Kef5FcluuPl2vyvWSnnuX
T4ss/fA5X6V/+Pjm4IvkU35Hv0930zeLOl8t8np4iP6TZFnspn+uy8kgrcpV
vcqvKvp0N8eHvySTclosrnfTdTXMqklRJNR1fl2u7nbTqp4mFT2fzanNo7PX
SbFc7ab1al3VO9vb323v0K80wPNsVi5y/iFPkmxd35Sr3SRNh/S/NC0W1W76
p1H6tljz37Iyf8oW87xwX5ar62xR/CtPejfdmxWX2WVG85iM+Od8nhWz3XRe
ZOVPxWh2N/9dJo8MC3pkUs6TuLt3o/SfimxxHXT4jiZ5sy6C75/WZ3VDC1+M
fprfPNLnySj9MZzhSYkOM/uy0duiTr/HPkZ9rUa3699li5p3WLpYlKs5vfM5
x4Jim4dnJ3vvT48/nJzR81eT77aJmFLQ0dkqW1RL2l/aq+HhSEivyOsrpr3a
fh2Ov6Hn/7ouJsNVPsmp5WFdtV5p/D7cHidJUiyu/GiS4XCYZpdEHtmESOzs
pqhSovv1PKepTfOrYpGDetP85zpfVDTptC5TIdnSSDZ1Y0577z784ayf1jdZ
neSL7HJGb+Nw6BhWFV5f5fzsNJ/hqzuaBW1JfZe6gVEv9Cmdy8m4/Cmf1FVC
L1b5YkptjNKzm5ybnWV3NIbqblHf5FXxr+js3evUDiifulk5yWbphHYxr7hl
+livylnSOzjop+W6Xq5rDIq2iT7l9jONblJUfHar9eQmzar0sqBFqvNBerUi
ykjlM3WRLLMJUSV/1jnQAuTpwUGazegEFvXNPJ2X0/UsTz/ThLJ0siqraiiD
t+EUOOxX2STH7GgT5vnkhiitmtNyrSuaGZrE6mK1J5+2ZFnSaVZnaDyfpbfU
Ec0HLa2oN4wpXeS3bkbzvKqy6zyt75Y5reGPNwUNiPdv7+D3PHjs0pIXqabT
QkxhvkzcxlfcULFY51iu5ar8XEzzdJmvhjT/T3mN+VbF9SKbVS9psNEUsum0
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
KPm/mjakDR33AAA=

-->

</rfc>
