<?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.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-moq-loc-05" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="media-container">Low Overhead Media Container</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-loc-05"/>
    <author fullname="Mo Zanaty">
      <organization>Cisco</organization>
      <address>
        <email>mzanaty@cisco.com</email>
      </address>
    </author>
    <author fullname="Suhas Nandakumar">
      <organization>Cisco</organization>
      <address>
        <email>snandaku@cisco.com</email>
      </address>
    </author>
    <author fullname="Peter Thatcher">
      <organization>Microsoft</organization>
      <address>
        <email>pthatcher@microsoft.com</email>
      </address>
    </author>
    <date/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>LOC</keyword>
    <keyword>MOQ</keyword>
    <keyword>MOQT</keyword>
    <keyword>QUIC</keyword>
    <keyword>media</keyword>
    <abstract>
      <?line 55?>

<t>This specification describes a Low Overhead Media Container (LOC) format for
encoded and encrypted audio and video media data to be used
primarily for interactive Media over QUIC Transport (MOQT).
It may be used in the MOQT Streaming Format (MSF) specification,
which defines a catalog format
for publishers to declare and describe their LOC tracks and for
subscribers to consume them. Examples are also provided
for building media applications using LOC and MOQT.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://moq-wg.github.io/loc/draft-ietf-moq-loc.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-moq-loc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Media Over QUIC Working Group mailing list (<eref target="mailto:moq@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/moq/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/moq/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/moq-wg/loc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 67?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>This specification describes a low-overhead media container (LOC) format for
encoded and encrypted audio and video media data.</t>
      <t>"Low-overhead" refers to minimal extra encapsulation as well as minimal application overhead when interfacing with WebCodecs <xref target="WebCodecs"/>.</t>
      <t>The container format description is specified for all audio and video codecs defined in the
WebCodecs Codec Registry <xref target="WEBCODECS-CODEC-REGISTRY"/>.
The audio and video payload bitstream is identical to the "internal data"
inside an EncodedAudioChunk and EncodedVideoChunk, respectively, specified in the registry.</t>
      <t>(Note: Do we need to support timed text tracks such as Web Video Text Tracks (WebVTT) ?)</t>
      <t>In addition to the media payloads, critical metadata called properties are also specified for audio and video payloads.</t>
      <t>A primary motivation is to align with media formats used in WebCodecs to minimize
extra encapsulation and application overhead when interfacing with WebCodecs.
Other container formats like CMAF or RTP would require
more extensive application overhead in format conversions, as well as larger encapsultion overhead
which may burden some use cases like low bitrate audio scenarios.</t>
      <t>This specification can also be used by applications outside the context of WebCodecs or a web browser.
While the media payloads are defined by referring to the "internal data" of an
EncodedAudioChunk or EncodedVideoChunk in the WebCodecs Codec Registry, this "internal data"
is the elementary bitstream format of codecs without any encapsulation. Referring to the WebCodecs
Codec Registry avoids duplicating it in an identical IANA registry.</t>
      <ul spacing="normal">
        <li>
          <t><xref target="payload"/> defines the core media payload formats.</t>
        </li>
        <li>
          <t><xref target="headers"/> defines the metadata, called properties, associated with audio and video payloads.</t>
        </li>
        <li>
          <t><xref target="encryption"/> defines the usage of end-to-end encrypted LOC payloads.</t>
        </li>
        <li>
          <t><xref target="examples"/> provides examples with details for building audio and video applications
using LOC over MOQ.</t>
        </li>
      </ul>
      <section anchor="requirements-notation-and-conventions">
        <name>Requirements Notation and Conventions</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="terminology">
        <name>Terminology</name>
        <t>Track, Group, Subgroup, Object, and their corresponding identifiers (ID or alias)
are defined in <xref target="MoQTransport"/> and used here to refer to those aspects of the
MOQT Object Model.</t>
      </section>
    </section>
    <section anchor="payload">
      <name>Payload Format</name>
      <t>The WebCodecs Codec Registry defines the contents of an EncodedAudioChunk and
