Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions quest/m0/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
20 changes: 20 additions & 0 deletions quest/m0/media-av-sync.md
Original file line number Diff line number Diff line change
@@ -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.
24 changes: 24 additions & 0 deletions quest/m0/unpublish-clean.md
Original file line number Diff line number Diff line change
@@ -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.