MoQ Object Timestamp Extension
draft-lcurley-moq-timestamp-00
This document is an Internet-Draft (I-D).
Anyone may submit an I-D to the IETF.
This I-D is not endorsed by the IETF and has no formal standing in the
IETF standards process.
The information below is for an old version of the document.
| Document | Type |
This is an older version of an Internet-Draft whose latest revision state is "Active".
|
|
|---|---|---|---|
| Author | Luke Curley | ||
| Last updated | 2026-06-12 | ||
| RFC stream | (None) | ||
| Formats | |||
| Stream | Stream state | (No stream defined) | |
| Consensus boilerplate | Unknown | ||
| RFC Editor Note | (None) | ||
| IESG | IESG state | I-D Exists | |
| Telechat date | (None) | ||
| Responsible AD | (None) | ||
| Send notices to | (None) |
draft-lcurley-moq-timestamp-00
moq L. Curley
Internet-Draft 12 June 2026
Intended status: Informational
Expires: 14 December 2026
MoQ Object Timestamp Extension
draft-lcurley-moq-timestamp-00
Abstract
This document defines an extension for MoQ Transport [moqt] that
attaches a media presentation timestamp and duration to each object.
A track-level Timescale property establishes the units, an object-
level Timestamp property carries the presentation time of each
object, and an optional Duration property carries its presentation
duration. 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.
Discussion Venues
This note is to be removed before publishing as an RFC.
Discussion of this document takes place on the Media Over QUIC
Working Group mailing list (moq@ietf.org), which is archived at
https://mailarchive.ietf.org/arch/browse/moq/.
Source for this draft and an issue tracker can be found at
https://github.com/kixelated/moq-drafts.
Status of This Memo
This Internet-Draft is submitted in full conformance with the
provisions of BCP 78 and BCP 79.
Internet-Drafts are working documents of the Internet Engineering
Task Force (IETF). Note that other groups may also distribute
working documents as Internet-Drafts. The list of current Internet-
Drafts is at https://datatracker.ietf.org/drafts/current/.
Internet-Drafts are draft documents valid for a maximum of six months
and may be updated, replaced, or obsoleted by other documents at any
time. It is inappropriate to use Internet-Drafts as reference
material or to cite them other than as "work in progress."
This Internet-Draft will expire on 14 December 2026.
Curley Expires 14 December 2026 [Page 1]
Internet-Draft moq-timestamp June 2026
Copyright Notice
Copyright (c) 2026 IETF Trust and the persons identified as the
document authors. All rights reserved.
This document is subject to BCP 78 and the IETF Trust's Legal
Provisions Relating to IETF Documents (https://trustee.ietf.org/
license-info) in effect on the date of publication of this document.
Please review these documents carefully, as they describe your rights
and restrictions with respect to this document. Code Components
extracted from this document must include Revised BSD License text as
described in Section 4.e of the Trust Legal Provisions and are
provided without warranty as described in the Revised BSD License.
Table of Contents
1. Conventions and Definitions . . . . . . . . . . . . . . . . . 2
2. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 2
3. Setup Negotiation . . . . . . . . . . . . . . . . . . . . . . 3
4. TIMESCALE Track Property . . . . . . . . . . . . . . . . . . 4
5. TIMESTAMP Object Property . . . . . . . . . . . . . . . . . . 4
5.1. Age-Based Dropping . . . . . . . . . . . . . . . . . . . 5
6. DURATION Object Property . . . . . . . . . . . . . . . . . . 5
7. Security Considerations . . . . . . . . . . . . . . . . . . . 6
8. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 6
8.1. MOQT Setup Options . . . . . . . . . . . . . . . . . . . 6
8.2. MOQT Properties . . . . . . . . . . . . . . . . . . . . . 7
9. Normative References . . . . . . . . . . . . . . . . . . . . 7
Acknowledgments . . . . . . . . . . . . . . . . . . . . . . . . . 7
Author's Address . . . . . . . . . . . . . . . . . . . . . . . . 7
1. Conventions and Definitions
The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT",
"SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and
"OPTIONAL" in this document are to be interpreted as described in
BCP 14 [RFC2119] [RFC8174] when, and only when, they appear in all
capitals, as shown here.
2. Introduction
[moqt] treats object payloads as opaque: "the amount of time elapsed
between publishing an Object in Group ID N and in a Group ID > N ...
is not defined by this specification" ([moqt] Section 2.3.1), and
timing is left to the application's container format.
Curley Expires 14 December 2026 [Page 2]
Internet-Draft moq-timestamp June 2026
This works for endpoints that parse the media, but not for relays. A
relay frequently needs a notion of _when_ an object is meant to be
presented:
* *Age-based dropping*: a relay serving a live, latency-sensitive
subscription wants to drop objects that are too old to be useful,
keeping the freshest content flowing under congestion. Without a
timestamp it can only approximate age from wall-clock arrival
time, which drifts across hops and is corrupted by buffering and
jitter.
* *Consistent expiration across hops*: every relay on a path should
make the same drop decision for the same object. A timestamp
embedded in the object is identical at every hop; a wall-clock
arrival time is not.
* *Synchronization hints*: a subscriber can align objects from
multiple tracks (e.g. audio and video) using a shared media
timeline without first decoding each container.
MoQ also demultiplexes media into many independent tracks — audio,
video, captions, metadata, and more — so a timestamp is needed on
nearly every track. Re-implementing per-object timestamping inside
each application's container format, for every track, is repetitive
and error-prone; standardizing it at the transport lets one
implementation serve every track and lets relays use it directly.
This extension exposes media time to the transport with three Key-
Value-Pairs ([moqt] Section 2.5): a track-level *Timescale*, an
object-level *Timestamp*, and an optional object-level *Duration*.
The transport does not interpret the _meaning_ of the timeline (it is
still the application's clock); it only uses the timestamp for
relative age comparisons.
3. Setup Negotiation
The Object Timestamp extension is negotiated during the SETUP
exchange as defined in [moqt] Section 10.3. An endpoint indicates
support by including the following Setup Option:
TIMESTAMP Setup Option {
Option Key (vi64) = 0x915C1
Option Value Length (vi64) = 0
}
The properties defined below are ordinary Key-Value-Pairs and a
receiver that does not understand them ignores them per [moqt].
Negotiation is therefore not required for correctness, but a
Curley Expires 14 December 2026 [Page 3]
Internet-Draft moq-timestamp June 2026
publisher SHOULD send the Setup Option so that a relay knows it can
rely on object timestamps for age-based decisions rather than falling
back to wall-clock arrival time. A relay MAY perform timestamp-based
dropping for a track only if the upstream publisher advertised this
option (or the track carries a non-zero Timescale).
4. TIMESCALE Track Property
The TIMESCALE property establishes the units for every Timestamp and
Duration on a track. It is a track-level Key-Value-Pair, carried
with the track's properties (see [moqt] Section 2.5 and Section 12).
Because the value is a single integer, TIMESCALE uses an even Type so
the value is a bare varint with no length prefix:
TIMESCALE Track Property {
Type (vi64) = 0x915C0
Value (vi64) ; units per second
}
*Value*: The number of timestamp units per second. Common values
include 1000 (milliseconds), 1000000 (microseconds), 48000 (a typical
audio sample rate), and 90000 (the RTP video clock). A value of 0,
or the absence of the property, means the track has no media
timeline: Timestamp and Duration properties, if present, MUST be
ignored, and a relay MUST fall back to wall-clock arrival time for
any age-based decision.
The Timescale is fixed for the lifetime of the track and MUST NOT
change.
The Timescale is required to interpret the units of every Timestamp
and Duration, so a receiver cannot resolve an object's timing until
it has the track's properties. Those properties are delivered in
SUBSCRIBE_OK or TRACK_STATUS ([moqt] Section 12), so a receiver that
begins receiving objects before it has them MUST buffer the timing
(or treat it as unknown) until the Timescale arrives. A relay that
has not yet learned the Timescale MUST fall back to wall-clock
arrival time for any age-based decision.
5. TIMESTAMP Object Property
The TIMESTAMP property carries the presentation time of an object, in
the track's Timescale. It is an object-level Key-Value-Pair carried
in the object's properties ([moqt] Section 2.5, 11.2.1.2). It uses
an even Type so the value is a bare varint:
Curley Expires 14 December 2026 [Page 4]
Internet-Draft moq-timestamp June 2026
TIMESTAMP Object Property {
Type (vi64) = 0x915C2
Value (vi64) ; absolute presentation time, in Timescale units
}
*Value*: The absolute presentation timestamp of the object, expressed
in the track's Timescale. Any value (including 0) is valid.
A publisher SHOULD attach TIMESTAMP to every object on a track whose
Timescale is non-zero. An object with no TIMESTAMP on such a track
has no media time; for age comparisons a receiver MUST treat its
effective time as the wall-clock arrival time of the object, which
avoids stalling expiration on objects that intentionally carry no
timestamp (e.g. keep-alives or gap markers).
5.1. Age-Based Dropping
Given two objects on the same track, both with TIMESTAMP and a non-
zero Timescale, a relay computes their relative age as the difference
of their timestamps divided by the Timescale. A relay serving a live
subscription MAY drop an object whose age relative to the most recent
object on the track exceeds a locally configured or application-
supplied threshold, resetting the corresponding stream per [moqt].
This decision is identical at every hop because it depends only on
values embedded in the objects, not on arrival time.
A relay MUST NOT use timestamps to reorder delivery beyond what
[moqt] already permits; this property informs _dropping_, not
transmission order.
6. DURATION Object Property
The DURATION property carries the presentation duration of an object,
in the track's Timescale. It is optional and is an object-level Key-
Value-Pair with an even Type:
DURATION Object Property {
Type (vi64) = 0x915C4
Value (vi64) ; presentation duration, in Timescale units
}
*Value*: The presentation duration of the object, expressed in the
track's Timescale. A value of 0, or the absence of the property,
means the duration is unknown; the object is presented until the next
object begins.
Curley Expires 14 December 2026 [Page 5]
Internet-Draft moq-timestamp June 2026
Duration is primarily an application-level presentation hint, but a
relay MAY also use it to refine age-based dropping: an object's
Timestamp plus its Duration marks the end of its presentation
interval, which is a more precise "this object is now in the past"
signal than the Timestamp alone (for example, the last object of a
group has no following object to bound it). A relay MUST NOT rely on
Duration being present; when it is absent, the relay falls back to
comparing Timestamps as in Age-Based Dropping (Section 5.1).
7. Security Considerations
Timestamps expose the media timeline to relays, which is the point of
the extension, but a relay still treats payloads as opaque and gains
no access to media content.
A malicious publisher could supply misleading timestamps (e.g. always
claiming an object is fresh) to defeat age-based dropping, or wildly
out-of-range timestamps to cause a receiver to mis-estimate age. A
receiver SHOULD bound the age it computes and SHOULD NOT make
security decisions based on timestamps. Because age-based dropping
only affects which objects a live subscription receives, the worst
case is degraded delivery for that subscription, not a cross-
subscription effect.
8. IANA Considerations
This document requests the following registrations. High,
distinctive values are requested to avoid the low ranges reserved by
[moqt] and to minimize collisions with provisional registrations by
other extensions; they also avoid the greasing pattern (0x7f * N +
0x9D). The three property Types are even so that each value is a
bare varint with no length prefix (see [moqt] Section 2.5).
8.1. MOQT Setup Options
This document requests a registration in the "MOQT Setup Options"
registry ([moqt] Section 15.4), whose policy is Specification
Required.
+=========+===========+===============+
| Value | Name | Reference |
+=========+===========+===============+
| 0x915C1 | TIMESTAMP | This Document |
+---------+-----------+---------------+
Table 1
Curley Expires 14 December 2026 [Page 6]
Internet-Draft moq-timestamp June 2026
8.2. MOQT Properties
This document requests registrations in the "MOQT Properties"
registry ([moqt] Section 15.8), used for object and track properties.
+=========+===========+========+===============+
| Value | Name | Scope | Reference |
+=========+===========+========+===============+
| 0x915C0 | TIMESCALE | Track | This Document |
+---------+-----------+--------+---------------+
| 0x915C2 | TIMESTAMP | Object | This Document |
+---------+-----------+--------+---------------+
| 0x915C4 | DURATION | Object | This Document |
+---------+-----------+--------+---------------+
Table 2
9. Normative References
[moqt] Nandakumar, S., Vasiliev, V., Swett, I., and A. Frindell,
"Media over QUIC Transport", Work in Progress, Internet-
Draft, draft-ietf-moq-transport-18, 12 May 2026,
<https://datatracker.ietf.org/doc/html/draft-ietf-moq-
transport-18>.
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate
Requirement Levels", BCP 14, RFC 2119,
DOI 10.17487/RFC2119, March 1997,
<https://www.rfc-editor.org/rfc/rfc2119>.
[RFC8174] Leiba, B., "Ambiguity of Uppercase vs Lowercase in RFC
2119 Key Words", BCP 14, RFC 8174, DOI 10.17487/RFC8174,
May 2017, <https://www.rfc-editor.org/rfc/rfc8174>.
Acknowledgments
This document was drafted with the assistance of Claude, an AI
assistant by Anthropic.
Author's Address
Luke Curley
Email: kixelated@gmail.com
Curley Expires 14 December 2026 [Page 7]