EncodedVideoChunk for the audio and video codec formats in the registry. The
"internal data" in these chunks is used directly in this specification as
the "LOC Payload" bitstream. This "internal data" is the elementary bitstream format
of each codec without any encapsulation.</t>
      <section anchor="video">
        <name>Video Payload Format</name>
        <t>For video formats with multiple bitstream formats in the WebCodecs Registry, such as H.264/AVC or H.265/HEVC, the LOC Payload can use either the "canonical" format ("avc" or "hevc") often used in storage containers like MP4 / ISO BMFF, or the "annexB" format used in some non-MP4 applications. These formats differ in how they carry initialization and configuration information called parameter sets as well as how parts of a video frame are delimited with length prefixes or start codes.</t>
        <section anchor="parameter-sets-in-payload">
          <name>Parameter Sets In Payload</name>
          <t>Parameter sets can be sent in the bitstream payload before key frames, similar to "annexB" formats. Newer "canonical" formats such as "avc3" and "hev1" codec strings also support parameter sets in the bitstream payload or outside it in "extradata" metadata headers.</t>
        </section>
        <section anchor="parameter-sets-in-headers">
          <name>Parameter Sets in Headers</name>
          <t>Parameter sets can be sent in headers before key frames, as described in the Video Config LOC Property <xref target="vconfig"/>, similar to the original "canonical" formats such as "avc1" and "hvc1" codec strings. The Video Config contents are the "extradata" bytes defined by the corresponding codec specification, which map to the WebCodecs VideoDecoderConfig description property in the EncodedVideoChunkMetadata.</t>
        </section>
        <section anchor="length-prefixes-in-payload">
          <name>Length Prefixes in Payload</name>
          <t>A 4-byte length prefix can be sent before each NAL Unit, similar to "canonical" ("avc" or "hevc") formats. A length value of 1 <bcp14>SHOULD</bcp14> be interpreted as a start code rather than a length. The length is in network byte order, i.e. big endian, and <bcp14>SHOULD</bcp14> be 4 bytes long to disambiguate from start code prefixes. A length prefix less than 4 bytes long, which is uncommon, <bcp14>MAY</bcp14> be specified in the Video Config <xref target="vconfig"/>.</t>
        </section>
        <section anchor="start-code-prefixes-in-payload">
          <name>Start Code Prefixes in Payload</name>
          <t>A 4-byte start code can be sent before each NAL Unit, similar to "annexB" formats. The start code value is 1 in network byte order, i.e. big endian, and <bcp14>SHOULD</bcp14> be 4 bytes long to disambiguate from length prefixes. A 3-byte start code, which is uncommon, <bcp14>MAY</bcp14> be used if the track never uses length prefixes or any Video Config <xref target="vconfig"/>.</t>
        </section>
      </section>
      <section anchor="moq-object-mapping">
        <name>MOQ Object Mapping</name>
        <t>An application object when transported as a <xref target="MoQTransport"/> object is composed of
a MOQ Object Header, with optional Properties, and a Payload.
Media objects encoded using the container format defined in this
specification populate the MOQ Object Properties with the LOC Public Properties,
and populate the MOQ Object Payload with LOC Private Properties
followed by the LOC Payload, as shown below.</t>
        <t>The LOC Payload is the "internal data" of an EncodedAudioChunk or EncodedVideoChunk.</t>
        <t>The LOC Public and Private Properties carry optional metadata related to the Payload,
where Public Properties are visible to relays while Private Properties can be encypted
end to end with the Payload.</t>
        <artwork type="ascii-art"><![CDATA[
<-----------  MOQ Object  ------------>
+----------+--------------+-----------+
|   MOQ    |  MOQ Header  |    MOQ    |
|  Header  |  Properties  |  Payload  |
+----------+--------------+-----------+
                  |             |
                  |             |
           +--------------+---------------------------+
           |  LOC Public  |  LOC Private  |    LOC    |
           |  Properties  |  Properties   |  Payload  |
           +--------------+---------------+-----------+

LOC Public Properties                = some MOQ Object Properties
LOC Private Properties + LOC Payload = all  MOQ Object Payload
LOC Payload = "internal data" of EncodedAudio/VideoChunk

]]></artwork>
      </section>
      <section anchor="headers">
        <name>LOC Properties</name>
        <t>The LOC Public and Private Properties carry optional metadata for the corresponding LOC Payload.
The LOC Public Properties are contained within the MOQ Object Properties.
This metadata provides necessary information for
end subscribers, relays and other intermediaries
to perform their operations without accessing the media payload. For example,
media switches can use this metadata to perform their media switching decisions
without accessing the payload which may be encrypted end-to-end
(from original publisher to end subscribers).
The LOC Private Properties are contained within the MOQ Object Payload,
and are not intended to be processed by relays.</t>
        <t>The following sections define specific metadata as LOC Public and Private Properties and
register them in the IANA registry for MOQ Properties.</t>
        <t>Other specifications can define other metadata as LOC Public and Private Properties and
register them in the same registry. Each property must specify the following
information in the IANA registry.</t>
        <ul spacing="normal">
          <li>
            <t>Name: Short name for the metadata (not sent on the wire)</t>
          </li>
          <li>
            <t>Description: Detailed description (not sent on the wire)</t>
          </li>
          <li>
            <t>ID: Identifier assigned by the registry (vi64)</t>
          </li>
          <li>
            <t>Length: Length of metadata Value in bytes (vi64 if ID is odd, omitted if ID is even)</t>
          </li>
          <li>
            <t>Value: Value of metadata (vi64 if ID is even, Length bytes if ID is odd)</t>
          </li>
        </ul>
        <section anchor="common-properties">
          <name>Common Properties</name>
          <section anchor="timestamp">
            <name>Timestamp</name>
            <ul spacing="normal">
              <li>
                <t>Name: Timestamp</t>
              </li>
              <li>
                <t>Description: Timestamp of the encoded media frame encoded as vi64.
