From a8261c8c1fbf8194277c8e8630f32a5526365972 Mon Sep 17 00:00:00 2001 From: Luke Curley Date: Sat, 7 Nov 2026 05:10:02 -0800 Subject: [PATCH] quest: plan the follow-ups of #81 Co-Authored-By: Claude Opus 5.5 --- quest/m0/README.md | 2 ++ quest/m0/media-av-sync.md | 20 ++++++++++++++++++++ quest/m0/unpublish-clean.md | 24 ++++++++++++++++++++++++ 3 files changed, 46 insertions(+) create mode 100644 quest/m0/media-av-sync.md create mode 100644 quest/m0/unpublish-clean.md diff --git a/quest/m0/README.md b/quest/m0/README.md index fd6cd60..684b92f 100644 --- a/quest/m0/README.md +++ b/quest/m0/README.md @@ -103,6 +103,8 @@ repository. - [The program reaches a relay on every runner](/quest/m0/relay-test-flake.md) - the relay engine test stops failing the nightly on GitHub's runner - [Browser sources make no outside requests](/quest/m0/browser-offline.md) - no component updates, spellcheck downloads, or network time from the helper - [moq-studio builds on its own](/quest/m0/studio-builds-alone.md) - `cargo build -p moq-studio` no longer leans on a test dependency's features +- [Unpublishing a scene ends its broadcast cleanly](/quest/m0/unpublish-clean.md) - viewers get a clean finish, not `Unroutable`, when a scene stops publishing +- [A media file's sound plays with its pictures](/quest/m0/media-av-sync.md) - media sources write a bus latency ahead, as broadcast sources do - [The Apple signing identity is available](/quest/m0/signing.md) - the Apple credentials packaging and the macOS camera need; Windows ships unsigned - [Packaging](/quest/m0/packaging.md) - a signed macOS app, a Windows installer, and a Flatpak for Linux - [The persistable portal restore token is pinned](/quest/m0/pin-portal-token.md) - moq-video's restore token, for Wayland sources diff --git a/quest/m0/media-av-sync.md b/quest/m0/media-av-sync.md new file mode 100644 index 0000000..7dda851 --- /dev/null +++ b/quest/m0/media-av-sync.md @@ -0,0 +1,20 @@ +# [S] A media file's sound plays with its pictures + +## Goal + +A media file source's sound plays in step with its own pictures in every +output (program, published scenes, recordings, and Listen), instead of about +45 ms behind them. + +## Plan + +From [moq-dev/studio#81](https://github.com/moq-dev/studio/pull/81), picked +2026-11-07 (maintainer away under /afk, recommended option), m0 by the rule +that fixes join m0. + +Pictures show when they are due, but a media source writes its sound to the +bus when it is due, and the bus mixes it a bus latency (50 ms) later. +Broadcast sources already write a bus latency ahead (`playout::Writer`); +media sources should do the same. Test that a media file's picture change +and its sound onset leave an output within one bus block of each other, +measured on the media clock rather than with sleeps. diff --git a/quest/m0/unpublish-clean.md b/quest/m0/unpublish-clean.md new file mode 100644 index 0000000..bbac118 --- /dev/null +++ b/quest/m0/unpublish-clean.md @@ -0,0 +1,24 @@ +# [S] Unpublishing a scene ends its broadcast cleanly + +## Goal + +When a scene is unpublished, renamed, or removed, its viewers receive the +end of each track as a clean finish, never an `Unroutable` error, and +`a_published_scene_has_its_own_broadcast` passes every time. + +## Plan + +From [moq-dev/studio#81](https://github.com/moq-dev/studio/pull/81), picked +2026-11-07 (maintainer away under /afk, recommended option), m0 by the rule +that fixes join m0. + +The studio closes a scene's broadcast as soon as its encoders finish their +tracks locally, so the relay can unroute it before a track's end reaches the +viewer. The test above failed 3 times in about 33 runs on a loaded host from +this race. Quitting already waits until the relay has what it was sent +(`Output::close` in `rs/moq-studio/src/engine.rs`). + +- ✅ **Unpublishing waits the same way** before it closes the broadcast. + Rejected for now: changing moq-net to deliver a finished track's end after + its broadcast closes, which would land upstream first and is only worth it + if the studio's wait cannot cover every case.