<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.43 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-frindell-moq-timestamp-01" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.1 -->
  <front>
    <title abbrev="moq-timestamp">Timestamp Properties for MOQT</title>
    <seriesInfo name="Internet-Draft" value="draft-frindell-moq-timestamp-01"/>
    <author initials="A." surname="Frindell" fullname="Alan Frindell">
      <organization>Meta</organization>
      <address>
        <email>afrind@meta.com</email>
      </address>
    </author>
    <author initials="I." surname="Swett" fullname="Ian Swett">
      <organization>Google</organization>
      <address>
        <email>ianswett@google.com</email>
      </address>
    </author>
    <date year="2026" month="November" day="02"/>
    <area>Web and Internet Transport</area>
    <workgroup>Media Over QUIC</workgroup>
    <keyword>media over quic</keyword>
    <keyword>timestamp</keyword>
    <abstract>
      <?line 46?>

<t>This document defines a set of MOQT Properties for carrying per-Object
timestamps efficiently. The encoded timestamp is intended for use in MOQT,
but can be referenced for application specific purposes.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://afrind.github.io/draft-frindell-moq-timestamp/draft-frindell-moq-timestamp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-frindell-moq-timestamp/"/>.
      </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/afrind/draft-frindell-moq-timestamp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Media over QUIC Transport (MOQT) <xref target="MOQT"/> delivers Tracks that contain a
sequence of Objects. Though the transport layer does not need to know
media-oriented or application level timestamps, timing information can
help it make optimal scheduling decisions.  Additionally, they provide
visibility into latency and offer a Property applications can extend.</t>
      <t>This document defines how a MOQT timestamp is encoded.
The design has three features:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Initial time</strong>: A Track declares its start time once, so Objects can delta
encode their timestamps from the Initial time.</t>
        </li>
        <li>
          <t><strong>Default Inter-Group/Object timing</strong>: A Track can define a mapping from Group ID
and Object ID to a timestamp, conveying timing with no per-Object bytes at all.</t>
        </li>
        <li>
          <t><strong>Compact encoding</strong>: Per-Object timestamps are integers, expressing
either a delta value from the initial time or a correction to the default value.</t>
        </li>
      </ul>
      <section anchor="related">
        <name>Relationship to Other Specifications</name>
        <t>Several specifications already carry timing for MOQT Objects.  The Low Overhead
Media Container <xref target="LOC"/> defines Timestamp and Timescale Properties for media
carried in LOC.  <xref target="TIMESTAMP-LCURLEY"/> specifies transport-level use of those
same LOC Properties so that Relays can make age-based decisions.  The MOQT
Streaming Format <xref target="MSF"/> relates media time, wall-clock time, and Location
through catalog fields and timeline tracks, including a template for regular
cadences, and numbers Groups by capture time in its log and metrics tracks.
<xref target="TEMPO"/> stamps each Object with its playout time and send time, which Relays
update as they forward, to synchronize playout across subscribers.</t>
        <t>This document aims to provide a single, general representation that these and
other specifications can reference.</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>This document uses the terms Track, Object, Group, and Subgroup as defined in
<xref target="MOQT"/>.  A "tick" is one unit of the Track's Timescale (see <xref target="timescale"/>).</t>
      <t>All Property values in this document are encoded as variable-length integers
(<xref target="MOQT"/>, introduced in draft-ietf-moq-transport-17) unless otherwise noted.
The integers in TIMESTAMP_MAPPING are not re-encoded when it is carried over a
draft-16 or earlier session.</t>
      <section anchor="zig-zag">
        <name>Signed Integer Zig-Zag Encoding</name>
        <t>Signed values, such as the timestamp correction (<xref target="object-timestamp"/>), are
carried in a variable-length integer using a zig-zag mapping that keeps
small-magnitude values short: non-negative and negative values are interleaved
so that the encoded value grows with the magnitude, in the order 0, -1, 1, -2,
2, ...</t>
        <t>To encode a signed value v as the variable-length integer u, and to decode it