The unit of the timestamp is determined by the Timescale property
<xref target="timescale"/>. If no timescale property is present,
the timestamp is interpreted as wall-clock time in microseconds since
the Unix epoch.</t>
              </li>
              <li>
                <t>ID: 0x10</t>
              </li>
              <li>
                <t>Length: Omitted (ID is even)</t>
              </li>
              <li>
                <t>Value: vi64 (1-9 bytes)</t>
              </li>
            </ul>
          </section>
          <section anchor="timescale">
            <name>Timescale</name>
            <ul spacing="normal">
              <li>
                <t>Name: Timescale</t>
              </li>
              <li>
                <t>Description: The number of Timestamp units per second, encoded as vi64.
This property defines the unit for interpreting timestamp values in the
Timestamp property. Common values include 1000000 for microseconds,
48000 for audio at 48kHz sample rate, 90000 for video at 90kHz clock rate.
When this property is present, the Timestamp represents media time rather than
wall-clock time. The epoch or anchor point for the timestamp is
application-defined. If this property is not present, timestamps default
to microseconds since Unix epoch.</t>
              </li>
              <li>
                <t>ID: 0x08</t>
              </li>
              <li>
                <t>Length: Omitted (ID is even)</t>
              </li>
              <li>
                <t>Value: vi64 (1-9 bytes)</t>
              </li>
            </ul>
          </section>
          <section anchor="codec-string">
            <name>Codec String</name>
            <ul spacing="normal">
              <li>
                <t>Name: Codec String</t>
              </li>
              <li>
                <t>Description: Codec string in UTF-8 as defined by the WebCodecs Codec Registry
which maps to the codec property (in UTF-16) in the WebCodecs AudioDecoderConfig
or VideoDecoderConfig.</t>
              </li>
              <li>
                <t>ID: 0x11</t>
              </li>
              <li>
                <t>Length: Varies</t>
              </li>
              <li>
                <t>Value: Varies</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="video-properties">
          <name>Video Properties</name>
          <section anchor="vconfig">
            <name>Video Config</name>
            <ul spacing="normal">
              <li>
                <t>Name: Video Config</t>
              </li>
              <li>
                <t>Description: Video codec configuration "extradata", as defined by the
corresponding codec specification, which maps to the WebCodecs VideoDecoderConfig
description property in the EncodedVideoChunkMetadata.</t>
              </li>
              <li>
                <t>ID: 0x0D</t>
              </li>
              <li>
                <t>Length: Varies</t>
              </li>
              <li>
                <t>Value: Varies</t>
              </li>
            </ul>
          </section>
          <section anchor="video-frame-marking">
            <name>Video Frame Marking</name>
            <ul spacing="normal">
              <li>
                <t>Name: Video Frame Marking</t>
              </li>
              <li>
                <t>Description: Flags for video frames which are independent, discardable, or
base layer sync points, as well as temporal and spatial layer
identification, as defined in <xref target="RFC9626"/>, encoded with a length prefix.</t>
              </li>
              <li>
                <t>ID: 0x09</t>
              </li>
              <li>
                <t>Length: Varies (1-4 bytes)</t>
              </li>
              <li>
                <t>Value: Varies</t>
              </li>
            </ul>
          </section>
        </section>
        <section anchor="audio-properties">
          <name>Audio Properties</name>
          <section anchor="aconfig">
            <name>Audio Config</name>
            <ul spacing="normal">
              <li>
                <t>Name: Audio Config</t>
              </li>
              <li>
                <t>Description: Audio codec configuration, as defined by the
corresponding codec specification, which maps to the WebCodecs AudioDecoderConfig
description property in the EncodedAudioChunkMetadata.</t>
              </li>
              <li>
                <t>ID: 0x0F</t>
              </li>
              <li>
                <t>Length: Varies</t>
              </li>
              <li>
                <t>Value: Varies</t>
              </li>
            </ul>
          </section>
          <section anchor="audio-level">
            <name>Audio Level</name>
            <ul spacing="normal">
              <li>
                <t>Name: Audio Level</t>
              </li>
              <li>
                <t>Description: The magnitude of the audio level of the corresponding audio frame
as well as a voice activity indicator as defined in section 3 of <xref target="RFC6464"/>,
encoded in the least significant 8 bits of a vi64.</t>
              </li>
              <li>
                <t>ID: 0x0C</t>
              </li>
              <li>
                <t>Length: Omitted (ID is even)</t>
              </li>
              <li>
                <t>Value: vi64 (1-2 bytes to encode values 0x00-0xFF)</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
    </section>
    <section anchor="encryption">
      <name>Payload Encryption</name>
      <t>When end to end encryption is supported, the encoded payload is encrypted
