<?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-einarsson-moq-locmaf-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="LOCMAF">Low Overhead CMAF for Media over QUIC (LOCMAF)</title>
    <seriesInfo name="Internet-Draft" value="draft-einarsson-moq-locmaf-00"/>
    <author fullname="Torbjörn Einarsson">
      <organization>Eyevinn Technology</organization>
      <address>
        <email>torbjorn.einarsson@eyevinn.se</email>
      </address>
    </author>
    <author fullname="Hugo Björs">
      <organization>KTH</organization>
      <address>
        <email>hugobjoers@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="June" day="02"/>
    <area>ART</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>moq</keyword>
    <keyword>cmaf</keyword>
    <keyword>live streaming</keyword>
    <keyword>low latency</keyword>
    <abstract>
      <?line 75?>

<t>This document specifies LOCMAF (Low Overhead CMAF for Media over
QUIC), a compact wire format for streaming low-latency CMAF media
over the MoQ Transport protocol (MOQT) with per-object overhead
comparable to the Low Overhead Container (LOC). LOCMAF carries the
CMAF chunk head metadata from a single <tt>moof</tt> (movie fragment) —
as a small set of tagged fields inside one of two LOCMAF object
kinds, while leaving the sample data (<tt>mdat</tt>) untouched. In
addition, it can carry the optional <tt>styp</tt> (segment type), <tt>prft</tt>
(producer reference time), any number of <tt>emsg</tt> (event message)
boxes. The first object of each MOQT group carries a full
reference; subsequent objects in the same group carry only the
differences. The receiver reconstructs CMAF chunks that are
semantically equivalent to the sender input, including encryption
metadata required by CMAF DRM (Common Encryption) pipelines.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://Eyevinn.github.io/locmaf-id/draft-einarsson-moq-locmaf.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-einarsson-moq-locmaf/"/>.
      </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/Eyevinn/locmaf-id"/>.</t>
    </note>
  </front>
  <middle>
    <?line 93?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>CMAF <xref target="CMAF"/> chunk headers have a size starting at 100 bytes, while
the codec frames they describe may be only a few hundred bytes at
low latency and low-bitrate such as audio tracks.
Streaming CMAF directly over MoQ Transport <xref target="MOQT"/>
therefore incurs a per-object overhead that the Low Overhead
Container (LOC) <xref target="LOC"/> avoids by carrying raw codec frames with
a minimal set of metadata. LOC, however, cannot transport the
per-sample CENC <xref target="CENC"/> metadata needed for browser EME / CDM decryption
of DRM-protected live streams, nor the <tt>prft</tt> (Producer Reference Time)
and <tt>emsg</tt> (DASH Event Message) boxes that CMAF may carry alongside
the <tt>moof</tt>.</t>
      <t>LOCMAF closes this gap. It exploits the observation that consecutive
CMAF chunk heads within a single CMAF segment are nearly identical:
the first chunk of a MOQT group is sent in full, subsequent chunks
are sent as compact deltas against the previous chunk in the same
group, and <tt>mdat</tt> payloads are passed through unchanged. The
receiver reconstructs full CMAF chunks that are byte-compatible
enough to feed unmodified MSE / EME pipelines.</t>
      <t>This document specifies the LOCMAF object framing, the full and
delta chunk encodings, the CMSF <xref target="CMSF"/> catalog signalling, the
receiver reconstruction algorithm, and the DRM box round-trip.</t>
      <section anchor="relationship-to-prior-work">
        <name>Relationship to prior work</name>
        <t>A reason that CMAF headers are big is that they have a history
in the multi-sample MP4 file format. Furthermore, each individual
box starts with an 8-byte header using a fixed 4-byte size
and a 4-byte identifier. This is in contrast to MOQT and QUIC
that use varint.</t>
        <t>A general MP4/CMAF box can be compressed by reducing the header
size by using varints and shorter ids as proposed in the
Compressed MP4 draft <xref target="COMPRESSED-MP4"/>. LOCMAF takes
a more specific approach:</t>
        <ul spacing="normal">
          <li>
            <t>LOCMAF does <strong>not</strong> compress the CMAF Header
(initialisation segment). The CMAF Header is carried verbatim in
the catalog (see <xref target="cmaf-header"/>). Init compression is a
one-time-per-track cost; LOCMAF's wire-byte target is the
per-chunk overhead, which an init codec cannot reduce. Carrying
the CMAF Header verbatim has a second, deployment-driven
benefit: a <tt>locmaf</tt> packaging track uses the <strong>same MSF
initialisation-data mechanism</strong> as a <tt>cmaf</tt> packaging track,
and when both wrap the same source they <bcp14>MAY</bcp14> refer to the same
init entry (see <xref target="cmaf-header"/>), as being proposed for
the next draft of <xref target="CMSF"/>. Publishers can therefore
introduce LOCMAF as a more efficient wire format for clients
that support it without duplicating the initialisation bytes
for legacy CMAF clients — both audiences consume the same init
from the same catalog entry, and the publisher only adds the
LOCMAF-encoded media track alongside the CMAF one.</t>
          </li>
          <li>
            <t>LOCMAF's goal for the per-chunk path is <strong>functionally
equivalent reconstruction</strong>, not byte-exact reconstruction: the
reconstructed CMAF chunk carries the same samples, sample
metadata, and CENC metadata as the source, but byte-level
details that do not affect a CMAF reader are not preserved
(<xref target="receiver-reconstruction"/> lists what may differ). Given that the
typical target is to feed an MSE/EME player instance, this is
not a disadvantage.</t>
          </li>
        </ul>
        <t>A reference implementation is available <xref target="MOQLIVEMOCK"/>. Worked
examples and diagrams are published at <xref target="LOCMAF-SITE"/>.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<t>The following terms are used throughout this document:</t>
      <dl>
        <dt>CMAF chunk:</dt>
        <dd>
          <t>One <tt>moof</tt> + one <tt>mdat</tt> pair, optionally preceded by at most one
<tt>styp</tt>, at most one <tt>prft</tt>, and zero or more <tt>emsg</tt> boxes, as
defined in <xref target="CMAF"/> §7.3.3.2. The smallest CMAF addressable
media object.</t>
        </dd>
        <dt>CMAF fragment:</dt>
        <dd>
          <t>One or more CMAF chunks whose first chunk starts at a Stream
Access Point (<xref target="CMAF"/> §7.3.2.2). A fragment is logically a
single <tt>MovieFragmentBox</tt> worth of samples; in "chunked" CMAF the
samples are split across multiple smaller <tt>moof</tt> + <tt>mdat</tt> pairs.</t>
        </dd>
        <dt>CMAF segment:</dt>
        <dd>
          <t>One or more CMAF fragments in decode order (<xref target="CMAF"/> §7.3.2.4).
The segment is the typical unit of HTTP delivery in DASH and
HLS-fMP4; in LOCMAF the segment corresponds to one MOQT group.</t>
        </dd>
        <dt>CMAF Header:</dt>
        <dd>
          <t>The <tt>ftyp</tt> + <tt>moov</tt> pair that initialises a CMAF track. Also
called an <em>initialisation segment</em> in DASH parlance and carried
as <tt>initData</tt> in MSF <xref target="MSF"/> / CMSF <xref target="CMSF"/> catalogs.</t>
        </dd>
        <dt>MOQT group, MOQT object:</dt>
        <dd>
          <t>As defined in <xref target="MOQT"/>.</t>
        </dd>
        <dt>LOCMAF object:</dt>
        <dd>
          <t>A MOQT object whose payload begins with one of the top-level
header IDs defined in <xref target="object-framing"/>.</t>
        </dd>
        <dt>Full LOCMAF chunk:</dt>
        <dd>
          <t>A LOCMAF object whose top-level header ID is <tt>LocmafFullHeader</tt>.
It carries an absolute encoding of the CMAF chunk head and serves
as the in-group reference for subsequent delta objects. See
<xref target="full-chunk"/>.</t>
        </dd>
        <dt>Delta LOCMAF chunk:</dt>
        <dd>
          <t>A LOCMAF object whose top-level header ID is <tt>LocmafDeltaHeader</tt>.
It encodes differences against the most recently received full
LOCMAF chunk in the same MOQT group. See <xref target="delta-chunk"/>.</t>
        </dd>
        <dt>BMDT:</dt>
        <dd>
          <t>Abbreviation for <tt>tfdt.baseMediaDecodeTime</tt> (<xref target="ISOBMFF"/>).</t>
        </dd>
      </dl>
    </section>
    <section anchor="mapping">
      <name>MOQT Group / Object Mapping</name>
      <t>LOCMAF assumes the following mapping from CMAF to MOQT:</t>
      <ul spacing="normal">
        <li>
          <t>One MOQT group per CMAF segment. Group boundaries align with
random access points.</t>
        </li>
        <li>
          <t>One MOQT object per CMAF chunk. Each MOQT object is a LOCMAF
object carrying the (full or delta) chunk head followed by the
unmodified <tt>mdat</tt> payload.</t>
        </li>
        <li>
          <t>Audio MOQT groups typically have the same duration as the video MOQT groups
with which they will be muxed, to enable joint tune-in.</t>
        </li>
        <li>
          <t>Sparse tracks, such as subtitle, or event/metadata tracks,
are more likely to have groups that are not aligned with video.</t>
        </li>
      </ul>
      <t>Per <xref target="MOQT"/>, objects within a MOQT group are delivered in order
and groups are independently decodable. LOCMAF relies on both
properties: delta chunks reference the preceding chunk in the same
group (see <xref target="delta-chunk"/>), and each group <bcp14>MUST</bcp14> begin with a
<tt>LocmafFullHeader</tt> so a subscriber tuning in at a group boundary
has a complete reference (see <xref target="dispatch"/>).</t>
    </section>
    <section anchor="catalog">
      <name>CMSF Catalog Signalling</name>
      <t>A track that carries LOCMAF-encoded chunks <bcp14>MUST</bcp14> advertise:</t>
      <ul spacing="normal">
        <li>
          <t><tt>packaging</tt> equal to <tt>"locmaf"</tt>.</t>
        </li>
        <li>
          <t><tt>locmafVersion</tt> equal to <tt>"0.2"</tt> for this version of the
specification.</t>
        </li>
      </ul>
      <t>This document extends the allowed <tt>packaging</tt> values defined in
<xref target="MSF"/> to include one new entry, in the same manner that <xref target="CMSF"/>
adds <tt>"cmaf"</tt>:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Name</th>
            <th align="left">Value</th>
            <th align="left">Reference</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">LOCMAF</td>
            <td align="left">
              <tt>locmaf</tt></td>
            <td align="left">this document</td>
          </tr>
        </tbody>
      </table>
      <t><tt>locmafVersion</tt> is a track-level catalog field added by this