back (both using an arithmetic, sign-extending right shift):</t>
        <artwork><![CDATA[
  u = (v << 1) ^ (v >> (WIDTH - 1))     ; encode
  v = (u >> 1) ^ -(u & 1)               ; decode
]]></artwork>
        <t>WIDTH is the bit width of the two's-complement representation of v (for example,
64).  Values outside the range -2^63 to 2^63-1 cannot be represented.</t>
      </section>
    </section>
    <section anchor="property-handling">
      <name>Property Handling and Encoding</name>
      <t>The Properties defined in this document are serialized as Key-Value-Pairs
<xref target="MOQT"/>.</t>
      <t>Each Property defined here <bcp14>MUST</bcp14> appear at most once on a given Track or Object,
counting both the mutable list and Immutable Properties (<xref target="MOQT"/>), and <bcp14>MUST</bcp14>
appear only in its defined scope: OBJECT_TIMESTAMP <bcp14>MUST NOT</bcp14> appear as a Track
Property, and the Track Properties (TIMESCALE, CLOCK_ID, TIMESTAMP_ORIGIN,
TIMESTAMP_MAPPING) <bcp14>MUST NOT</bcp14> appear as Object Properties.  A subscriber that
receives a Track or Object that violates these rules treats the track as
malformed, as specified in <xref target="MOQT"/>.</t>
      <t>These Properties are set by the Original Publisher.  Relays <bcp14>MUST NOT</bcp14> add,
modify, or remove them.  A publisher <bcp14>MAY</bcp14> carry them in Immutable Properties
(<xref target="MOQT"/>), for example to enable end-to-end authentication of timing.</t>
      <t>Because the Properties defined here are interdependent, an endpoint that
interprets any of them <bcp14>MUST</bcp14> implement all of them.</t>
    </section>
    <section anchor="track-properties">
      <name>Track Properties</name>
      <t>A Track that uses the timestamps defined in this document declares a Timescale
(<xref target="timescale"/>) and, optionally, a Clock ID (<xref target="clock-id"/>) and Timestamp Origin
(<xref target="timestamp-origin"/>) that place its timeline on a clock.  All Object
timestamps in the Track are interpreted against this clock.</t>
      <section anchor="timescale">
        <name>Timescale</name>
        <t>TIMESCALE is a Track Property giving the number of ticks per second used by all
timestamps in the Track.  Common values are 1000 for millisecond resolution and
1000000 for microsecond resolution, but any positive value <bcp14>MAY</bcp14> be used (for
example, a media Track might use its codec sample rate).</t>
        <t>There is no default Timescale, to avoid silent unit errors such as confusing
milliseconds with microseconds.  A subscriber that receives a Track
with other Properties defined in this document but no TIMESCALE, or a TIMESCALE
value of 0, treats the Track as malformed.</t>
      </section>
      <section anchor="clock-id">
        <name>Clock ID</name>
        <t>CLOCK_ID is a Track Property identifying the clock on which the Track's timeline
is placed:</t>
        <ul spacing="normal">
          <li>
            <t>If no CLOCK_ID Property is specified, but other Properties in this extension
are, the time is measured from POSIX time (in TIMESCALE ticks
since 1970-01-01T00:00:00Z, excluding leap seconds).</t>
          </li>
          <li>
            <t>CLOCK_ID values from 0 to 63 are reserved for clocks listed in the "MOQ Clock
IDs" registry (<xref target="clock-id-registry"/>).  A receiver treats a reserved value it
does not recognize as a clock with no known relationship to wall-clock time.</t>
          </li>
          <li>
            <t>A CLOCK_ID of 1 identifies International Atomic Time (TAI), a continuous time
scale with no leap seconds, measured in TIMESCALE ticks since
1970-01-01T00:00:00 TAI.</t>
          </li>
          <li>
            <t>Any value above 63 identifies a clock with no defined relationship to