with symmetric keys derived from key establishment mechanisms, such as <xref target="MOQ-MLS"/>,
and the payload itself is protected using mechanisms defined in <xref target="SecureObjects"/>.</t>
      <section anchor="secure-objects-integration">
        <name>Secure Objects Integration</name>
        <t><xref target="SecureObjects"/> defines a comprehensive framework for end-to-end encryption of
MOQT objects. When using Secure Objects with LOC, the following considerations apply:</t>
        <section anchor="key-identification">
          <name>Key Identification</name>
          <t>The Secure Object Key ID property (type 0x2 in <xref target="SecureObjects"/>) <bcp14>MUST</bcp14> be included
as an immutable property to identify the keying material used for encryption.
This property is authenticated but not encrypted, allowing relays to forward
objects without decryption while ensuring subscribers can identify the correct
decryption key.</t>
        </section>
        <section anchor="immutable-properties">
          <name>Immutable Properties</name>
          <t>LOC Properties that should be immutable but visible to relays <bcp14>SHOULD</bcp14> be encoded
as Immutable Properties as defined in <xref target="MoQTransport"/> to ensure they cannot be
modified by relays and are included in the authenticated associated data (AAD)
during encryption. This specification does not define any Immutable Properties,
but other specifications may define some for use with LOC.</t>
        </section>
        <section anchor="private-properties">
          <name>Private Properties for Sensitive Metadata</name>
          <t>Some LOC metadata may be sensitive and should not be visible to relays.
<xref target="SecureObjects"/> defines a Private properties mechanism (type 0xA) that allows
metadata to be encrypted alongside the payload.</t>
          <t>The following LOC properties <bcp14>MAY</bcp14> be carried as Private properties when end-to-end
confidentiality is required:</t>
          <ul spacing="normal">
            <li>
              <t>Timestamp and Timescale - reveals timing information about the source</t>
            </li>
            <li>
              <t>Audio Level - reveals voice activity and audio characteristics</t>
            </li>
            <li>
              <t>Video Frame Marking - reveals encoding structure details</t>
            </li>
            <li>
              <t>Video Config - reveals encoding configuration details</t>
            </li>
          </ul>
          <t>When using Private properties:</t>
          <ol spacing="normal" type="1"><li>
              <t>The LOC property is encoded as a key-value pair within the Private
properties payload</t>
            </li>
            <li>
              <t>The Private properties are concatenated with the media payload before
encryption</t>
            </li>
            <li>
              <t>Upon decryption, the receiver extracts the Private properties and
reconstructs the LOC metadata</t>
            </li>
          </ol>
          <t>This approach allows sensitive metadata to remain confidential from relays
while still being available to authorized end subscribers.</t>
        </section>
        <section anchor="cipher-suite-requirements">
          <name>Cipher Suite Requirements</name>
          <t>Implementations using LOC with Secure Objects <bcp14>MUST</bcp14> support the
AES_128_GCM_SHA256_128 cipher suite (0x0004). Other cipher suites defined
in <xref target="SecureObjects"/> <bcp14>MAY</bcp14> be used based on application requirements for
authentication tag size versus bandwidth overhead.</t>
        </section>
        <section anchor="aad-construction">
          <name>AAD Construction</name>
          <t>The authenticated associated data (AAD) for AEAD encryption includes:</t>
          <ul spacing="normal">
            <li>
              <t>Key ID</t>
            </li>
            <li>
              <t>Group ID and Object ID</t>
            </li>
            <li>
              <t>Track namespace and name</t>
            </li>
            <li>
              <t>Serialized immutable properties</t>
            </li>
          </ul>
          <t>This binding ensures objects cannot be replayed across different tracks
or contexts.</t>
        </section>
      </section>
    </section>
    <section anchor="examples">
      <name>Examples</name>
      <t>This section provides examples with details for building audio and video applications
using MOQ and LOC; more specifically, it provides information on:</t>
      <ul spacing="normal">
        <li>
          <t>Using a MSF catalog <xref target="MoQCatalog"/> to describe track information,</t>
        </li>
        <li>
          <t>Packaging media into LOC streaming format, and</t>
        </li>
        <li>
          <t>Mapping application media objects to the MOQT object model and transport.</t>
        </li>
      </ul>
      <t>The figure below shows the conceptual model for mapping media application data
to the MOQT object model and underlying QUIC transport.</t>
      <artwork type="ascii-art"><![CDATA[
+------------------------------+
|     Media Application        |
|    Audio, Video Frames       |
+---------------+--------------+
                |
                |
+---------------v--------------------+
|        MOQT Object Model           |
| Tracks, Groups, Subgroups, Objects |
+---------------+--------------------+
                |
                |
+---------------v--------------+
|             QUIC             |
|        Streams, Datagrams    |
+------------------------------+

]]></artwork>
      <section anchor="app-audio">
        <name>Application with one audio track</name>
        <t>An example is shown below for an Opus mono channel audio track at 48Khz.</t>
        <sourcecode type="psuedocode"><![CDATA[
codec: "opus"
bitrate: 24000
samplerate: 480000
channelConfig: "mono"
lang: "en"
]]></sourcecode>
        <t>When ready for publishing, each encoded audio chunk, say 10ms, represents a