document, analogous to the track-level fields <xref target="CMSF"/> adds for
CMAF. It is present only when <tt>packaging == "locmaf"</tt> and is
omitted otherwise. Its value is a string identifying the LOCMAF
wire-format version; <tt>"0.2"</tt> denotes the format specified here.
Receivers <bcp14>MUST</bcp14> compare it against their highest supported version
and <bcp14>SHOULD</bcp14> refuse the track when the encoder advertises a version
they do not implement. The set of valid <tt>locmafVersion</tt> values is
governed by this document and its successors, not by an IANA
registry (see <xref target="iana"/>).</t>
      <t>The CMAF Header for a LOCMAF track is carried by the same MSF
<xref target="MSF"/> mechanism that carries the CMAF Header for a plain <tt>cmaf</tt>
packaging track. LOCMAF does not define its own init-carriage
shape, nor add <tt>locmaf</tt>-specific catalog fields beyond
<tt>locmafVersion</tt>. Whatever mechanism MSF specifies for <tt>cmaf</tt>
init data — inline <tt>initData</tt> today, or whichever indirection
form MSF adopts (e.g. a root-level init-data list referenced from
the track entry) — applies unchanged to <tt>locmaf</tt> tracks.</t>
      <t>A consequence: when a <tt>cmaf</tt> packaging track and a <tt>locmaf</tt>
packaging track wrap the same source, they <bcp14>MAY</bcp14> refer to the same
MSF init-data entry. The wrapped media is identical at the
sample level and the CMAF Header bytes are identical at the byte
level (see <xref target="cmaf-header"/>); only the per-chunk wire encoding
differs.</t>
      <t>It should be noted that <tt>cmaf</tt> and <tt>locmaf</tt> track may be mixed,