wall-clock time.  Tracks that carry the same CLOCK_ID share that clock, so
their timestamps can be compared -- for example, the audio and video Tracks of
an on-demand asset.</t>
          </li>
        </ul>
        <t>A CLOCK_ID value identifies the same clock wherever it appears, so values
chosen independently by different publishers can collide.  A publisher <bcp14>SHOULD</bcp14>
choose values from a large space (at least 62 bits) in a way that makes
accidental collisions negligible without coordination.  A value can be random,
or derived deterministically -- for example, by hashing a stable identifier for
the content -- so that separate encoders, or a publisher that restarts, use the
same value for the same clock.  A publisher <bcp14>MUST NOT</bcp14> use a reserved value for
any clock other than the one defined for it.</t>
      </section>
      <section anchor="timestamp-origin">
        <name>Timestamp Origin</name>
        <t>TIMESTAMP_ORIGIN is a Track Property giving the position, in ticks on the
Track's clock (<xref target="clock-id"/>), that corresponds to a timestamp of 0.  An Object's
time on that clock (in TIMESCALE ticks) is:</t>
        <artwork><![CDATA[
  clock_time = timestamp_origin + object_timestamp
]]></artwork>
        <t>Because each Track's origin and timestamps are counted in its own ticks, Tracks
with different Timescales are compared by converting clock_time to seconds.</t>
        <t>If TIMESTAMP_ORIGIN is absent, the default value is 0.</t>
      </section>
      <section anchor="timestamp-mapping">
        <name>Timestamp Mapping</name>
        <t>TIMESTAMP_MAPPING is a Track Property that defines how to compute an Object's
timestamp from its Group ID and Object ID, with no per-Object Property.
Drift can be expressed with a property on any Object (<xref target="object-timestamp"/>).</t>
        <t>The property value is four variable-length integers: a Base Group ID,
a Base Timestamp, a Group Multiplier, and an Object Multiplier.
A value that does not parse as exactly four variable-length integers is
malformed.  An Object's mapped timestamp is a linear function of its Group ID
and Object ID:</t>
        <artwork><![CDATA[
  mapped_timestamp = base_timestamp
                   + (group_id - base_group) * group_multiplier
                   + object_id * object_multiplier
]]></artwork>
        <t>The computation uses signed arithmetic, so it applies to every Group, including
Groups before the Base Group.  A negative mapped_timestamp is valid only if a
correction brings the Object's timestamp to a non-negative value.</t>
        <t>The publisher chooses the values from the meaning it gives its Group and Object
identifiers:</t>
        <ul spacing="normal">
          <li>
            <t>The <strong>Group Multiplier</strong> converts a Group ID into the Group's start time.  Set
it to 1 when Group IDs are themselves timestamps in ticks, so each Group is
placed directly by its ID; or to the number of ticks per Group when Group IDs
are sequential indices and Groups have a fixed duration.</t>
          </li>
          <li>
            <t>The <strong>Object Multiplier</strong> converts an Object ID into an offset within its
Group, giving the per-Object cadence, or 0 when every Object in a Group shares
the Group's time.</t>
          </li>
          <li>
            <t>The <strong>Base Group</strong> and <strong>Base Timestamp</strong> anchor the mapping, so that a
publisher whose Group IDs do not start at 0 -- for example, one that begins
numbering at a wall-clock value and increments by one -- can still use a fixed
Group Multiplier.  Both are 0 when Group 0 starts at timestamp 0.</t>
          </li>
        </ul>
        <t>A publisher can thus rely on the mapping for the regular majority of Objects and
spend per-Object bytes only where an Object's timestamp differs from the
schedule.</t>
      </section>
    </section>
    <section anchor="object-timestamp">
      <name>Object Timestamp</name>
      <t>OBJECT_TIMESTAMP is an Object Property that conveys the Object's timestamp, in