MOQT Object. In this setup, there is one <tt>MOQT Object</tt>
per <tt>MOQT Group</tt>, where the <tt>GroupID</tt> in the object header is
increment by one for each encoded audio chunk and the <tt>ObjectID</tt>
is defaulted to value 0.</t>
        <t>These objects can be sent as QUIC streams or datagrams. When mapped to
QUIC datagrams, each object must fit entirely within a QUIC datagram, and
when mapped to QUIC Streams, each such unitary group is sent over
an individual unidirectional QUIC stream since there is just one <tt>SubGroup</tt> per
each <tt>MOQT Group</tt>.</t>
      </section>
      <section anchor="app-1-video">
        <name>Application with one single quality video track</name>
        <t>An example is shown below for an H.264 video track with 1280x720p resolution
and 30 fps frame rate at 1 Mbps bitrate.</t>
        <sourcecode type="psuedocode"><![CDATA[
codec: "avc3.42E01E"
bitrate: 1000000
framerate: 30
width: 1280
height: 720
]]></sourcecode>
        <t>When ready for publishing, each encoded video chunk is considered as input
to MOQT Object payload. If encrypted, the output of encryption will serve as
the object's payload. The <tt>GroupID</tt> is incremented by 1 at IDR Frame boundaries.
The <tt>ObjectID</tt> is increment by 1 for each encoded video frame, starting at 0
and resetting to 0 at the start of a new group. The first encoded video frame,
MOQT Object with <tt>ObjectID</tt> 0, shall be the Independent (IDR) frame and
the rest of the encoded video frames corresponds to dependent (delta) frames,
organized in the decode order.</t>
        <t>When mapping to QUIC for sending, one unidirectional QUIC stream is setup to
deliver all the encoded video chunks within a MOQT group.</t>
        <t>When decoding at the 'End Consumer', the objects from each of the QUIC
streams are fed in the GroupID then ObjectID order to the decoder for
the track.</t>
      </section>
      <section anchor="app-2-temp-video">
        <name>Application with single video track with temporal layers</name>
        <t>An example is shown below for an H.264 video track with 1280x720p resolution and
2 temporal layers at 30 fps and 60 fps frame rate.</t>
        <sourcecode type="psuedocode"><![CDATA[
codec: "avc3.42E01F"
bitrate: 1500000
framerate: 60
width: 1280
height: 720
]]></sourcecode>
        <t>When ready for publishing, each encoded video chunk is considered as input
to MOQT Object payload. If encrypted, the output of encryption will serve as
the object's payload. The <tt>GroupID</tt> is incremented by 1 at Independent (IDR)
frame  boundaries. Each MOQT group shall contain 2 SubGroups corresponding
to the 2 temporal layers as shown below:</t>
        <sourcecode type="psuedocode"><![CDATA[
Layer:0/30fps Subgroup: 0 ObjectID: even
Layer:1/60fps Subgroup: 1 ObjectID: odd
]]></sourcecode>
        <t>Within the MOQT group, <tt>ObjectID</tt> is increment by 1 for each encoded video
frame, starting at 0 and resetting to 0 at the start of a new group. The
first encoded video frame, MOQT Object with <tt>ObjectID</tt> 0, shall be the
Indepedent (IDR) frame and the rest of the encoded video frames corresponds to
dependent (delta) frames, organized in the decode order. When mapping to
QUIC for sending, one unidirectional QUIC stream is used per SubGroup,
thus resulting in 2 QUIC streams per MOQT group.</t>
        <t>When decoding at the 'End Consumer' for a given MOQT group, the objects
must be fed in the GroupID then ObjectID order. This implies that the consumer
media application needs to order objects across the SubGroup QUIC
streams.</t>
      </section>
      <section anchor="application-with-mutiple-dependent-video-tracks">
        <name>Application with mutiple dependent video tracks</name>
        <t>An example is shown below for an H.264 video track with 2 spatial qualities
at 360p and 720p each at 30 fps</t>
        <sourcecode type="psuedocode"><![CDATA[
Video Track 1
codec: "avc3.42E01E"
bitrate: 500000
framerate: 30
width: 640
height: 360

Video Track 2
codec: "svc1.56401F"
bitrate: 1000000
framerate: 30
width: 1280
height: 720

]]></sourcecode>
        <t>When ready for publishing, the mapping to the MOQT object model and