e.g. video tracks using <tt>cmaf</tt> packaging while audio uses <tt>locmaf</tt>`
dito.</t>
    </section>
    <section anchor="cmaf-header">
      <name>CMAF Header Delivery</name>
      <t>The CMAF Header for a LOCMAF track is byte-identical to the CMAF
Header a plain <tt>cmaf</tt> packaging track of the same source would
carry — <tt>ftyp</tt> followed by <tt>moov</tt>, followed by any optional
supplemental boxes (<tt>pssh</tt>, <tt>mvex</tt> with <tt>trex</tt>, etc.). It is
delivered uncompressed via the catalog using the same MSF
mechanism as for <tt>cmaf</tt> packaging. There is no LOCMAF-specific
CMAF Header carrier.</t>
      <t>The <tt>moov</tt> in the CMAF Header <bcp14>MUST</bcp14> contain exactly one <tt>trak</tt> box
(see <xref target="scope"/>).</t>
      <t>A LOCMAF receiver:</t>
      <ol spacing="normal" type="1"><li>
          <t>Resolves the track's MSF init-data reference (whichever form
the catalog uses) to the base64-encoded CMAF Header bytes.</t>
        </li>
        <li>
          <t>Base64-decodes the CMAF Header bytes.</t>
        </li>
        <li>
          <t>Feeds the bytes to its MSE / decoder pipeline exactly as it
would for a plain CMAF track.</t>
        </li>
        <li>
          <t>Begins receiving LOCMAF-encoded media objects on the subscribed
track and reconstructs each CMAF chunk from the LOCMAF payload.</t>
        </li>
        <li>
          <t>Extracts the parameters required to regenerate CMAF chunks —
<tt>track_ID</tt>, media timescale, <tt>trex</tt> defaults, and any track-
encryption information (<tt>tenc</tt> defaults, default KID, default
IV, scheme type, pattern parameters) — from the decoded CMAF
Header. These values seed the reconstruction state used in
step 4.</t>
        </li>
      </ol>
      <t>Compression of the catalog itself is out of scope for LOCMAF and
handled at the MOQT / MSF <xref target="MSF"/> layer.</t>
    </section>
    <section anchor="scope">
      <name>Scope and Publisher Requirements</name>
      <t>LOCMAF v0.2 targets the low-latency CMAF case: short CMAF fragments
composed of small CMAF chunks (often one sample per chunk),
optionally carrying CENC encryption metadata. To keep the wire
format minimal, the following constraints apply.</t>
      <section anchor="mandatory-preconditions">
        <name>Mandatory preconditions</name>
        <t>A LOCMAF publisher <bcp14>MUST</bcp14> ensure that:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Single <tt>trak</tt> per <tt>moov</tt>.</strong> The CMAF Header contains exactly
one <tt>trak</tt> box. Multi-track ISO BMFF files <bcp14>MUST</bcp14> be demuxed
before LOCMAF encoding.</t>
          </li>
          <li>
            <t><strong>No key ID (KID) change within a CMAF chunk.</strong> Key-identifier
transitions <bcp14>MUST</bcp14> align with fragment (and therefore chunk)
boundaries. This removes the need for <tt>sgpd</tt> / <tt>sbgp</tt> boxes
in the wire format.</t>
          </li>
          <li>
            <t><strong>Restricted <tt>sample_flags</tt> populations.</strong> Per-sample, default,
and first-sample <tt>sample_flags</tt> <bcp14>MUST</bcp14> populate only <tt>is_leading</tt>,
<tt>sample_depends_on</tt>, <tt>sample_is_depended_on</tt>, and
<tt>sample_is_non_sync_sample</tt>; the fields <tt>sample_has_redundancy</tt>,
<tt>sample_padding_value</tt>, and <tt>sample_degradation_priority</tt> <bcp14>MUST</bcp14>
be zero in the source. See <xref target="sample-flags"/>.</t>
          </li>
          <li>
            <t><strong><tt>emsg</tt> version 1 only.</strong> Any <tt>emsg</tt> boxes in the source <bcp14>MUST</bcp14>
be version 1 per CMAF §7.4.5. See <xref target="emsg"/>.</t>
          </li>
        </ol>
        <t>If a source violates any of these, the publisher <bcp14>MUST NOT</bcp14> use
LOCMAF packaging for that track and <bcp14>MUST</bcp14> instead use plain CMAF or
an alternative packaging (e.g. an MSF <tt>eventtimeline</tt> companion
track for events). LOCMAF and plain CMAF tracks <bcp14>MAY</bcp14> coexist in the
same catalog under the same namespace.</t>
      </section>
      <section anchor="recommended-source-properties">
        <name>Recommended source properties</name>
        <t>The following are recommendations whose violation costs wire bytes
but does not break LOCMAF:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Commensurate media timescales.</strong> Choose a timescale so every
frame has an exact integer duration (e.g. 48 000 for 48 kHz AAC,
60 000 for 60000/1001 fps video).</t>
          </li>
          <li>
            <t><strong>Stable <tt>trex</tt> defaults.</strong> Keeping <tt>trex</tt> consistent across the
stream maximises what can be omitted from each chunk header.</t>
          </li>
        </ol>
      </section>
      <section anchor="bmdt-contiguity">
        <name><tt>tfdt.baseMediaDecodeTime</tt> contiguity</name>
        <t>CMAF (§7.5.18) requires that each fragment's BMDT equal the
previous fragment's BMDT plus the sum of its sample durations. The
delta-chunk BMDT derivation defined in <xref target="delta-chunk"/> relies on
this property. Re-anchoring is signalled in-band by emitting an
absolute BMDT override (see <xref target="delta-chunk"/>).</t>
      </section>
      <section anchor="optional-encoder-modes">
        <name>Optional encoder modes</name>
        <t>A LOCMAF encoder <bcp14>MAY</bcp14> operate in <strong>strict <tt>cmf2</tt> mode</strong>, in which it
always emits the four <tt>tfhd</tt> defaults (sample duration, size,
flags, sample-description index) in the full chunk header even
when they match <tt>trex</tt>. This costs ~6 B per group but produces
reconstructed CMAF chunks that satisfy CMAF §7.7.3 fragment self-
decodability (each chunk is a single-chunk fragment in the LOCMAF
mapping). It does not need to be signaled since it does not
affect wire compatibility between encoders and decoders.</t>
      </section>
    </section>
    <section anchor="object-framing">
      <name>Object Framing</name>
      <section anchor="top-level-header-ids">
        <name>Top-level header IDs</name>
        <t>LOCMAF defines two top-level header IDs:</t>
        <table>
          <thead>
            <tr>
              <th align="left">ID</th>
              <th align="left">Symbol</th>
              <th align="left">Object kind</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">23</td>
              <td align="left">
                <tt>LocmafFullHeader</tt></td>
              <td align="left">Full LOCMAF chunk (see <xref target="full-chunk"/>)</td>
            </tr>
            <tr>
              <td align="left">25</td>
              <td align="left">
                <tt>LocmafDeltaHeader</tt></td>
              <td align="left">Delta LOCMAF chunk (see <xref target="delta-chunk"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>Receivers <bcp14>MUST</bcp14> skip (and <bcp14>SHOULD</bcp14> log) unrecognised <tt>header_id</tt>
values rather than abort. The MOQT object length terminates the
unknown object cleanly.</t>
        <t>Future extensions adding new top-level object kinds use any
unassigned ID, allocated via the IANA registry defined in
<xref target="iana"/>.</t>
      </section>
      <section anchor="object-layout">
        <name>Object layout</name>
        <artwork><![CDATA[
+-----------------------------+
| header_id        (varint)   |   top-level object kind
+-----------------------------+
| properties_length (varint)  |   byte length of the properties block
+-----------------------------+
| properties      (variable)  |   sequence of (field_id, value) tuples
+-----------------------------+
| mdat raw payload (rest)     |   length = MOQT-object-len - (above)
+-----------------------------+
]]></artwork>
        <t><tt>header_id</tt> and <tt>properties_length</tt> are variable-length integers
using the encoding defined by MoQ Transport <xref target="MOQT"/> for the
session's MOQT version.</t>
        <t>The mdat payload is the contents of the CMAF <tt>mdat</tt> box — the
sample data, without the surrounding 8-byte <tt>size + 'mdat'</tt> box
header. The receiver reconstructs a standard <tt>mdat</tt> box by wrapping
these bytes in an 8-byte ISO BMFF header.</t>
        <t>For event-only tracks (see <xref target="event-only"/>) the mdat payload <bcp14>MAY</bcp14> be
zero bytes; the receiver reconstructs an empty <tt>mdat</tt> box (8-byte
header only).</t>
      </section>
      <section anchor="property-encoding-parity-rule">
        <name>Property encoding (parity rule)</name>
        <t>The properties block is a flat sequence of <tt>(field_id, value)</tt>
tuples. Field IDs are MOQT varints. The value encoding is
determined by the parity of the ID:</t>
        <ul spacing="normal">
          <li>
            <t><strong>Even ID:</strong> scalar varint. The value is a single MOQT varint.
No length prefix. In delta chunks, the encoded value is a
zigzag varint (see <xref target="zigzag"/>) of the signed delta against the
in-group reference; in full chunks it is an absolute unsigned
MOQT varint.</t>
          </li>
          <li>
            <t><strong>Odd ID:</strong> length-prefixed bytes. The tuple is <tt>field_id |
value_length | value_bytes</tt>. The interpretation of the bytes is
per-field; varint-list fields concatenate elements (each element
is a zigzag varint (see <xref target="zigzag"/>) in delta context, an
absolute MOQT varint in full context), raw-bytes fields carry
opaque content. The one exception is the <em>signed list</em>
              <tt>trunSampleCompositionTimeOffsets</tt> (ID 5): its elements are
zigzag varints (see <xref target="zigzag"/>) in BOTH full and delta context,
because composition time offsets are signed in <tt>trun</tt> version 1
(see <xref target="moof-fields"/>).</t>
          </li>
        </ul>
        <t>Field IDs <bcp14>MAY</bcp14> appear in any order; receivers <bcp14>MUST</bcp14> tolerate any
ordering. Encoders <bcp14>SHOULD</bcp14> emit IDs in ascending order to produce
deterministic wire bytes.</t>
      </section>
      <section anchor="zigzag">
        <name>Zigzag varint encoding</name>
        <t>A <em>zigzag varint</em> is a signed integer encoded as an unsigned MOQT
varint by interleaving non-negative and negative values so that
small-magnitude values of either sign occupy small unsigned
values, and thus the shortest varint forms.</t>
        <t>For a signed 64-bit integer <tt>n</tt>, the mapping to its unsigned
zigzag representation <tt>z</tt> is:</t>
        <artwork><![CDATA[
encode:  z = (n << 1) ^ (n >> 63)  ; arithmetic right shift
                                   ; equivalently:
                                   ;   n >= 0:  z = 2 * n
                                   ;   n <  0:  z = -2 * n - 1

decode:  n = (z >> 1) ^ -(z & 1)   ; equivalently:
                                   ;   z even:  n =  z / 2
                                   ;   z odd:   n = -(z + 1) / 2
]]></artwork>
        <t>The first few mappings: 0↔0, -1↔1, 1↔2, -2↔3, 2↔4, -3↔5, 3↔6, ….</t>
        <t>The encoded <tt>z</tt> is then serialised as an unsigned MOQT varint
(<xref target="MOQT"/>); decoders read the MOQT varint and apply the decode
rule above.</t>
        <t>This zigzag mapping is widely used in compact binary
serialisation formats; the description is included here for
self-containment of the LOCMAF wire format.</t>
        <t>LOCMAF uses zigzag varints wherever a signed delta against the
in-group reference is written, namely in scalar even-ID fields
(see above) and per-element in varint-list odd-ID fields. Absolute
values in <tt>LocmafFullHeader</tt> are encoded as plain unsigned MOQT
varints, not zigzag — with one exception: the signed list
<tt>trunSampleCompositionTimeOffsets</tt> (ID 5) carries zigzag varints
even in a full chunk, because composition time offsets are signed
in <tt>trun</tt> version 1 (the common CMAF case: B-frames make the
composition/decode-time relation non-monotonic).</t>
      </section>
      <section anchor="dispatch">
        <name>Full vs delta dispatch</name>
        <t>The full-vs-delta distinction is signalled exclusively by the
top-level <tt>header_id</tt>, never by the MOQT object position within a
group.</t>
        <ol spacing="normal" type="1"><li>
            <t>The first object of every MOQT group <bcp14>MUST</bcp14> be a
<tt>LocmafFullHeader</tt>.</t>
          </li>
          <li>
            <t>The encoder <bcp14>MAY</bcp14> emit a <tt>LocmafFullHeader</tt> at any object
position within a group, not only at object index 0. A
mid-group full chunk re-anchors the in-group reference for
subsequent delta chunks.</t>
          </li>
          <li>
            <t>After receiving a <tt>LocmafFullHeader</tt>, the decoder <bcp14>MUST</bcp14> discard
its in-group delta state and treat the new full chunk as the
reference for any following <tt>LocmafDeltaHeader</tt> objects in the
group.</t>
          </li>
          <li>
            <t>The receiver <bcp14>MUST</bcp14> dispatch on <tt>header_id</tt> alone. It <bcp14>MUST NOT</bcp14>
infer "full" from object index 0 or "delta" from object index &gt;
0.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="field-ref">
      <name>Field Reference</name>
      <t>Field IDs are organised in blocks by source box:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Range</th>
            <th align="left">Block</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">1–16</td>
            <td align="left">fields from <tt>moof</tt> child boxes</td>
          </tr>
          <tr>
            <td align="left">18, 20, 22, 24</td>
            <td align="left">prft fields</td>
          </tr>
          <tr>
            <td align="left">23</td>
            <td align="left">styp field</td>
          </tr>
          <tr>
            <td align="left">25</td>
            <td align="left">emsg list</td>
          </tr>
          <tr>
            <td align="left">27</td>
            <td align="left">delta deletion marker</td>
          </tr>
        </tbody>
      </table>
      <section anchor="moof-fields">
        <name>Fields from moof child boxes</name>
        <t>Fields drawn from boxes inside <tt>moof.traf</tt> (i.e. from <tt>trun</tt>,
<tt>tfhd</tt>, <tt>tfdt</tt>, or <tt>senc</tt>). The symbol prefix names the containing
box, and the field IDs are the same across both Full and Delta
chunks.</t>
        <table>
          <thead>
            <tr>
              <th align="left">ID</th>
              <th align="left">Symbol</th>
              <th align="left">Kind</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">1</td>
              <td align="left">
                <tt>trunSampleSizes</tt></td>
              <td align="left">list</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">
                <tt>tfhdSampleDescriptionIndex</tt></td>
              <td align="left">scalar</td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">
                <tt>trunSampleDurations</tt></td>
              <td align="left">list</td>
            </tr>
            <tr>
              <td align="left">4</td>
              <td align="left">
                <tt>tfhdDefaultSampleDuration</tt></td>
              <td align="left">scalar</td>
            </tr>
            <tr>
              <td align="left">5</td>
              <td align="left">
                <tt>trunSampleCompositionTimeOffsets</tt></td>
              <td align="left">signed list ‡</td>
            </tr>
            <tr>
              <td align="left">6</td>
              <td align="left">
                <tt>tfhdDefaultSampleSize</tt></td>
              <td align="left">scalar</td>
            </tr>
            <tr>
              <td align="left">7</td>
              <td align="left">
                <tt>trunSampleFlags</tt></td>
              <td align="left">list †</td>
            </tr>
            <tr>
              <td align="left">8</td>
              <td align="left">
                <tt>tfhdDefaultSampleFlags</tt></td>
              <td align="left">scalar †</td>
            </tr>
            <tr>
              <td align="left">9</td>
              <td align="left">
                <tt>sencInitializationVector</tt></td>
              <td align="left">raw bytes</td>
            </tr>
            <tr>
              <td align="left">10</td>
              <td align="left">
                <tt>tfdtBaseMediaDecodeTime</tt></td>
              <td align="left">scalar</td>
            </tr>
            <tr>
              <td align="left">11</td>
              <td align="left">
                <tt>sencSubsampleCount</tt></td>
              <td align="left">list</td>
            </tr>
            <tr>
              <td align="left">12</td>
              <td align="left">
                <tt>trunFirstSampleFlags</tt></td>
              <td align="left">scalar †</td>
            </tr>
            <tr>
              <td align="left">13</td>
              <td align="left">
                <tt>sencBytesOfClearData</tt></td>
              <td align="left">list</td>
            </tr>
            <tr>
              <td align="left">14</td>
              <td align="left">
                <tt>trunSampleCount</tt></td>
              <td align="left">scalar</td>
            </tr>
            <tr>
              <td align="left">15</td>
              <td align="left">
                <tt>sencBytesOfProtectedData</tt></td>
              <td align="left">list</td>
            </tr>
            <tr>
              <td align="left">16</td>
              <td align="left">
                <tt>sencPerSampleIVSize</tt></td>
              <td align="left">scalar</td>
            </tr>
          </tbody>
        </table>
        <t>† Sample-flag fields (IDs 7, 8, 12) carry the 5-bit packed encoding
defined in <xref target="sample-flags"/>.</t>
        <t>‡ The <em>signed list</em> (ID 5) carries zigzag varints (see <xref target="zigzag"/>)
per element in BOTH full and delta chunks, because composition time
offsets are signed in <tt>trun</tt> version 1. This is the sole odd-ID
list whose full-chunk elements are not plain unsigned varints.</t>
        <t>The remaining name components map field-for-field onto the source
box (e.g. <tt>tfhdDefaultSampleDuration</tt> ↔ <tt>tfhd.default_sample_duration</tt>,
<tt>trunFirstSampleFlags</tt> ↔ <tt>trun.first_sample_flags</tt>). Indexing rules:
per-sample lists (IDs 1, 3, 5, 7, 11) carry the <tt>samples[i].*</tt>
values from their box; the per-subsample lists (IDs 13, 15) carry
<tt>senc.samples[i].subsamples[j].*</tt> flattened in chunk order; and
<tt>sencInitializationVector</tt> (9) is the concatenation of per-sample
IVs, each <tt>sencPerSampleIVSize</tt> bytes long.</t>
        <t>The ID space is structurally aligned with the parity rule: every
default/scalar field has an even ID and every per-sample list field
has an odd ID, with <tt>sencInitializationVector</tt> (9) as the documented
exception (raw bytes rather than a list).</t>
      </section>
      <section anchor="prft-fields">
        <name>prft fields</name>
        <t>The <tt>ProducerReferenceTimeBox</tt> (<tt>prft</tt>, <xref target="CMAF"/> §6.6.8, §7.3.2.4)
carries an NTP-style wall-clock anchor tied to a media time. In
CMAF it <bcp14>MAY</bcp14> precede any <tt>moof</tt> inside a CMAF chunk and applies to
the addressable media object whose <tt>moof</tt> it precedes. LOCMAF
carries it per-chunk through the following fields:</t>
        <table>
          <thead>
            <tr>
              <th align="left">ID</th>
              <th align="left">Symbol</th>
              <th align="left">Source field</th>
              <th align="left">Kind</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">18</td>
              <td align="left">
                <tt>prftNtpTimestamp</tt></td>
              <td align="left">
                <tt>prft.ntp_timestamp</tt> (NTP64)</td>
              <td align="left">scalar (absolute in full; zigzag delta in delta)</td>
            </tr>
            <tr>
              <td align="left">20</td>
              <td align="left">
                <tt>prftMediaTime</tt></td>
              <td align="left">
                <tt>prft.media_time</tt></td>
              <td align="left">scalar (absolute in full; zigzag delta in delta)</td>
            </tr>
            <tr>
              <td align="left">22</td>
              <td align="left">
                <tt>prftVersion</tt></td>
              <td align="left">
                <tt>prft.version</tt></td>
              <td align="left">scalar (default 1)</td>
            </tr>
            <tr>
              <td align="left">24</td>
              <td align="left">
                <tt>prftFlags</tt></td>
              <td align="left">
                <tt>prft.flags</tt> (24-bit FullBox flags)</td>
              <td align="left">scalar (default 0)</td>
            </tr>
          </tbody>
        </table>
        <t><tt>prftNtpTimestamp</tt> (ID 18) and <tt>prftMediaTime</tt> (ID 20) have no
default value, so a full LOCMAF chunk that carries <tt>prft</tt> <bcp14>MUST</bcp14>
include both; <tt>prftVersion</tt> (ID 22) and <tt>prftFlags</tt> (ID 24)
default as given above and <bcp14>MAY</bcp14> be omitted when they match their
defaults. The receiver reconstructs a <tt>prft</tt> box in the output
chunk iff IDs 18 and 20 are present.</t>
        <t>In a delta chunk, the scalar fields are zigzag-encoded deltas
against the most recent full chunk in the same group that itself
carried <tt>prft</tt> fields; a field left absent is unchanged from that
reference. Deltas are signed because both quantities can decrease
in valid CMAF streams: producer NTP clocks can be corrected
backward, and composition-time reordering with B-frames can place
a chunk's presentation anchor before the previous chunk's. If the
previous full chunk had no <tt>prft</tt>, an encoder that begins emitting
<tt>prft</tt> mid-group <bcp14>MUST</bcp14> use absolute encodings (i.e. re-anchor).</t>
        <t>This presence-signalling supports three producer patterns with no
further wire-format support:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>None:</strong> no <tt>prft</tt> field is ever emitted.</t>
          </li>
          <li>
            <t><strong>Per-group:</strong> absolute <tt>prft</tt> fields on the <tt>LocmafFullHeader</tt>
only, absent from subsequent <tt>LocmafDeltaHeader</tt> objects in the
group.</t>
          </li>
          <li>
            <t><strong>Per-chunk:</strong> absolute <tt>prft</tt> fields on the <tt>LocmafFullHeader</tt>,
delta <tt>prft</tt> fields on subsequent <tt>LocmafDeltaHeader</tt> objects.</t>
          </li>
        </ol>
        <section anchor="prftntptimestamp">
          <name><tt>prftNtpTimestamp</tt></name>
          <t>The value is the full 64-bit NTP timestamp defined by ISO BMFF
(32-bit seconds since 1900-01-01 + 32-bit fraction) carried as a
varint scalar — absolute in a full chunk, zigzag delta in a delta
chunk. Full source precision is preserved so that downstream
consumers can measure producer-vs-receiver clock drift from the
sub-millisecond jitter around the mean inter-chunk period (a
coarser representation would round away the drift signal).</t>
          <t>NTP64 is layout-equivalent to a Q32.32 fixed-point seconds value
(integer seconds in the upper 32 bits, binary fraction of a
second in the lower 32 bits). Encoders and receivers <bcp14>MUST</bcp14> treat
the field as a single 64-bit unsigned integer for the purposes of
delta computation:</t>
          <artwork><![CDATA[
encoder: delta_i64 = (int64)(current_ntp64 - previous_ntp64)
         wire      = MOQT-varint(zigzag(delta_i64))

receiver: delta_i64 = unzigzag(MOQT-varint-decode(wire))
          current_ntp64 = previous_ntp64 + (uint64)delta_i64
]]></artwork>
          <t>The carry from fraction into seconds at a second boundary is
absorbed by the 64-bit add naturally; there is no separate
handling. The receiver splits the resulting 64-bit value back
into the <tt>prft.ntp_timestamp</tt> seconds (upper 32) and fraction
(lower 32) fields.</t>
          <t>The steady-state delta for common frame periods lands in the
4-byte varint band: ~85.9 M units for a 20 ms (50 fps) gap, ~71.6 M
for 60 fps, ~171.8 M for 25 fps. The 4-byte cost is the dominant
per-chunk overhead of the prft path; encoders that do not need
drift-detection precision <bcp14>MAY</bcp14> choose the per-group emission
pattern instead of per-chunk (see the producer patterns above).</t>
        </section>
        <section anchor="prftmediatime">
          <name><tt>prftMediaTime</tt></name>
          <t><tt>prftMediaTime</tt> carries the v1 <tt>prft.media_time</tt> field (an integer
in the track's <tt>mdhd.timescale</tt> ticks) directly. It is not
re-scaled. Steady-state deltas at the track timescale are small
(e.g. 1024 ticks for an AAC frame at 48 kHz, 1001 ticks for a
60000/1001 fps video frame at timescale 60000) and fit in 1–2
varint bytes.</t>
        </section>
        <section anchor="prftversion">
          <name><tt>prftVersion</tt></name>
          <t>Defaults to 1 (the v1 <tt>prft</tt> form with a 64-bit <tt>media_time</tt>).
Encoders <bcp14>SHOULD</bcp14> omit the field; receivers that find the field
absent reconstruct version 1.</t>
        </section>
        <section anchor="prftflags">
          <name><tt>prftFlags</tt></name>
          <t>Carries the 24-bit FullBox <tt>flags</tt> field defined in
ISO/IEC 14496-12 for <tt>ProducerReferenceTimeBox</tt>. Known values
include 0 (wall-clock anchor at the encoder, the common case), 1,
2, 4, 8, and 24 (combinations of the lower bits identifying
inband-event semantics and producer scope). Encoders <bcp14>MAY</bcp14> omit the
field when its value is 0; receivers that find the field absent
reconstruct flags = 0. The on-wire encoding is a varint scalar;
LOCMAF does not constrain the value beyond what <xref target="ISOBMFF"/>
defines.</t>
        </section>
        <section anchor="prftreferencetrackid">
          <name><tt>prft.reference_track_ID</tt></name>
          <t>Not carried on the wire. The receiver reconstructs it as the
<tt>track_ID</tt> of the single <tt>trak</tt> in the CMAF Header's <tt>moov</tt> (see
<xref target="scope"/>).</t>
        </section>
      </section>
      <section anchor="styp-fields">
        <name>styp fields</name>
        <t>Fields whose source is the <tt>FileTypeBox</tt> payload of a <tt>styp</tt> box
(<xref target="ISOBMFF"/>, §4.3) at the top of a CMAF chunk:</t>
        <table>
          <thead>
            <tr>
              <th align="left">ID</th>
              <th align="left">Symbol</th>
              <th align="left">Kind</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">23</td>
              <td align="left">
                <tt>stypBrandList</tt></td>
              <td align="left">raw bytes (odd, length-prefixed)</td>
              <td align="left">Concatenation of 4-byte FourCC codes: <tt>major_brand</tt> followed by each <tt>compatible_brand</tt>. Length <bcp14>MUST</bcp14> be a positive multiple of 4.</td>
            </tr>
          </tbody>
        </table>
        <t>LOCMAF does not carry <tt>styp.minor_version</tt> on the wire. Per
<xref target="CMAF"/> §7.2, <tt>minor_version</tt> is 0 for any structural CMAF brand
used as <tt>major_brand</tt>, so the reconstructed <tt>styp.minor_version</tt>
is always 0.</t>
        <t><tt>styp</tt> fields <bcp14>MAY</bcp14> appear only in <tt>LocmafFullHeader</tt>; encoders <bcp14>MUST
NOT</bcp14> emit them in <tt>LocmafDeltaHeader</tt>. Per <xref target="CMAF"/> §7.3.3.1, a
<tt>styp</tt> inside an addressable media object is ignored by players, so
the delta path has no use for it.</t>
        <t>If a <tt>LocmafFullHeader</tt> carries no <tt>stypBrandList</tt>, the receiver
emits no <tt>styp</tt> box in the reconstructed CMAF chunk. CMAF
(<xref target="CMAF"/> §7.3.3.1) does not require a <tt>styp</tt> for decoding or
playback; players that need brand information consult the CMAF
Header's <tt>ftyp</tt>. Per <xref target="CMAF"/> §7.2, when an encoder <em>does</em> emit
<tt>stypBrandList</tt>, the reconstructed <tt>styp.minor_version</tt> is 0.</t>
      </section>
      <section anchor="emsg-fields">
        <name>emsg field</name>
        <table>
          <thead>
            <tr>
              <th align="left">ID</th>
              <th align="left">Symbol</th>
              <th align="left">Kind</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">25</td>
              <td align="left">
                <tt>emsgList</tt></td>
              <td align="left">raw bytes (odd, length-prefixed)</td>
              <td align="left">A self-delimited concatenation of v1 <tt>emsg</tt> records in CMAF order. See <xref target="emsg"/> for record format.</td>
            </tr>
          </tbody>
        </table>
        <t>The presence of <tt>emsgList</tt> is independent of <tt>LocmafFullHeader</tt>
vs <tt>LocmafDeltaHeader</tt>. Both kinds carry the full list when
present; there is no delta encoding for <tt>emsg</tt>.</t>
      </section>
      <section anchor="deletion-marker">
        <name>Delta deletion marker</name>
        <table>
          <thead>
            <tr>
              <th align="left">ID</th>
              <th align="left">Symbol</th>
              <th align="left">Kind</th>
              <th align="left">Notes</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">27</td>
              <td align="left">
                <tt>deltaDeletedLocmafIDs</tt></td>
              <td align="left">list (odd, length-prefixed)</td>
              <td align="left">List of field IDs removed since the previous moof in the same group. Used only in <tt>LocmafDeltaHeader</tt>.</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="full-chunk">
      <name>Full LOCMAF Chunk Encoding</name>
      <t>A <tt>LocmafFullHeader</tt> carries an absolute encoding of one CMAF
chunk's head: at most one optional <tt>styp</tt>, at most one optional
<tt>prft</tt>, zero or more <tt>emsg</tt> boxes that preceded the <tt>moof</tt> in the
source, and the <tt>moof</tt> itself. The <tt>mdat</tt> payload follows the
property block, unchanged.</t>
      <section anchor="emission-rules-for-moof-child-box-fields">
        <name>Emission rules for moof child-box fields</name>
        <t>The encoder walks the source <tt>moof</tt> (paired with the catalog's
<tt>moov</tt>) and emits each moof field only when the value cannot be
derived from the <tt>moov</tt>'s <tt>trex</tt> defaults:</t>
        <dl newline="true">
          <dt><tt>tfhdSampleDescriptionIndex</tt></dt>
          <dd>
            <t><tt>tfhd.HasSampleDescriptionIndex()</tt> AND value ≠ <tt>trex.default_sample_description_index</tt></t>
          </dd>
          <dt><tt>tfhdDefaultSampleDuration</tt></dt>
          <dd>
            <t><tt>tfhd.HasDefaultSampleDuration()</tt> AND value ≠ <tt>trex.default_sample_duration</tt></t>
          </dd>
          <dt><tt>tfhdDefaultSampleSize</tt></dt>
          <dd>
            <t>all samples in the chunk have the same size AND that size ≠ <tt>trex.default_sample_size</tt> AND <tt>sample_count &gt; 1</tt></t>
          </dd>
          <dt><tt>tfhdDefaultSampleFlags</tt></dt>
          <dd>
            <t><tt>tfhd.HasDefaultSampleFlags()</tt> AND value ≠ <tt>trex.default_sample_flags</tt></t>
          </dd>
          <dt><tt>tfdtBaseMediaDecodeTime</tt></dt>
          <dd>
            <t>always</t>
          </dd>
          <dt><tt>trunSampleCount</tt></dt>
          <dd>
            <t>always</t>
          </dd>
          <dt><tt>trunFirstSampleFlags</tt></dt>
          <dd>
            <t><tt>trun.HasFirstSampleFlags()</tt></t>
          </dd>
          <dt><tt>trunSampleSizes</tt></dt>
          <dd>
            <t><tt>trun.HasSampleSize()</tt> AND sample sizes are not all equal AND <tt>sample_count &gt; 1</tt>; the list carries <tt>sample_count − 1</tt> values (first n−1 in chunk order)</t>
          </dd>
          <dt><tt>trunSampleDurations</tt></dt>
          <dd>
            <t><tt>trun.HasSampleDuration()</tt></t>
          </dd>
          <dt><tt>trunSampleCompositionTimeOffsets</tt></dt>
          <dd>
            <t><tt>trun.HasSampleCompositionTimeOffset()</tt></t>
          </dd>
          <dt><tt>trunSampleFlags</tt></dt>
          <dd>
            <t><tt>trun.HasSampleFlags()</tt></t>
          </dd>
          <dt><tt>sencPerSampleIVSize</tt></dt>
          <dd>
            <t><tt>senc</tt> present AND <tt>per_sample_iv_size ≠ tenc.default_per_sample_iv_size</tt></t>
          </dd>
          <dt><tt>sencInitializationVector</tt></dt>
          <dd>
            <t><tt>senc</tt> present AND <tt>per_sample_iv_size &gt; 0</tt> AND samples carry IVs (see also <xref target="cenc-iv"/>)</t>
          </dd>
          <dt><tt>sencSubsampleCount</tt></dt>
          <dd>
            <t><tt>senc</tt> present AND samples carry subsample maps</t>
          </dd>
          <dt><tt>sencBytesOfClearData</tt></dt>
          <dd>
            <t>same as <tt>sencSubsampleCount</tt></t>
          </dd>
          <dt><tt>sencBytesOfProtectedData</tt></dt>
          <dd>
            <t>same as <tt>sencSubsampleCount</tt></t>
          </dd>
        </dl>
        <t>In strict <tt>cmf2</tt> mode (see <xref target="scope"/>), <tt>tfhdDefaultSampleDuration</tt>,
<tt>tfhdDefaultSampleSize</tt>, <tt>tfhdDefaultSampleFlags</tt>, and
<tt>tfhdSampleDescriptionIndex</tt> are emitted unconditionally on the
full chunk, even when they match <tt>trex</tt>.</t>
        <section anchor="sample-size-derivation">
          <name>Sample-size derivation</name>
          <t>Let <tt>n = trunSampleCount</tt> and let <tt>P</tt> be the chunk's mdat-payload
length (MOQT object length minus the framing already consumed).
The receiver <bcp14>MUST</bcp14> derive sample sizes as follows:</t>
          <ul spacing="normal">
            <li>
              <t>If <tt>trunSampleSizes</tt> (ID 1) is present, it carries exactly <tt>n − 1</tt>
values. <tt>sample_size[i] = listed[i]</tt> for <tt>i</tt> in <tt>[0, n−1)</tt>, and
<tt>sample_size[n−1] = P − sum(listed)</tt>. The receiver <bcp14>MUST NOT</bcp14> consult
<tt>tfhdDefaultSampleSize</tt>, <tt>trex.default_sample_size</tt>, or any other
source for sample sizes in this chunk.</t>
            </li>
            <li>
              <t>Else if <tt>tfhdDefaultSampleSize</tt> (ID 6) is present, all <tt>n</tt> samples
have that size.</t>
            </li>
            <li>
              <t>Else if <tt>trex.default_sample_size</tt> is non-zero, all <tt>n</tt> samples
have that size.</t>
            </li>
            <li>
              <t>Else, when <tt>n == 1</tt>, the lone sample's size is <tt>P</tt>. When <tt>n &gt; 1</tt>
and no size information is available the chunk is malformed and
the receiver <bcp14>MUST</bcp14> reject it.</t>
            </li>
          </ul>
          <t>Correspondingly, when <tt>sample_count == 1</tt> both <tt>trunSampleSizes</tt> and
<tt>tfhdDefaultSampleSize</tt> <bcp14>MUST</bcp14> be omitted — the single sample's size
is always <tt>P</tt>. When <tt>sample_count &gt; 1</tt> with uniform sizes the
encoder <bcp14>MUST</bcp14> emit <tt>tfhdDefaultSampleSize</tt> (subject to the
<tt>trex.default_sample_size</tt> equality rule) and <bcp14>MUST NOT</bcp14> emit
<tt>trunSampleSizes</tt>; when sizes vary the encoder <bcp14>MUST</bcp14> emit
<tt>trunSampleSizes</tt> with exactly <tt>n − 1</tt> entries and <bcp14>MUST NOT</bcp14> emit
<tt>tfhdDefaultSampleSize</tt>. Omitting the last sample size shaves one
varint per chunk; using the default for uniform-size tracks (common
for fixed-bitrate audio, e.g., AC-3) collapses <tt>n − 1</tt> varints to
one.</t>
        </section>
      </section>
      <section anchor="emission-rules-for-prft-styp-emsg-fields">
        <name>Emission rules for prft / styp / emsg fields</name>
        <t><tt>stypBrandList</tt> is emitted iff the source CMAF chunk preceded its
<tt>moof</tt> with a <tt>styp</tt> box. When omitted, the receiver produces no
<tt>styp</tt> in the reconstructed chunk.</t>
        <t><tt>prft</tt> fields (18, 20, 22, 24) are emitted iff the source CMAF
chunk preceded its <tt>moof</tt> with a <tt>prft</tt> box, subject to the
per-field defaults described in <xref target="prft-fields"/> (encoders <bcp14>MAY</bcp14> omit
<tt>prftVersion</tt> when it is 1 and <tt>prftFlags</tt> when it is 0). All
emitted values are absolute.</t>
        <t><tt>emsgList</tt> is emitted iff the source CMAF chunk preceded its <tt>moof</tt>
with one or more v1 <tt>emsg</tt> boxes. See <xref target="emsg"/> for the record
format.</t>
      </section>
    </section>
    <section anchor="delta-chunk">
      <name>Delta LOCMAF Chunk Encoding</name>
      <t>A <tt>LocmafDeltaHeader</tt> carries only the differences between the
current CMAF chunk's head and the most recently received full
chunk in the same MOQT group.</t>
      <section anchor="field-value-encoding">
        <name>Field value encoding</name>
        <t>Each emitted field's value is interpreted relative to its kind:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Kind</th>
              <th align="left">Wire encoding</th>
              <th align="left">Reconstruction</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">scalar (even ID)</td>
              <td align="left">zigzag varint (see <xref target="zigzag"/>) of <tt>current_value − previous_value</tt></td>
              <td align="left">
                <tt>current = previous + delta</tt></td>
            </tr>
            <tr>
              <td align="left">list (odd ID)</td>
              <td align="left">zigzag varint (see <xref target="zigzag"/>) per element, concatenated; element delta = <tt>current[i] − previous[i]</tt></td>
              <td align="left">element-wise sum with the previous list</td>
            </tr>
            <tr>
              <td align="left">raw bytes (odd ID)</td>
              <td align="left">full new bytes verbatim</td>
              <td align="left">overwrite previous bytes</td>
            </tr>
          </tbody>
        </table>
        <t>The "previous value" for each field is the effective value used in
the reconstruction of the previous LOCMAF chunk in the same group
(or, after a mid-group <tt>LocmafFullHeader</tt>, the previous chunk
starting from that re-anchor).</t>
        <section anchor="list-length-changes">
          <name>List length changes</name>
          <t>The length of a per-sample list field in the current chunk is
<tt>trunSampleCount</tt>, which is always emitted (see <xref target="full-chunk"/>).
This covers <tt>trunSampleDurations</tt> (ID 3),
<tt>trunSampleCompositionTimeOffsets</tt> (ID 5), <tt>trunSampleFlags</tt> (ID 7),
and <tt>sencSubsampleCount</tt> (ID 11). <tt>trunSampleSizes</tt> (ID 1) is the
documented exception: it carries <tt>trunSampleCount − 1</tt> entries (the
last sample size is derived from the mdat-payload length per
<xref target="sample-size-derivation"/>). The per-subsample list fields (IDs 13,
15) have total length equal to <tt>sum(sencSubsampleCount[i])</tt> over the
new sample count. Consequently the receiver knows <tt>len(current)</tt> for
every list field before parsing the field's payload bytes.</t>
          <t>When <tt>len(current) ≠ len(previous)</tt> the delta rule extends as
follows:</t>
          <ul spacing="normal">
            <li>
              <t>For indices <tt>i</tt> in <tt>[0, min(len(current), len(previous)))</tt>: the
wire carries <tt>zigzag(current[i] − previous[i])</tt> and the receiver
reconstructs <tt>current[i] = previous[i] + delta[i]</tt>.</t>
            </li>
            <li>
              <t>For indices <tt>i</tt> in <tt>[len(previous), len(current))</tt> (current
longer than previous): the wire carries <tt>zigzag(current[i])</tt>,
i.e. the absolute value, equivalent to treating the missing
previous entry as 0. The receiver reconstructs
<tt>current[i] = delta[i]</tt>.</t>
            </li>
            <li>
              <t>For indices <tt>i</tt> in <tt>[len(current), len(previous))</tt> (current
shorter than previous): no bytes are emitted for these
positions. The receiver simply truncates to <tt>len(current)</tt>.</t>
            </li>
          </ul>
          <t>The deletion list <tt>deltaDeletedLocmafIDs</tt> (ID 27) is an
exception: it carries the set of field IDs deleted in <em>this</em>
chunk, encoded as plain unsigned varints (not zigzag, not deltas
against a "previous deletion list"). Its length is determined by
the field's byte-length prefix; the receiver reads unsigned
varints until the prefix is exhausted.</t>
        </section>
      </section>
      <section anchor="tfdtbasemediadecodetime-is-normally-derived">
        <name><tt>tfdtBaseMediaDecodeTime</tt> is normally derived</name>
        <t>The receiver derives the new BMDT as
<tt>previous_bmdt + sum(previous_sample_durations)</tt>. This is safe because
CMAF requires the decode timeline to be contiguous — each fragment's
<tt>baseMediaDecodeTime</tt> equals the previous fragment's plus the sum of
its sample durations (see <xref target="bmdt-contiguity"/>, which carries the
CMAF reference and its normative keyword). When the source BMDT
nevertheless diverges from this derivation (audio pre-roll, splicing,
stream re-anchor), the encoder <bcp14>MUST</bcp14> emit <tt>tfdtBaseMediaDecodeTime</tt>
(ID 10) in the delta chunk as an absolute unsigned varint (i.e.
the same encoding as in a full chunk, not a zigzag delta). The
receiver checks for the field first and uses its value when
present.</t>
      </section>
      <section anchor="deletions">
        <name>Deletions</name>
        <t>Delta encoding in LOCMAF is additive: a field absent from a
<tt>LocmafDeltaHeader</tt> is treated as unchanged from the previous
chunk. This compresses the common case (most moof fields stay
stable from chunk to chunk) but on its own gives an encoder no way
to signal that a field which was present in the previous chunk is
genuinely gone in the current one. The deletion marker provides
that signal.</t>
        <t>The motivating case is <tt>trunFirstSampleFlags</tt> (ID 12). A SAP-1
random-access chunk emits this field to flag its first sample as
a sync sample; the immediately following non-sync chunk must say
"this override no longer applies" so the receiver falls back to
<tt>trex.default_sample_flags</tt> for the first sample.</t>
        <t>The <tt>deltaDeletedLocmafIDs</tt> field (ID 27) carries a varint
list of field IDs that were present in the previous chunk but are
no longer present. The decoder applies deletions before applying
deltas. Example: when the first chunk of a group carried
<tt>trunFirstSampleFlags</tt> (a SAP-1 sync sample) and the second chunk
does not, the second chunk emits ID 27 with a one-element list
containing ID 12. The typical cost is two bytes — one
length-prefixed list with one field ID — versus the tens to
hundreds of bytes of re-anchoring.</t>
      </section>
      <section anchor="empty-delta">
        <name>Empty delta</name>
        <t>An empty delta payload (<tt>properties_length == 0</tt>) is valid and
means "no field changed since the previous chunk." This is the
steady-state case for sample-level fragmented streams. The
on-wire LOCMAF object reduces to <tt>LocmafDeltaHeader |
properties_length=0 | mdat</tt>, which is two bytes plus the mdat.</t>
      </section>
      <section anchor="prft-and-emsg-in-delta-chunks">
        <name><tt>prft</tt> and <tt>emsg</tt> in delta chunks</name>
        <t><tt>prft</tt> fields use the encoding above (scalar values become zigzag
deltas against the in-group reference). <tt>emsgList</tt> carries the
full new event list, with no delta encoding — see <xref target="emsg"/>.</t>
        <t><tt>stypBrandList</tt> (ID 23) <bcp14>MUST NOT</bcp14> appear in a <tt>LocmafDeltaHeader</tt>.</t>
      </section>
    </section>
    <section anchor="sample-flags">
      <name>Compact <tt>sample_flags</tt> Encoding</name>
      <t>ISO BMFF <tt>sample_flags</tt> (<xref target="ISOBMFF"/> §8.8.3.1) is a 32-bit bit-
packed field, but the bits that vary in CMAF content occupy only
five of the 32. LOCMAF encodes the five varying bits in a 5-bit
transport value to fit them in a single 6-bit-payload MOQT varint
(leaving room for the zigzag sign bit in delta context).</t>
      <section anchor="wire-encoding">
        <name>Wire encoding</name>
        <t>The 5-bit packed value (LSB first):</t>
        <table>
          <thead>
            <tr>
              <th align="left">bit</th>
              <th align="left">source field</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">0</td>
              <td align="left">
                <tt>sample_is_non_sync_sample</tt></td>
            </tr>
            <tr>
              <td align="left">1–2</td>
              <td align="left">
                <tt>sample_depends_on</tt></td>
            </tr>
            <tr>
              <td align="left">3–4</td>
              <td align="left">
                <tt>sample_is_depended_on</tt></td>
            </tr>
          </tbody>
        </table>
        <t><tt>trunSampleFlags</tt> (ID 7) carries this 5-bit value (range 0–31) per
sample. <tt>tfhdDefaultSampleFlags</tt> (ID 8) and <tt>trunFirstSampleFlags</tt>
(ID 12) carry the same 5-bit transport.</t>
        <t>In a full chunk the field is an unsigned varint scalar (or list).
In a delta chunk it is a signed zigzag varint (or list of zigzag
deltas).</t>
      </section>
      <section anchor="reconstruction">
        <name>Reconstruction</name>
        <t>The receiver expands the 5-bit transport into a 32-bit
<tt>sample_flags</tt>:</t>
        <artwork><![CDATA[
sample_flags = (is_depended_on << 22)
             | (depends_on     << 24)
             | (non_sync       << 16)
]]></artwork>
        <t><tt>is_leading</tt>, <tt>sample_has_redundancy</tt>, <tt>sample_padding_value</tt>, and
<tt>sample_degradation_priority</tt> are reconstructed as zero.</t>
      </section>
      <section anchor="encoder-constraint">
        <name>Encoder constraint</name>
        <t>The encoder <bcp14>MUST</bcp14> validate that the source's <tt>sample_flags</tt>
populates only the five bits listed above (see <xref target="scope"/>). Source
content that uses other bits <bcp14>MUST</bcp14> be carried via plain CMAF
packaging instead.</t>
      </section>
    </section>
    <section anchor="emsg">
      <name><tt>emsg</tt> Round-Trip</name>
      <t>The DASH event message box (<xref target="DASH"/> §5.10.3) carries application-
defined timed metadata. CMAF (§7.4.5) mandates version 1 emsg
boxes for in-band CMAF event messages.</t>
      <t>LOCMAF carries <tt>emsg</tt> as a length-prefixed list of records inside
the chunk header at field ID 25. Encoders <bcp14>MUST</bcp14> emit only v1
records.</t>
      <section anchor="relationship-to-msf-eventtimeline">
        <name>Relationship to MSF <tt>eventtimeline</tt></name>
        <t>New MOQT deployments <bcp14>SHOULD</bcp14> use a companion MSF <tt>eventtimeline</tt>
track <xref target="MSF"/> for event metadata rather than inline <tt>emsg</tt>. LOCMAF's
<tt>emsg</tt> support exists primarily to preserve inline events in
sources transcoded from DASH or CMAF Ingest <xref target="DASH-IF-INGEST"/>.</t>
      </section>
      <section anchor="record-format">
        <name>Record format</name>
        <t>Each record inside <tt>emsgList</tt> is a compact encoding of a v1 <tt>emsg</tt>
payload:</t>
        <artwork><![CDATA[
record = scheme_id_uri          (varint length + UTF-8 bytes)
       | value                  (varint length + UTF-8 bytes)
       | timescale              (varint; 0 = "use track mdhd.timescale")
       | presentation_time      (encoding depends on timescale; below)
       | event_duration         (varint, `timescale` ticks; 0 = unknown)
       | id                     (varint)
       | message_data           (varint length + opaque bytes)
]]></artwork>
        <t><tt>reference_track_id</tt> and <tt>version</tt> are implicit (the track this
chunk belongs to, and 1 respectively).</t>
        <section anchor="timescale-default">
          <name><tt>timescale</tt> default</name>
          <t><tt>timescale == 0</tt> means "use the track's <tt>mdhd.timescale</tt>." Receivers
write the track's <tt>mdhd.timescale</tt> into the reconstructed <tt>emsg.timescale</tt>
field when the record carried 0. Encoders <bcp14>MAY</bcp14> emit a non-zero
<tt>timescale</tt> only when the source's <tt>emsg.timescale</tt> actually
differs from the track timescale.</t>
        </section>
        <section anchor="presentationtime-encoding">
          <name><tt>presentation_time</tt> encoding</name>
          <t>The encoding of <tt>presentation_time</tt> depends on the record's
<tt>timescale</tt> field:</t>
          <ul spacing="normal">
            <li>
              <t><strong><tt>timescale == 0</tt> (track-timescale, delta encoding):</strong> the field
is encoded as a signed zigzag varint delta against the chunk's
BMDT (in track-timescale ticks). The reconstructed value is
<tt>chunk_bmdt + delta</tt>.</t>
            </li>
            <li>
              <t><strong><tt>timescale != 0</tt> (foreign-timescale, absolute encoding):</strong> the
field is encoded as an unsigned varint carrying the absolute
<tt>emsg.presentation_time</tt> directly. No delta is applied because
the BMDT and the event time would live on different axes.</t>
            </li>
          </ul>
          <t>The receiver discriminates by inspecting the record's <tt>timescale</tt>
field, which is encoded earlier in the record.</t>
        </section>
      </section>
    </section>
    <section anchor="drm">
      <name>DRM Box Round-Trip</name>
      <t>LOCMAF preserves the per-sample CENC <xref target="CENC"/> metadata needed for
EME-based decryption.</t>
      <section anchor="supported-schemes">
        <name>Supported schemes</name>
        <t>LOCMAF v0.2 supports the following CENC <xref target="CENC"/> protection schemes,
identified by the <tt>tenc.default_isProtected = 1</tt> track defaults and
the four-character <tt>scheme_type</tt> in the surrounding <tt>schm</tt> box:</t>
        <ul spacing="normal">
          <li>
            <t><tt>cenc</tt>: AES-128-CTR full-sample encryption. Per-sample
initialization vectors are big-endian counters advanced by the
per-sample encrypted-byte total (<xref target="CENC"/>, §10.1); LOCMAF carries
these IVs via <tt>sencInitializationVector</tt> and permits omission
under the counter rule of <xref target="cenc-iv"/>.</t>
          </li>
          <li>
            <t><tt>cbcs</tt>: AES-128-CBC subsample pattern encryption with a constant
initialization vector taken from <tt>tenc.default_constant_iv</tt>
(<xref target="CENC"/>, §10.4); no per-sample IV appears in <tt>senc</tt>, and the
pattern (<tt>default_crypt_byte_block</tt> / <tt>default_skip_byte_block</tt>)
is carried verbatim with the CMAF Header.</t>
          </li>
        </ul>
        <t>The <tt>cbc1</tt> and <tt>cens</tt> schemes are out of scope; sources using them
<bcp14>MUST</bcp14> fall back to plain CMAF packaging.</t>
      </section>
      <section anchor="supported-boxes">
        <name>Supported boxes</name>
        <table>
          <thead>
            <tr>
              <th align="left">Box</th>
              <th align="left">Where in CMAF</th>
              <th align="left">LOCMAF treatment</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>senc</tt></td>
              <td align="left">inside <tt>traf</tt></td>
              <td align="left">per-sample IVs and subsample maps carried via moof field IDs 9, 11, 13, 15, 16.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>saio</tt></td>
              <td align="left">inside <tt>traf</tt></td>
              <td align="left">not carried on the wire; recomputed by the receiver to point at the reconstructed <tt>senc</tt>.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>saiz</tt></td>
              <td align="left">inside <tt>traf</tt></td>
              <td align="left">not carried on the wire; reconstructed from per-sample IV size and subsample counts.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>tenc</tt></td>
              <td align="left">inside <tt>sinf</tt> in <tt>moov</tt></td>
              <td align="left">carried verbatim inside the CMAF Header.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="unsupported-boxes">
        <name>Unsupported boxes</name>
        <t>The following CMAF DRM boxes are not supported by LOCMAF v0.2.
Sources that require them <bcp14>MUST</bcp14> use plain CMAF packaging instead:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Box</th>
              <th align="left">Reason for exclusion</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>sgpd</tt>/<tt>sbgp</tt></td>
              <td align="left">Mid-fragment key rotation via <tt>seig</tt> sample groups is out of scope; KID changes <bcp14>MUST</bcp14> align with fragment boundaries (see <xref target="scope"/>).</td>
            </tr>
            <tr>
              <td align="left">
                <tt>pssh</tt> (per-fragment)</td>
              <td align="left">License-acquisition information is signalled via the CMSF <tt>contentProtections</tt> mechanism, per <xref target="CMAF"/> §7.4.3.</td>
            </tr>
            <tr>
              <td align="left">
                <tt>subs</tt></td>
              <td align="left">Sub-sample information for image subtitle profiles (e.g. <tt>im1i</tt>) is out of scope.</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="cenc-iv">
        <name>CENC IV counter prediction (optional)</name>
        <t>For the <tt>cenc</tt> scheme, ISO/IEC 23001-7 §9.6 specifies
that the per-sample initialization vector is a big-endian counter
advanced sample-by-sample by exactly
<tt>ceil(total_encrypted_bytes_in_sample / 16)</tt> AES blocks. Both
endpoints already see the per-sample encrypted-byte totals
(<tt>sencBytesOfProtectedData</tt>) and the IV anchor (carried on the
first full chunk of the track), so the receiver can derive every
subsequent per-sample IV deterministically.</t>
        <t>LOCMAF v0.2 permits encoders to omit <tt>sencInitializationVector</tt> (ID
9) when the source follows this counter rule, and requires
receivers to support derivation:</t>
        <ul spacing="normal">
          <li>
            <t>An encoder <bcp14>MAY</bcp14> omit <tt>sencInitializationVector</tt> on full and delta
chunks when every per-sample IV in the chunk matches the value
derived by the CENC counter rule from the previous chunk's IVs
and <tt>sencBytesOfProtectedData</tt> totals.</t>
          </li>
          <li>
            <t>A receiver <bcp14>MUST</bcp14> be able to derive per-sample IVs from the counter
rule. When <tt>sencInitializationVector</tt> is absent and the scheme is
<tt>cenc</tt>, the receiver advances the running IV counter and uses the
derived value.</t>
          </li>
          <li>
            <t>When the source diverges from the counter rule (random IVs,
mid-track counter restart, or any non-conformant strategy), the
encoder <bcp14>MUST</bcp14> emit <tt>sencInitializationVector</tt> absolutely on every
affected sample.</t>
          </li>
        </ul>
        <t>The <tt>cbcs</tt> scheme uses a constant IV from <tt>tenc.default_constant_iv</tt>
carried once via the CMAF Header. There is no per-sample IV in the
moof in the first place, so counter prediction does not apply to
<tt>cbcs</tt>.</t>
      </section>
    </section>
    <section anchor="event-only">
      <name>Event-Only Tracks and CMAF Ingest Compatibility</name>
      <t>DASH-IF Ingest <xref target="DASH-IF-INGEST"/> defines a CMAF-based push
interface for live encoders. One of its track shapes is the sparse
event-only track: a CMAF track that carries no media samples (or
samples of zero size) and exists purely to deliver timed events
via <tt>emsg</tt> boxes attached to its chunks.</t>
      <t>LOCMAF supports event-only tracks without any wire-format
extension. A <tt>LocmafFullHeader</tt> for an event-only group sets
<tt>trunSampleCount = 0</tt>, carries <tt>tfdtBaseMediaDecodeTime</tt> and
<tt>emsgList</tt>, and is followed by an empty <tt>mdat</tt> payload. Subsequent
chunks in the same group use <tt>LocmafDeltaHeader</tt> with the
absolute-BMDT override pattern (see <xref target="delta-chunk"/>) because the
zero sample-count produces no derivation increment.</t>
      <t>Two encoder strategies are valid:</t>
      <ol spacing="normal" type="1"><li>
          <t><strong>Absolute BMDT per chunk.</strong> The delta chunk emits
<tt>tfdtBaseMediaDecodeTime</tt> explicitly. Costs an extra varint per
chunk; recommended for sparse event-only tracks.</t>
        </li>
        <li>
          <t><strong>Synthetic per-chunk sample.</strong> The encoder sets
<tt>sample_count = 1</tt> with a <tt>default_sample_duration</tt> equal to
the intended per-chunk advancement and a zero-size sample. BMDT
derivation works without override. Matches how DASH-IF Ingest
commonly shapes sparse metadata tracks (<tt>urim</tt>, <tt>stpp</tt>).</t>
        </li>
      </ol>
      <t>For new MOQT deployments, MSF <tt>eventtimeline</tt> <xref target="MSF"/> is the
preferred mechanism for event metadata. LOCMAF event-only tracks
are intended for gateways that transit-relay CMAF Ingest content
unchanged across MOQT.</t>
    </section>
    <section anchor="receiver-reconstruction">
      <name>Receiver Reconstruction</name>
      <t>A receiver maintains, per subscribed track:</t>
      <ol spacing="normal" type="1"><li>
          <t>The track's CMAF Header (from the catalog), parsed for the
single <tt>trak</tt>'s <tt>track_ID</tt>, <tt>trex</tt> defaults, <tt>tenc</tt> defaults, and
<tt>mdhd.timescale</tt>.</t>
        </li>
        <li>
          <t>An in-group "previous chunk" state, populated from the most
recent <tt>LocmafFullHeader</tt> and updated by each subsequent
<tt>LocmafDeltaHeader</tt>. Discarded on group boundaries and on
mid-group <tt>LocmafFullHeader</tt> re-anchors (see <xref target="dispatch"/>).</t>
        </li>
      </ol>
      <t>For each LOCMAF object, the receiver:</t>
      <ol spacing="normal" type="1"><li>
          <t>Reads <tt>header_id</tt> and dispatches per <xref target="dispatch"/>.</t>
        </li>
        <li>
          <t>Reads <tt>properties_length</tt> and the property block.</t>
        </li>
        <li>
          <t>Decodes property tuples per the parity rule and the per-field
rules above.</t>
        </li>
        <li>
          <t>Applies the decoded fields to the previous-chunk state to
produce the absolute field values for the current chunk.</t>
        </li>
        <li>
          <t>Reconstructs the CMAF chunk:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Synthesises a <tt>styp</tt> box from <tt>stypBrandList</tt> when present;
omits it otherwise.</t>
            </li>
            <li>
              <t>Synthesises a <tt>prft</tt> box from any <tt>prft</tt> fields present;
omits it when no <tt>prft</tt> field is present.</t>
            </li>
            <li>
              <t>Synthesises one or more v1 <tt>emsg</tt> boxes from <tt>emsgList</tt> when
present; omits them otherwise.</t>
            </li>
            <li>
              <t>Synthesises the <tt>moof</tt> box (<tt>mfhd</tt>, <tt>traf</tt> with <tt>tfhd</tt>,
<tt>tfdt</tt>, <tt>trun</tt>, optionally <tt>senc</tt>/<tt>saio</tt>/<tt>saiz</tt>) from the
moof fields and the CMAF Header's <tt>trex</tt> / <tt>tenc</tt> defaults.
The LOCMAF wire format carries neither the <tt>track_ID</tt> nor the
<tt>tfhd</tt> flags, so the receiver supplies them from the init and
from the CMAF rules:
              </t>
              <ul spacing="normal">
                <li>
                  <t>The synthesised <tt>tfhd.track_ID</tt> <bcp14>MUST</bcp14> be set to the <tt>track_ID</tt>
of the single <tt>trak</tt> in the CMAF Header's <tt>moov</tt> (item 1).</t>
                </li>
                <li>
                  <t>The synthesised <tt>tfhd</tt> <bcp14>MUST</bcp14> set the <tt>default-base-is-moof</tt>
flag (<tt>tf_flags</tt> <tt>0x020000</tt>) and <bcp14>MUST NOT</bcp14> set
<tt>base-data-offset-present</tt>, as required by <xref target="CMAF"/>; sample
data offsets are therefore relative to the start of the
containing <tt>moof</tt> (<xref target="ISOBMFF"/>).</t>
                </li>
              </ul>
            </li>
            <li>
              <t>Wraps the mdat payload bytes in an 8-byte <tt>mdat</tt> box header.</t>
            </li>
          </ol>
        </li>
        <li>
          <t>Feeds the reconstructed chunk to the local CMAF reader / MSE
pipeline.</t>
        </li>
      </ol>
      <t>The reconstructed CMAF chunk is <strong>functionally equivalent</strong> to the
source chunk: every sample has the same size, decode time,
presentation time, flags, and CENC metadata, and the chunk feeds an
MSE / EME pipeline identically to the source. Byte-level identity
with the source <tt>moof</tt> is not preserved. Implementations <bcp14>MAY</bcp14> differ
in:</t>
      <ul spacing="normal">
        <li>
          <t>The exact ordering of <tt>saio</tt> / <tt>saiz</tt> / <tt>senc</tt> and other generated
boxes inside the reconstructed <tt>traf</tt>, provided the ordering is
legal CMAF.</t>
        </li>
        <li>
          <t>The <tt>trun.tr_flags</tt> packing chosen on reconstruction.</t>
        </li>
        <li>
          <t>Whether <tt>tfhd</tt> defaults that match <tt>trex</tt> appear in the
reconstructed <tt>tfhd</tt> (they <bcp14>SHOULD</bcp14> when the encoder ran in strict
<tt>cmf2</tt> mode; they <bcp14>MAY</bcp14> otherwise).</t>
        </li>
      </ul>
      <t>A receiver <bcp14>MUST NOT</bcp14> depend on byte-level identity with the source
CMAF stream. A downstream consumer that needs a specific CMAF
byte layout <bcp14>MUST</bcp14> repackage the output of the LOCMAF receiver to
produce the desired form.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>LOCMAF is a compression layer over CMAF media and does not
introduce new authentication or confidentiality mechanisms. It is
intended to be used over MOQT <xref target="MOQT"/>, which inherits QUIC's
transport security. Per-sample encryption metadata defined by
<xref target="CENC"/> is preserved through the LOCMAF round-trip; LOCMAF
neither weakens nor strengthens the underlying DRM scheme.</t>
      <t>A receiver <bcp14>MUST</bcp14> validate that reconstructed <tt>moof</tt>, <tt>prft</tt>, and
<tt>emsg</tt> boxes are well-formed before passing them to a media
pipeline. Malformed deltas could otherwise be used to construct
ISO BMFF <xref target="ISOBMFF"/> boxes with inconsistent field lengths.
Specifically:</t>
      <ul spacing="normal">
        <li>
          <t>The receiver <bcp14>MUST</bcp14> bound the size of any reconstructed per-sample
list against <tt>trunSampleCount</tt>.</t>
        </li>
        <li>
          <t>The receiver <bcp14>MUST</bcp14> verify that the sum of reconstructed
<tt>sencBytesOfClearData</tt> and <tt>sencBytesOfProtectedData</tt> for each
sample equals the sample's size.</t>
        </li>
        <li>
          <t>The receiver <bcp14>MUST</bcp14> verify that the CENC-IV counter, if derived,
does not advance past the per-sample-IV-size range.</t>
        </li>
      </ul>
      <t>The CENC IV counter-prediction optimisation (<xref target="cenc-iv"/>) does not
disclose key material and produces the same IV stream a conformant
encoder would have transmitted; it does not weaken CENC.</t>
      <t>Replay considerations within a MOQT group are inherited from MOQT —
LOCMAF adds no new replay attack surface.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document does not register the <tt>"locmaf"</tt> packaging value or
the <tt>locmafVersion</tt> catalog field with IANA (see
<xref target="packaging-and-version"/>); it does request a registry for the
LOCMAF top-level header IDs (see <xref target="header-id-registry"/>).</t>
      <section anchor="packaging-and-version">
        <name>Catalog packaging value and <tt>locmafVersion</tt></name>
        <t>Following the precedent of <xref target="CMSF"/> — whose IANA Considerations
record no IANA actions for its <tt>"cmaf"</tt> packaging value or its
added catalog fields — this document registers neither of the
following with IANA:</t>
        <ul spacing="normal">
          <li>
            <t><tt>packaging: "locmaf"</tt> extends the <xref target="MSF"/> packaging-values table
(see <xref target="catalog"/>). <xref target="MSF"/> defines no IANA registry for packaging
values; new values are introduced by the documents that define
them.</t>
          </li>
          <li>
            <t><tt>locmafVersion</tt> is a track-level catalog field defined by this
document (see <xref target="catalog"/>). <xref target="MSF"/> permits documents and
producers to define additional catalog fields and maintains no
IANA registry of them.</t>
          </li>
        </ul>
        <t>The set of valid <tt>locmafVersion</tt> values — <tt>"0.2"</tt> for this
document — is governed by this specification and its successors; no
IANA action is required. Should a future <xref target="MSF"/> revision introduce
an IANA packaging-value registry, the <tt>"locmaf"</tt> value <bcp14>SHOULD</bcp14> be
registered there, while <tt>locmafVersion</tt> and its values remain
document-governed.</t>
      </section>
      <section anchor="header-id-registry">
        <name>LOCMAF Top-Level Header IDs</name>
        <t>This document defines a new registry for LOCMAF top-level header
IDs.</t>
        <table>
          <thead>
            <tr>
              <th align="left">ID</th>
              <th align="left">Symbol</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">23</td>
              <td align="left">
                <tt>LocmafFullHeader</tt></td>
              <td align="left">this document</td>
            </tr>
            <tr>
              <td align="left">25</td>
              <td align="left">
                <tt>LocmafDeltaHeader</tt></td>
              <td align="left">this document</td>
            </tr>
          </tbody>
        </table>
        <t>All other IDs in the unsigned varint range are available for
assignment via Specification Required (<xref target="RFC8126"/>).</t>
        <t>LOCMAF property field IDs are part of this document's wire format
and are not registered with IANA. New field IDs are introduced
through revisions of this specification, signalled by a bump of
the <tt>locmafVersion</tt> catalog value (see <xref target="catalog"/>). The full
field-ID assignment for this version is given in <xref target="field-ref"/>.</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="MOQT">
          <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="12" month="May" 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-18"/>
        </reference>
        <reference anchor="CMSF">
          <front>
            <title>CMSF- a CMAF compliant implementation of MOQT Streaming Format</title>
            <author fullname="Will Law" initials="W." surname="Law">
              <organization>Akamai</organization>
            </author>
            <date day="1" month="December" year="2025"/>
            <abstract>
              <t>   This document updates [MSF] by defining a new optional feature for
   the streaming format.  It specifies the syntax and semantics for
   adding CMAF-packaged media [CMAF] to MSF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-cmsf-00"/>
        </reference>
        <reference anchor="MSF">
          <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="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CMAF">
          <front>
            <title>Information technology — Multimedia application format (MPEG-A) — Part 19: Common media application format (CMAF) for segmented media</title>
            <author>
              <organization/>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="ISO/IEC" value="23000-19:2024"/>
        </reference>
        <reference anchor="ISOBMFF">
          <front>
            <title>Information technology — Coding of audio-visual objects — Part 12: ISO base media file format</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="ISO/IEC" value="14496-12:2026"/>
        </reference>
        <reference anchor="CENC">
          <front>
            <title>Information technology — MPEG systems technologies — Part 7: Common encryption in ISO base media file format files</title>
            <author>
              <organization/>
            </author>
            <date year="2023"/>
          </front>
          <seriesInfo name="ISO/IEC" value="23001-7:2023"/>
        </reference>
        <reference anchor="DASH">
          <front>
            <title>Information technology — Dynamic adaptive streaming over HTTP (DASH) — Part 1: Media presentation description and segment formats</title>
            <author>
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="ISO/IEC" value="23009-1:2026"/>
        </reference>
        <reference anchor="LOC">
          <front>
            <title>Low Overhead Media Container</title>
            <author fullname="Mo Zanaty" initials="M." surname="Zanaty">
              <organization>Cisco</organization>
            </author>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Peter Thatcher" initials="P." surname="Thatcher">
              <organization>Microsoft</organization>
            </author>
            <date day="15" month="March" year="2026"/>
            <abstract>
              <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-moq-loc-02"/>
        </reference>
        <reference anchor="COMPRESSED-MP4">
          <front>
            <title>Compressed MP4</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
         </author>
            <date day="16" month="March" year="2026"/>
            <abstract>
              <t>   Fragmented MP4 (fMP4) is widely used for live streaming, but the ISO
   Base Media File Format (ISOBMFF) box structure imposes significant
   per-fragment overhead.  Each box header requires 8 bytes (4-byte size
   + 4-byte type), and payload fields use fixed-width integers (u32/
   u64).  For low-latency streaming with single-frame fragments, this
   overhead can exceed the media payload itself.

   This document defines a compression scheme for ISO BMFF that replaces
   box headers with compact varint-encoded identifiers and sizes, and
   defines compressed variants of commonly used boxes with varint
   payload fields.  The scheme reduces per-fragment overhead from ~100
   bytes to ~20 bytes while preserving the full box hierarchy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lcurley-compressed-mp4-00"/>
        </reference>
        <reference anchor="DASH-IF-INGEST" target="https://dashif.org/Ingest/">
          <front>
            <title>DASH-IF Live Media Ingest Protocol</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="MOQLIVEMOCK" target="https://github.com/Eyevinn/moqlivemock">
          <front>
            <title>moqlivemock — Reference LOCMAF server and tooling</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="LOCMAF-SITE" target="https://locmaf.dev">
          <front>
            <title>LOCMAF — Low Overhead CMAF for MoQ</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
      </references>
    </references>
    <?line 1329?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The initial version of LOCMAF was developed as part of the Master
Thesis work of Hugo Björs at Eyevinn Technology, supervised by
Torbjörn Einarsson.
The authors thank the Media over QUIC working group, in particular
the authors and contributors to <xref target="MOQT"/> and <xref target="CMSF"/>, for the prior
art this work builds on.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA8V963IbSXbm/3yKNBWxDbABiKQu3U1Nj01R1DRjWpcROe3Y
nfAKRaBA1giogqsKpNiSJvxrY/fvrh/A+2f9Bn4A75vMk+z5ziUrqwBQmvF4
zZkOkUBVXk6ePPfLcDh0dVbP00O/82Nx419dp+VVmkz98Yuj535WlP5FOs0S
X9Dn/je/PT32vR9f4bv+jksuLsr0Gi/yJztuWkzyZEFDTctkVg/TLE/Kqiry
4aL4++G8mCyS2XBvz02SOr0syttDn+WzwlWri0VWVVmR17dLevn05Py5y1eL
i7Q8dFN69tDRJA9cUqbJoT96c+5uivLdZVmsljS3LO+VLW/HvUtv6fvpofND
T/PiH0yMf+fZdeqrmsZZZPklf0JbntMU+eTWues0X9Fk3m8d23tZ4s7f0gpo
CP8rPInPF0k2p89pwr/J0no2KspLfJyUkyv6+Kqul9Xh/ft4Ch/ROkb22H18
cP+iLG6q9D69fx/vXWb11eqC3jy5Ta+zPL+v0Mum+BYrrupoXH1qJK+NsqJ5
/v72sxhd1Yv5jnPJqr4qSgCMxvZ+tprP5RjPi/Li9//3X8rcn9jr/AStOsmz
n5OazuzQ6+T+PJ1c5cW8uLzlh1IBSY0xijIfhRX8TaqrrdL1KX9YXRb+KSat
Nkz16/Mf4rGv6GEaPC2rv7nEJ6NJsXAuL8oFPX/NR/ni1W/OCaWGzxjevPm6
TPJqWZQ1fX384ux55+vJoprhxbUv8LkDxkbDA+8PeUl2iU7tgSL3dYCI/+M/
/KN/sZrX2YJxKlku59lEnpLnfe/F65NfDY/6/OjrpKz9/neH/rhYLOiZ7W/x
XeSLWqWXizSv06k8vcPLqtIySyusWpbp/enZq/unJ8eH/uDB3t7ekCY52Dt4
yF/yZfP6Jz339MXzL9/dcTHFjShmPllNs2J4nVWrZO7pgNJJXUW7OjjE2P4i
qVLd1yybp7qhz656/+HD7x4PaRBa5uP2qvHn8cnL4y8/EIK4r26rOl1UzXc0
c7Pab8IREI0ob5c8TJbfsQP+vfoi6O8Pv8E2HrS3gT+fHZ398MXbeHZLdyeb
+GSaLOsWiROy/cP5+Wvfw5Axch0qZV+WaUVoIyNP02pSZrLLJJ8aTunWvmxX
3w33txwO8YnOnSJChEN79eL1m5Ozs5NnwxevH8oj88mqnKe3Q7rSWGGVToeL
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
8/YuVpk0Px+5/weh+de4quMAAA==

-->

</rfc>