ticks of the Track's Timescale.  How its value is interpreted depends on whether
the Track has a Timestamp Mapping (<xref target="timestamp-mapping"/>):</t>
      <ul spacing="normal">
        <li>
          <t>On a Track without a Timestamp Mapping, the value is the Object's timestamp,
encoded as an unsigned variable-length integer.  An Object that does not carry
OBJECT_TIMESTAMP has no timestamp.</t>
        </li>
        <li>
          <t>On a Track with a Timestamp Mapping, the value is a signed correction to the
Object's mapped timestamp, encoded using the zig-zag mapping in
<xref target="zig-zag"/>.  An Object that does not carry OBJECT_TIMESTAMP takes its mapped
timestamp:  </t>
          <artwork><![CDATA[
  object_timestamp = mapped_timestamp + correction
]]></artwork>
        </li>
      </ul>
      <t>A receiver interprets an Object's timestamp using the Track Properties received
with the message that associates the Object with its Track, so it always knows
which rule applies.</t>
      <t>The timestamp of an Object is computed only from Track Properties and
properties on the Object itself, and not any other Object.  This allows for
correct computation even when Objects are filtered or arrive out of order.</t>
      <t>If a subscriber computes an Object's timestamp that is less than 0 or greater
than 2^64-1, it treats the Track as malformed.</t>
    </section>
    <section anchor="time-to-location">
      <name>Locating Objects by Time</name>
      <t>When a Track has a Timestamp Mapping with a non-zero Group Multiplier, a
receiver can estimate the Location of the Object with a given timestamp t
without receiving any Object:</t>
      <artwork><![CDATA[
  group_id  = base_group
            + floor((t - base_timestamp) / group_multiplier)
  object_id = floor((t - base_timestamp
                     - (group_id - base_group) * group_multiplier)
                    / object_multiplier)
]]></artwork>
      <t>If the Object Multiplier is 0, only the Group is estimated.  For a time c on the
Track's clock (<xref target="clock-id"/>), t is c - timestamp_origin.</t>
      <t>The result is an estimate: it does not indicate whether the Location exists, and
Objects that carry a correction might not be close to the estimate.</t>
    </section>
    <section anchor="restarts">
      <name>Publisher Restarts</name>
      <t>Because Track Properties cannot change, a publisher that restarts and resumes
publishing the same Track cannot revise its origin or re-anchor its mapping; it
<bcp14>MUST</bcp14> reuse already established Track Properties.  A publisher that might
restart <bcp14>SHOULD</bcp14> choose Properties that remain valid and compress well across a
restart.</t>
    </section>
    <section anchor="additional-timestamps">
      <name>Defining Additional Timestamps</name>
      <t>Some applications might require more than one timestamp per Object.  Such
applications can use the properties in this document to convey transport
relevant timestamps, and define additional timestamps properties as an offset.</t>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document registers the following entries in the "MOQ Properties" registry
established by <xref target="MOQT"/>, and establishes the "MOQ Clock IDs" registry
(<xref target="clock-id-registry"/>).  The code points below are provisional values for
interoperability testing; final values are to be assigned by IANA.  The Object
Property uses a short (two-byte) code point because it is sent per Object.</t>
      <section anchor="timescale-property">
        <name>TIMESCALE Property</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x2C7A51E0</td>
              <td align="left">TIMESCALE</td>
              <td align="left">Track</td>
              <td align="left">This document, <xref target="timescale"/></td>
            </tr>
          </tbody>
        </table>
        <t>The value is a variable-length integer giving ticks per second.</t>
      </section>
      <section anchor="clockid-property">
        <name>CLOCK_ID Property</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x3E8D2B70</td>
              <td align="left">CLOCK_ID</td>
              <td align="left">Track</td>
              <td align="left">This document, <xref target="clock-id"/></td>
            </tr>
          </tbody>
        </table>
        <t>The value is a variable-length integer identifying the Track's clock: 1