to underlying QUIC, follows the same procedures as described in
<xref target="app-1-video"/> for each video track.</t>
        <t>When decoding at the 'End Consumer' for a given MOQT group, the objects
must be fed in the GroupID then ObjectID order in the ascending quality
track order.</t>
        <t>For the example in the section, this would imply following
pattern when decoding group 5.</t>
        <sourcecode type="pseudocode"><![CDATA[
Track 1 Group 5 Object 0
Track 2 Group 5 Object 0
Track 1 Group 5 Object 1
Track 2 Group 5 Object 1
....
]]></sourcecode>
      </section>
      <section anchor="application-with-mutiple-dependent-video-tracks-with-dyadic-framerate-levels">
        <name>Application with mutiple dependent video tracks with dyadic framerate levels.</name>
        <t>An example is shown below for an H.264 video track with 2 spatial qualities
at 360p and 720p, however, the framerate between tracks vary dyadically.</t>
        <sourcecode type="pseudocode"><![CDATA[
Video Track 1
codec: "avc3.42E01E"
bitrate: 500000
framerate: 30
width: 640
height: 360

Video Track 2
codec: "svc1.56E01F"
bitrate: 1000000
framerate: 60
width: 1280
height: 720

]]></sourcecode>
        <t>When ready for publishing, the mapping to the MOQT object model and
to underlying QUIC, follows the same procedures as described in
<xref target="app-1-video"/> for each video track.</t>
        <t>When decoding at the 'End Consumer' for a given MOQT group, the objects
from across the tracks must be fed in the timestamp order to the decoder,
if no frame reordering is present in the encoding.</t>
        <t>If the encoding uses frame reordering, or if timestamp cannot be obtained, the
object to choose next shall follow the below formula.</t>
        <sourcecode type="pseudocode"><![CDATA[
Object Decode Order = ObjectID * multiplier + offset

multiplier = 2^(maxlayer-max(0,layer-1))
offset = 2^(maxlayer-layer) MOD multiplier

]]></sourcecode>
      </section>
      <section anchor="app-2-video">
        <name>Application with multiple simulcast qualities video tracks</name>
        <t>An example is shown below for an H.264 video track with 2 simulcast
spatial qualities at 360p and 720p each at 30 fps.</t>
        <sourcecode type="psuedocode"><![CDATA[
Video Track 1
codec: "avc3.42E01E"
bitrate: 500000
framerate: 30
width: 640
height: 360

Video Track 2
codec: "avc3.42E01F"
bitrate: 1000000
framerate: 30
width: 1280
height: 720

]]></sourcecode>
        <t>When ready for publishing, the mapping to the MOQT object model and
to underlying QUIC, follows the same procedures as described in
<xref target="app-1-video"/> for each video track.</t>
        <t>When decoding at the 'End Consumer', the objects from the QUIC stream
are fed in the GroupID then ObjectID order to the decoders setup for the
corresponding video tracks.</t>
      </section>
    </section>
    <section anchor="security-and-privacy-considerations">
      <name>Security and Privacy Considerations</name>
      <t>The metadata in LOC Properties is visible to relays, since the
MOQ Object Properties are often not encrypted end-to-end
(from original publisher to end subscribers) in common schemes.
In some cases, this may be an intentional design intent for proper relay
operation. In other cases, this may be unintentional or undesirable leaking
of the metadata to relays. Each metadata that is defined should consider
the security and privacy aspects of granting relays visibility to the metadata.</t>
      <section anchor="protecting-sensitive-metadata">
        <name>Protecting Sensitive Metadata</name>
        <t>The metadata defined and registered in this specification
(Timestamp, Timescale, Config, Video Frame Marking, and Audio Level) may be sensitive
metadata that should be encrypted end-to-end. Applications requiring
confidentiality of this metadata <bcp14>SHOULD</bcp14> use the Private properties mechanism
described in <xref target="private-properties"/> to encrypt sensitive metadata alongside
the payload.</t>
        <t>When using <xref target="SecureObjects"/> for end-to-end encryption:</t>
        <ul spacing="normal">
          <li>
            <t>Sensitive metadata (timestamps, audio levels, frame marking) can be
encrypted using Private properties</t>
          </li>
          <li>
            <t>Immutable properties are authenticated but visible to relays</t>
          </li>
          <li>
            <t>Media switches that need metadata access require appropriate key material</t>
          </li>
        </ul>
      </section>
      <section anchor="immutable-property-considerations">
        <name>Immutable Property Considerations</name>
        <t>Properties marked as immutable via the IMMUTABLE_PROPERTIES mechanism in
