Back to News
news

IETF MOQ WG: How timestamps totally solve delivery timeout

Martin Duke posted to the MOQ working group mailing list on June 12, 2026. The reason we have delivery timeout is because players have some amount of buffer. When it starts playing, something that arrives a little late…

Source: IETF Mailing ListView source →

Message Snapshot

  • List: moq@ietf.org
  • Thread subject: How timestamps totally solve delivery timeout
  • Message subject: [Moq] How timestamps totally solve delivery timeout
  • Author: Martin Duke
  • Published: 2026-06-12T13:47:04.000Z
  • Source tag: ietf-mailing-list
  • Message URL: Open in IETF Mail Archive

Summary

Martin Duke posted to the MOQ working group mailing list on June 12, 2026. The reason we have delivery timeout is because players have some amount of buffer. When it starts playing, something that arrives a little late…

Why It Matters

This message came from the public MOQ working group archive and captures active discussion, meeting coordination, or implementation feedback around Media over QUIC.

Message Excerpt

The reason we have delivery timeout is because players have some amount of buffer. When it starts playing, something that arrives a little late is fine; if it is later than the buffer length, the player has already passed

Plain-Text Body

The reason we have delivery timeout is because players have some amount of buffer. When it starts playing, something that arrives a little late is fine; if it is later than the buffer length, the player has already passed it by.

Today, MOQT has no idea what the intended time interval between two objects is. So it uses the heuristic of the arrival time at the relay, which bakes in whatever jitter happened upstream. If the buffer is 5 seconds, and object(time 1 minute) arrives at the relay 1:10 after object(time 0), the relay will send it immediately if it can, even though it is 5 seconds beyond the buffer at the play head.

If there were timestamps, I would apply the following pseudocode

Subscription::MaybeSendObject(object) { if (FirstObjectInSubscription(object)) { first_object_timestamp_ = object.timestamp; first_object_send_time_ = clock_.Now(); SendObject(object); return; } intended_relative_time = object.timestamp - first_object_timestamp_; actual_relative_time = clock.Now() - first_object_send_time_; if (actual_relative_time > intended_relative_time + delivery_timeout_; { ResetStream(); return; } SendObject(object); }

If the QUIC layer doesn't fail us, I contend that this design guarantees that objects only arrive if the play head hasn't passed them by.

Martin

Stay ahead of MOQ

Get the latest IETF MOQ standards updates, protocol analysis, and ecosystem news delivered to your inbox.

Go deeper with MOQ Edge Pro

Weekly deep-dives, IETF standards tracking, and streaming tech trend reports — from $9/mo.

See plans →