identifies TAI, other values from 0 to 63 are reserved for clocks listed in the
"MOQ Clock IDs" registry (<xref target="clock-id-registry"/>), and values above 63 identify
shared clocks with no defined relationship to wall-clock time.  A Track without
CLOCK_ID uses POSIX time.</t>
      </section>
      <section anchor="timestamporigin-property">
        <name>TIMESTAMP_ORIGIN Property</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x31B49A6E</td>
              <td align="left">TIMESTAMP_ORIGIN</td>
              <td align="left">Track</td>
              <td align="left">This document, <xref target="timestamp-origin"/></td>
            </tr>
          </tbody>
        </table>
        <t>The value is a variable-length integer giving the position, in ticks on the
Track's clock, that corresponds to a timestamp of 0.</t>
      </section>
      <section anchor="timestampmapping-property">
        <name>TIMESTAMP_MAPPING Property</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x27F308C5</td>
              <td align="left">TIMESTAMP_MAPPING</td>
              <td align="left">Track</td>
              <td align="left">This document, <xref target="timestamp-mapping"/></td>
            </tr>
          </tbody>
        </table>
        <t>The value is four variable-length integers: a Base Group, and a Base Timestamp,
Group Multiplier, and Object Multiplier, each in ticks.</t>
      </section>
      <section anchor="objecttimestamp-property">
        <name>OBJECT_TIMESTAMP Property</name>
        <table>
          <thead>
            <tr>
              <th align="right">Type</th>
              <th align="left">Name</th>
              <th align="left">Scope</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0x2D1A</td>
              <td align="left">OBJECT_TIMESTAMP</td>
              <td align="left">Object</td>
              <td align="left">This document, <xref target="object-timestamp"/></td>
            </tr>
          </tbody>
        </table>
        <t>The value is a variable-length integer giving the Object's timestamp in ticks
or, on a Track with a Timestamp Mapping, a zig-zag encoded correction to the
Object's mapped timestamp.</t>
      </section>
      <section anchor="clock-id-registry">
        <name>MOQ Clock IDs Registry</name>
        <t>This document establishes the "MOQ Clock IDs" registry, which lists the reserved
CLOCK_ID values from 0 to 63 (<xref target="clock-id"/>).  Values above 63 are chosen by
publishers and are not registered.  New entries are assigned under the
Specification Required policy <xref target="RFC8126"/>.  Each entry has a Value, a Clock
name, and a Specification that defines the clock's time scale and epoch.</t>
        <t>The initial contents of the registry are:</t>
        <table>
          <thead>
            <tr>
              <th align="right">Value</th>
              <th align="left">Clock</th>
              <th align="left">Specification</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">0</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
            </tr>
            <tr>
              <td align="right">1</td>
              <td align="left">International Atomic Time (TAI)</td>
              <td align="left">This document, <xref target="clock-id"/></td>
            </tr>
            <tr>
              <td align="right">2-63</td>
              <td align="left">Unassigned</td>
              <td align="left"> </td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>Timestamps are supplied by the publisher and are not authenticated by the
transport.  An endpoint that acts on timestamps (for buffering, ordering, or
expiry) <bcp14>SHOULD</bcp14> treat them as hints and apply its own sanity checks, since a
misbehaving publisher can send misleading values.</t>
      <t>Timestamps and the Timestamp Origin can reveal information about the publisher's