<xref target="MoQTransport"/> provide integrity protection - relays cannot modify these
values without detection. However, immutable properties are NOT encrypted
and remain visible to relays. Applications must carefully consider which
properties require:</t>
        <ul spacing="normal">
          <li>
            <t>Confidentiality (use Private properties)</t>
          </li>
          <li>
            <t>Integrity without confidentiality (use Immutable properties)</t>
          </li>
          <li>
            <t>Neither (standard mutable properties suitable for relay operation)</t>
          </li>
        </ul>
      </section>
      <section anchor="relay-trust-model">
        <name>Relay Trust Model</name>
        <t>Different deployment scenarios have different trust models for relays:</t>
        <ul spacing="normal">
          <li>
            <t>Untrusted relays: Use Private properties for all sensitive metadata</t>
          </li>
          <li>
            <t>Semi-trusted relays (media switches): May have access to metadata keys
but not payload keys, enabling switching decisions without content access</t>
          </li>
          <li>
            <t>Trusted relays: May have full key access for transcoding or processing</t>
          </li>
        </ul>
        <t>Applications should select the appropriate protection mechanisms based on
their relay trust model and privacy requirements.</t>
      </section>
      <section anchor="deletion-detection">
        <name>Deletion Detection</name>
        <t>When using end-to-end encryption, relays cannot modify encrypted payloads
but could selectively delete or withhold objects. <xref target="MoQTransport"/> defines
PRIOR_GROUP_ID_GAP and PRIOR_OBJECT_ID_GAP properties that publishers can
include to indicate intentional gaps in sequences. Subscribers can use these
to distinguish between publisher-intended gaps and potential relay deletion.
<xref target="SecureObjects"/> provides additional mechanisms for detecting such attacks.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <section anchor="moq-properties-registry">
        <name>MOQ Properties Registry</name>
        <t>This document registers the following entries in the MOQ Properties
registry established by <xref target="MoQTransport"/>:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0x10</td>
              <td align="left">TIMESTAMP</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="timestamp"/></td>
            </tr>
            <tr>
              <td align="left">0x08</td>
              <td align="left">TIMESCALE</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="timescale"/></td>
            </tr>
            <tr>
              <td align="left">0x09</td>
              <td align="left">VIDEO_FRAME_MARKING</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="video-frame-marking"/></td>
            </tr>
            <tr>
              <td align="left">0x0C</td>
              <td align="left">AUDIO_LEVEL</td>
              <td align="left">Object</td>
              <td align="left">
                <xref target="audio-level"/></td>
            </tr>
            <tr>
              <td align="left">0x0D</td>
              <td align="left">VIDEO_CONFIG</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="vconfig"/></td>
            </tr>
            <tr>
              <td align="left">0x0F</td>
              <td align="left">AUDIO_CONFIG</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="aconfig"/></td>
            </tr>
            <tr>
              <td align="left">0x11</td>
              <td align="left">CODEC_STRING</td>
              <td align="left">Track, Object</td>
              <td align="left">
                <xref target="codec-string"/></td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="November" year="2026"/>
            <abstract>
              <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-23"/>
        </reference>
        <reference anchor="WebCodecs" target="https://www.w3.org/TR/webcodecs/">
          <front>
            <title>WebCodecs</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="July"/>
          </front>
        </reference>
        <reference anchor="WEBCODECS-CODEC-REGISTRY" target="https://www.w3.org/TR/webcodecs-codec-registry/">
          <front>
            <title>WebCodecs Codec Registry</title>
            <author>
              <organization/>
            </author>
            <date year="2023" month="July"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC9626">
          <front>
            <title>Video Frame Marking RTP Header Extension</title>
            <author fullname="M. Zanaty" initials="M." surname="Zanaty"/>
            <author fullname="E. Berger" initials="E." surname="Berger"/>
            <author fullname="S. Nandakumar" initials="S." surname="Nandakumar"/>
            <date month="March" year="2025"/>
            <abstract>
              <t>This document describes a Video Frame Marking RTP header extension used to convey information about video frames that is critical for error recovery and packet forwarding in RTP middleboxes or network nodes. It is most useful when media is encrypted and essential when the middlebox or node has no access to the media decryption keys. It is also useful for codec-agnostic processing of encrypted or unencrypted media, while it also supports extensions for codec-specific information.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9626"/>
          <seriesInfo name="DOI" value="10.17487/RFC9626"/>
        </reference>
        <reference anchor="RFC6464">
          <front>
            <title>A Real-time Transport Protocol (RTP) Header Extension for Client-to-Mixer Audio Level Indication</title>
            <author fullname="J. Lennox" initials="J." role="editor" surname="Lennox"/>
            <author fullname="E. Ivov" initials="E." surname="Ivov"/>
            <author fullname="E. Marocco" initials="E." surname="Marocco"/>
            <date month="December" year="2011"/>
            <abstract>
              <t>This document defines a mechanism by which packets of Real-time Transport Protocol (RTP) audio streams can indicate, in an RTP header extension, the audio level of the audio sample carried in the RTP packet. In large conferences, this can reduce the load on an audio mixer or other middlebox that wants to forward only a few of the loudest audio streams, without requiring it to decode and measure every stream that is received. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6464"/>
          <seriesInfo name="DOI" value="10.17487/RFC6464"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="MoQCatalog">
          <front>
            <title>MOQT Streaming Format</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <date day="2" month="June" year="2026"/>
            <abstract>
              <t>   This document specifies the MOQT Streaming Format, designed to
   operate on Media Over QUIC Transport.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-msf-01"/>
        </reference>
        <reference anchor="SecureObjects">
          <front>
            <title>End-to-End Secure Objects for Media over QUIC Transport</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document specifies an end-to-end authenticated encryption scheme
   for application objects transmitted via Media over QUIC (MoQ)
   Transport.  The scheme enables original publishers that share a
   symmetric key with end subscribers, to ensuring that MoQ relays are
   unable to decrypt object contents.  Additionally, subscribers can
   verify the integrity and authenticity of received objects, confirming
   that the content has not been modified in transit.  Additionally it
   allows MoQ parameters to be protected so the publisher can select if
   they are readable and/or modifiable by relays.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-secure-objects-01"/>
        </reference>
        <reference anchor="MOQ-MLS">
          <front>
            <title>End-to-end Security for Media over QUIC</title>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <date day="30" month="June" year="2025"/>
            <abstract>
              <t>   The Media over QUIC system allows relays to assist in the delivery of
   real-time media.  While these relays are trusted to facilitate media
   delivery, they are not trusted to access the media content.  The
   document describes an end-to-end security system that prevents relays
   from accessing media content.  MLS is used to establish keys that are
   available only to legitimate participants in a session, which are
   then used to protect media data using SFrame.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-jennings-moq-e2ee-mls-03"/>
        </reference>
      </references>
    </references>
    <?line 705?>

