<?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-ietf-moq-loc-04" category="std" consensus="true" submissionType="IETF" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="media-container">Low Overhead Media Container</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-moq-loc-04"/>
    <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>
        <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>
          </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="6" month="July" 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-19"/>
        </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 694?>

<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+U82XbjxpXv9RU16odIMUktLXdsTZxE1uJmIrVkSd05njkz
bRAskkiDAI0CxJblzrfkW+bL5m5VKCxSL7YnZ070IJKFWm7d/d66heFwqMqk
TM2BPsvX+uLWFAsTTfW5mSaRPsqzMkoyU6hoMinM7YFeYvsw9u3TPM6iJYye
FtGsHCamnA2X+Q/DNI+HO/vKVpNlYm0C/e9W0Gt8cnOqosJEB3rjr2aio2yq
x1lpisyU+qaIMrvKi3JDrfPizbzIqxX0Y1AQMv3ty/HRhnpj7uD59EDpoT67
OMKP84tv5eMGP7EffhK06tZklYHe+sEZtWbwNv4K6ybZXH+DPbF9GSUptMOW
/oR7G+XFHJujIl5A86IsV/Zgext7YVNya0au2zY2bE+KfG3NNozfxnHzpFxU
E55wuJ5vA5qwOY1KY8twQno84u6jJMeO210UjxblMt1QMQyf58XdgbblVE3h
14G+Pz68OXmnklVxoMuisuXezs6XO3vKloDz11GaZ9DpzlgVVeUiLw7UEODQ
elalKRP0PNf/EWVReUftsKEoS36MSiDlgT5KbJxTu2EELX+krn+K8cEozped
6a6rRWT1C1g8elMto+JDZrUZd39k2ksDzKNvFlEZL0zfpOdJXOQ2n5XhxKtS
Bvxp6R7T7FleLGHcLXHLef6t50jg3OHxyKO+dO3QDdj4KJ+a2B7QCiJMG755
g5qZKH+u0ju9t7P3lLtGxdzA1I7o6/V6tH5KvHNztb02k5gm2MZFTr4+ujg+
Oboe0sfw6uSb8fXN1XcPrKnpQ1+ZeWLL4u5ngzCkj2Eh820rlWSzFq6OohK4
at7C1NLO4PG1iavCXEz+ZuLStnpYejbM+SHOdfHt8Pzsmrv9zWQZCKSlrmbP
mOEytUqp4XCoowkAE8WlUjeLxGq7MnEyS2IivJ4aGxfJxFgdParZ9CaokC3N
u8EPZTLc7ZR0E3wv7lYl/qqmSU5tt8nU5KxaEKeRLnM9MbqyZqpWRQK8nQCK
YSadoGYDAAFJsmzudE6t7PQmaq2tkRqXoG3u3FQwWJcLQypNX5egMpeomE4Z
zs3z69Ot5o4Har1I4gVsfAb7wm3HTBHZm0KIVtUkTSwwvkWogaagtgztyuEL
F00K1KsakfvG0lPEC+hy7sKDwQbYakn9lyN98jZarlJcFudLba5XRY6YmtK6
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

-->

</rfc>