clock and the temporal structure of its content.  Where this is sensitive, a
publisher <bcp14>MAY</bcp14> place its timeline on a shared clock (<xref target="clock-id"/>) rather than
POSIX time, use a coarser Timescale, or omit these Properties.  An end-to-end
encrypted payload can carry timing that is hidden from Relays, but when a
Timestamp Mapping is in use, Group IDs and Object IDs reveal timing regardless.
See <xref target="MOQT"/> for general considerations on logging untrusted Property values.</t>
    </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="1" month="October" 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-22"/>
        </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="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="20" month="July" 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-04"/>
        </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="TIMESTAMP-LCURLEY">
          <front>
            <title>MoQ Object Timestamp Extension</title>
            <author fullname="Luke Curley" initials="L." surname="Curley">
         </author>
            <date day="3" month="August" year="2026"/>
            <abstract>
              <t>   This document specifies the transport-level use of the TIMESTAMP and
   TIMESCALE properties registered by [loc], independent of the LOC
   container itself.  A track-level Timescale property establishes the
   units, and an object-level Timestamp property carries the
   presentation time of each object.  Exposing media time to the
   transport lets relays make consistent age-based decisions (e.g.
   dropping stale objects) without parsing the media container, and it
   remains consistent across hops regardless of buffering or jitter.  No
   new code points are requested: an endpoint implementing this document
   is on the wire indistinguishable from a LOC endpoint that carries
   only these two properties.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lcurley-moq-timestamp-01"/>
        </reference>
        <reference anchor="TEMPO">
          <front>
            <title>TEMPO: Timing Extension for Media Playout Orchestration over MoQ</title>
            <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
              <organization>Cisco</organization>
            </author>
            <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
              <organization>Cisco</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   This document defines TEMPO (Timing Extension for Media Playout
   Orchestration), a synchronized playout mechanism for media tracks
   delivered over the Media over QUIC Transport (MoQT) protocol.  The
   Original Publisher stamps each object with when it should be played
   out and when it was sent.  Relays replace the send-time stamp with
   their own clock as they forward, giving each subscriber a fresh
   timing reference from its nearest relay.  Subscribers use these
   timestamps to decide when to render each object, and report their
   sync state directly to a coordination server (PlaySyncServer) that
   can tell the media publisher to adjust timing when subscribers fall
   behind.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-nandakumar-moq-tempo-00"/>
        </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 417?>

<section anchor="examples">
      <name>Examples</name>
      <t>The following examples show how common timing arrangements, including those of
the specifications in <xref target="related"/>, are expressed with the Properties in this
document.</t>
      <section anchor="fixed-cadence">
        <name>Fixed Cadence</name>
        <t>A Track sends 30000/1001 Objects per second in Groups of 60 Objects, with
sequential Group IDs starting at 0, and the publisher knows the wall-clock time
W (in ticks since the Unix epoch) at which Group 0 starts:</t>
        <artwork><![CDATA[
  TIMESCALE         = 30000
  TIMESTAMP_ORIGIN  = W
  TIMESTAMP_MAPPING = (0, 0, 60060, 1001)
]]></artwork>
        <t>Objects on cadence carry no timestamp Property; an Object that deviates from the
cadence carries a small correction in OBJECT_TIMESTAMP.</t>
      </section>
      <section anchor="explicit-timestamps">
        <name>Explicit Timestamps</name>
        <t>A Track whose Objects each carry a wall-clock timestamp in microseconds, with
its origin at 2026-01-01T00:00:00Z:</t>
        <artwork><![CDATA[
  TIMESCALE         = 1000000
  TIMESTAMP_ORIGIN  = 1767225600000000
]]></artwork>
        <t>Each Object carries OBJECT_TIMESTAMP, counted in microseconds since the origin.
Omitting TIMESTAMP_ORIGIN instead gives microseconds since the Unix epoch, as
LOC does when no Timescale is present <xref target="LOC"/>, at the cost of larger values.</t>
      </section>
      <section anchor="group-ids-as-timestamps">
        <name>Group IDs as Timestamps</name>
        <t>A Track whose Group IDs are microseconds since the Unix epoch and whose Objects