<section anchor="Acknowledgements">
      <name>Acknowledgements</name>
      <t>Thanks to Cullen Jennings, Luke Curley, Upendra Sharma, and Yu You for suggestions and review.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+U963obt5X/8RRY+UelhqREWXEdbdNW0SVmK1mKJLtfdr9d
ZzgEyamHM8xgRrKiuM+yz7JPtucGDOYi+ZJ0++23+mGSGOAAOPdzcDAeDoeq
TMrU7OvT/Faf35hiaaKZPjOzJNKHeVZGSWYKFU2nhbnZ1ytsH8a+fZbHWbSC
0bMimpfDxJTz4Sr/cZjm8XDnS2Wr6SqxNoH+d2voNTm+PlFRYaJ9vfFXM9VR
NtOTrDRFZkp9XUSZXedFuaFu8+LtosirNfTjpeDK9HevJocb6q25g+ezfaWH
+vT8ED/Ozr+Tj2v8xH74SatVNyarDPTWD0LUmpe38VeYN8kW+lvsie2rKEmh
Hbb0J9zbKC8W2BwV8RKal2W5tvvb29gLm5IbM3LdtrFhe1rkt9Zsw/htHLdI
ymU1ZYDD28U2oAmb06g0tgwB0uMRdx8lOXbc7qJ4tCxX6YaKYfgiL+72tS1n
aga/9vX90cH18XuVrIt9XRaVLXd3dr7a2VW2BJy/idI8g053xqqoKpd5sa+G
sA6t51WaMkHPcv1vURaVd9QOG4qy5KeoBFLu68PExjm1G0bQ6ifq+qcYH4zi
fNUBd1UtI6tfwuTR22oVFR8D1Wbc/RGwFwaYR18vozJemj6gZ0lc5DaflyHg
dSkD/rRyjwl6lhcrGHdD3HKWf+c5Ejh3eDTyqC9dO3QDNj7MZya2+zSDCNOG
b96gZibKn6v0Tu/u7D7lrlGxMADaEf329nZ0+5R45/py+9ZMYwKwjZMcf3N4
fnR8eDWkj+Hl8beTq+vL7x+YU9OHvjSLxJbF3S9ewpA+hoXA21YqyeYtXB1G
JXDVooWplZ3D4ysTV4U5n/7NxKVt9bD0bJjzQ4R1/t3w7PSKu/3NZBkIpKWu
ZteY4Sq1SqnhcKijKSwmikulrpeJ1XZt4mSexER4PTM2LpKpsTp6VLPpTVAh
W5p3gx/KZLjbGekm+F7crUv8Vc2SnNpukpnJWbUgTiNd5npqdGXNTK2LBHg7
ARQDJJ2gZoMFApJk2tzpnFrZ6U3UWlsjNSlB29w5UDBYl0tDKk1flaAyV6iY
Tnidm2dXJ1vNHQ/U7TKJl7DxOewLtx0zRWRvCle0rqZpYoHxLa4aaApqy9Cu
HL5w0qRAvaoRuW8tPUW8gC7nLjwYbICtVtR/NdLH76LVOsVpEV5qc70ucsTU
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

-->

</rfc>
