From 04f234633dca6e906c575257e0d0e8e12a9c94cc Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Thu, 22 Oct 2026 22:12:26 -0700 Subject: [PATCH] quest: pace the gap slots after a short forward restart Co-Authored-By: Claude Opus 5.5 --- quest/m2/README.md | 1 + quest/m2/ts-restart-gap-burst.md | 24 ++++++++++++++++++++++++ 2 files changed, 25 insertions(+) create mode 100644 quest/m2/ts-restart-gap-burst.md diff --git a/quest/m2/README.md b/quest/m2/README.md index 37c347bf711..2ca10de5e56 100644 --- a/quest/m2/README.md +++ b/quest/m2/README.md @@ -135,6 +135,7 @@ ranked just below deterministic TS legs, which it requires. - [Deterministic H.265 TS legs](/quest/m2/ts-hitless-h265.md) - H.265's buffering period gets the same group anchor as H.264 - [TS over RTP legs](/quest/m2/ts-rtp-egress.md) - two legs send identical RTP packets, headers included, so an ST 2022-7 receiver can merge them - [Old tail across a restart](/quest/m2/ts-sync-restart-tail.md) - both `--sync` legs send the old timeline's tail up to a restart, so an ST 2022-7 merge has no hole there +- [Paced gap after a restart](/quest/m2/ts-restart-gap-burst.md) - a forward restart within the minute no longer sends every gap slot in one burst - [moqsrc A/V sync](/quest/m2/moqsrc-av-sync.md) - a nightly test measures A/V skew from `moqsrc` through clock-synced sinks - [MP4 export](/quest/m2/mp4-export.md) - `moq export mp4 --output` records crash-safe fragments, then finishes a regular MP4 with moov at the end - [fMP4 edit lists](/quest/m2/fmp4-edit-lists.md) - the fMP4 importer applies edit lists to frame timestamps diff --git a/quest/m2/ts-restart-gap-burst.md b/quest/m2/ts-restart-gap-burst.md new file mode 100644 index 00000000000..351f974df54 --- /dev/null +++ b/quest/m2/ts-restart-gap-burst.md @@ -0,0 +1,24 @@ +# [S] Pace the gap slots after a short forward restart + +## Goal + +After a forward timeline restart within the minute a restarted grid runs on +across (`AHEAD` in `rs/moq-mux/src/container/ts/lane.rs`), `moq export ts` +lays every slot in the gap at once. On the new clock their due times are +already past, so a leg sends them in one burst, which can overflow a finite +UDP or sink queue. The plain stdout TS path bursts the same way, and so does +a `--sync --rtp` leg once +[moq-dev/moq#6304](https://github.com/moq-dev/moq/pull/6304) lands. The gap +slots are either paced out or not laid at all. + +## Plan + +- Decide between pacing the gap slots and skipping them. Skipping must keep + synced legs identical, so it must follow from something both legs read + alike. +- Test with a mocked-time restart inside the minute, asserting datagram or + packet spacing. `an_rtp_leg_sends_its_paced_tail_before_a_restart` from + that PR restarts 120 s ahead specifically to avoid this case, so it is the + natural one to extend. + +Public API: none.