share their Group's time, such as an MSF log track <xref target="MSF"/>:</t>
        <artwork><![CDATA[
  TIMESCALE         = 1000000
  TIMESTAMP_MAPPING = (0, 0, 1, 0)
]]></artwork>
        <t>Every Object's timestamp is its Group ID, with no per-Object bytes.</t>
      </section>
      <section anchor="timeline-template">
        <name>Timeline Template</name>
        <t>An MSF timeline template <xref target="MSF"/> with a start media time M, start Location (G,
0), Location delta (1, 0), and start wall-clock time W, in which the media time
and wall-clock deltas are both D, all in milliseconds, is expressed as:</t>
        <artwork><![CDATA[
  TIMESCALE         = 1000
  TIMESTAMP_ORIGIN  = W - M
  TIMESTAMP_MAPPING = (G, M, D, 0)
]]></artwork>
        <t>This requires a known wall-clock time with W at least M.  For on-demand content,
where MSF sets the wall-clock values to 0, the publisher instead uses a shared
Clock ID as in <xref target="shared-clock-example"/>.  The template describes only Group
start times; a publisher that also knows its per-Object cadence sets the Object
Multiplier accordingly.</t>
      </section>
      <section anchor="shared-clock-example">
        <name>Shared Clock Without Wall-Clock Time</name>
        <t>The audio and video Tracks of an on-demand asset have no meaningful wall-clock
time but need to be aligned.  The publisher derives a Clock ID for the asset,
for example from a hash of its identifier; both Tracks carry it and start at
time 0 on that clock:</t>
        <artwork><![CDATA[
  Video:  TIMESCALE = 90000, CLOCK_ID = 0x1A3F5C9E07B2D461
  Audio:  TIMESCALE = 48000, CLOCK_ID = 0x1A3F5C9E07B2D461
]]></artwork>
        <t>A receiver aligns an audio Object and a video Object by comparing their
timestamps in seconds.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors thank the authors of <xref target="LOC"/>, <xref target="MSF"/>, <xref target="TIMESTAMP-LCURLEY"/>, and
<xref target="TEMPO"/>, whose timestamp work (<xref target="related"/>) this document builds on, and the participants
in the MOQ working group discussions that shaped it.</t>
      <t>Portions of this document were drafted with the assistance of Claude (Claude
Code, Anthropic).</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7Vc63LbRpb+30/RK1dtJA8ok4ojJ3KSGVmSE+1YlsdS1juz
teMCwSaJMQhw0IBkRvY8yz7LPtl+55zuRoOkbM9UReVEEtjoy7l+59IaDAaq
yZvCHOmd63xhbJMulvpVXS1N3eTG6mlV64vLP13vqHQ8rs0Nxi2qvw8aP3ZH
ZWljZlW9OtK2mSg1qbIyXWC+SZ1Om8G0zsuJKYpB763BcKRsO17k1uZV2ayW
GH9+dv1c6wc6LWyFVei1pcH/ymYn0TtmkjdVnacF/XJ+/AzfsLOd89fXz3dU
2S7Gpj5SE2zlSGVVaU1pW3ukm7o1Cnv+WqW1STHrGzPWaTnR52Vj6tI0+rpO
S7us6mZH3Vb1u1ldtUuMu8B6qb68MbX+0y/nJzvqnVnh88mR0gO94A8r+vDv
bZ7Ro3AydWPKFpvQ+t6ptJYD77zBgnk50z/RSHq+SPNCCPyH3DTT/aqe0eO0
zuZ4PG+apT169IhG0aP8xuz7YY/owaNxXd1a8wjvP6L3Znkzb8d4M2UuPPoU
R2h8AfLZJlpJ3tuXefbz6pMzfPLD/XmzKHaUSttmXtVEngH+0zovwaXjff3c
vcUPRX6Oi7TsP8c50zL/NW0gM0f6wjQpPzZCNtnsHxZ4vJ9Vi/4S5/v66tY0
TTT/OabvnvXn/qmqZoWJZ88hJjT4DzP+iFdQZVUv8MYN85u0BLMOTpkpcnwv
XErl5TQe/OLyZG1sUWU0ydXztecLO8Xz6/OLs6vr44tXgxcnv7x+cfZnGVVk
bV2YVZ/WNPzs4tWlDCkh7um7dpHWMsoslpVSg8FAp2OLDWbY3PU8txqK2y6g
bXpipnkJ1U+1hYJUUz7Zuk3I0rpekfDi4eBy/DeDecIOrDbTaZ7lmK1Y7evr
udGmzKqJmXSKorFkDi0s6SnN2FqDB7xYosZtgyVKPTa6NlNT43U3LF0uizxj
Pmm7NFmOhfSyrZeVNXZfTrbIJxOwTz0gPa+rSZvRcKUuOsUlVeyUX+/Ssnv6
7o6+f/wIGhTgVG1pSPbO6maeYkMwVSm2mCpr/t7Slog6cnhLx6za2RxDjQ6M
h06tsNqkAtnKqtGlIRpU+l1Z3Sq2IwNYNdAJj9cOV5gbU3T0sgn9TBQPooRB
oJGamwLUbGA93mFDS4xKC22zuZm0BY2fgEhkZrFFfTyBHcXPaVGsEtrqSi/r
6iafwExi0Dgv8mZFfKnYGpTZis1lNQUPIBBOCFbxRi0zyrwnVu7fJ0vz6hav
syD1JMCJxb4iGZkYm89KPU+J3rUxemrSpq2NPVLqoX748LzE3lOhycOHsBDC
HTogDCJWyRsLJ5SC7DREV+BQom3lWcQbBWfZbsjKRIK8jqisp3W1YB7Gq+3L
Bk7NNG2LRrzHgM32I5nb8SbelSxGx8fJFyAY8YJn5xf1+SmZdhDXzXB+SoKR
dntJSOBuDGuZY/0tLDHkKFI6PV41pKsN/GbhtnlSLZbQazmi29Wr7o3osKAa
K+EMop6Ah0tQ0eINog+WYp4zwfRNWrSmI04eEYcFF3uta8N6RsdomJ1CLX4V
W3vwQL82hcjMPF/SsEte48qpsROnuwc1DTOTj0pdQQlqEuf+kLSAO5+sxAp5
4nio0mkkW54XED3yvnO84SzAiSgylr67gyVmfRc57TAQcYZ/y9LCrFs/1lxF
q+dQXJgEzILl7u427DTmdnvHq8EsDES5yeTBgsAlWqMsvBLNE69lK7E8RLeV
yC9reTozg3FqsXas3HRaIoC6akAepslzthRk166eYytCWOsQDDEv0bcQnEEG
9/POPaCTv6iE1AqKyFYNv6ZFBSLnpphYHkOjCxLvhm1kAjpkRUsCR1IMP0Nr
MblqM2uhoSDYhKymlTUEtVlRBwtBxiJL0neRKlCV9JkWpdHw63WeWbfYvgKt
yckRfZ3LSbO51yXWE3obe1hVrbMHNA2Q4cQffJ7jDSGtapcEHjWbHhhF7Po2
rScJCaldlRmoAHRgwnxpVlcW/GnHNqtzOsaG6UvzhaXXnX0ldwrSFFh4ZkoW
6tqQvmGs2HLmNFa3vFNVsW6sCT5JQHCIpFMky4CcTi1wtlOS5NxrUtZ9OsCn
g0n36UfFRhfAVhOytUCqv1xdE7ym7/rlJf/8+gye8vXZKf189fPxixfhB+VG
XP18+cuL0+6n7s2Ty4uLs5en8jKe6t4jtXNx/OcdEYWdy1fX55cvj1/sENub
Ph1JICpCAmSpapCMnGVqFdwF054V8NnJq//739FjSPq/vX5+cjAafQfJkF++
HT15jF9u56aU1aqyWLlfidkKttmkNc0CVSAhzCHrJKRgMBwXPBLoTbb1v4ky
/3Okvx9ny9HjH90DOnDvoadZ7yHTbPPJxstCxC2PtiwTqNl7vkbp/n6P/9z7
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
1UlF17ePS/pjJcs829tX/w8G10zh2E4AAA==

-->

</rfc>
