64 lines
2.9 KiB
Markdown
64 lines
2.9 KiB
Markdown
# Roadmap
|
|
|
|
Backlog and epics, in order. Done work lives in git history. Check an item
|
|
off by deleting it in the same commit as the code. Wire changes also edit
|
|
[PROTOCOL.md](PROTOCOL.md).
|
|
|
|
## Backlog
|
|
|
|
1. **Windows: first real use.** CI builds and publishes
|
|
`watch-together-<ver>-windows-x64.zip` (libmpv bundled) and runs the
|
|
updater tests on NTFS; a friend has joined from it. Still unchecked:
|
|
fullscreen controls, hosting (firewall prompt), in-app update from one
|
|
release to the next. The rest of the desktop tests are not in CI.
|
|
|
|
2. **Relay follow-ups** (see ARCHITECTURE "Relay"). First real use: owner's
|
|
PC -> VPS -> friend, Jellyfin and a file. Then:
|
|
- Source takeover: when the source leaves, another member with an
|
|
account on that Jellyfin (or the same file: name, size, hash) takes
|
|
over instead of the buffer running dry.
|
|
- "Bob can't open this link — relay it?": offer the relay to whoever put
|
|
a direct link up when a viewer's player fails to open it.
|
|
- Show who is relaying and how fast in the member list; warn the source
|
|
when its upload is below the media's bitrate.
|
|
|
|
3. **Jellyfin** (epic, below).
|
|
|
|
4. **Smaller items**
|
|
- Video output robustness: if media_kit's hardware path regresses to
|
|
software (see ARCHITECTURE, Media: render mode), vendor a
|
|
media_kit_video fix that builds the EGL display from GDK's native
|
|
display. The video freeze after GPU idle is not explained by this;
|
|
next suspect is media_kit's context switching on the raster thread
|
|
with NVIDIA.
|
|
- Link conveniences: a link swap in session updates the remembered media;
|
|
show the open link with an open-in-browser button.
|
|
- Time UI: remaining time, scrubber preview.
|
|
- mpv / mpv.net shortcut parity.
|
|
- Chaos suite: host drop 5 s / 30 s, viewer stall, 20-seek storm, long
|
|
outage with cache exhaustion (`tool/shaper.dart --kill-after`); assert no
|
|
OOM, no stuck session, drift recovers.
|
|
- Chat history pane (today: activity log only).
|
|
- The `state` broadcast carries the full media URL, which can include an
|
|
`api_key` (recognised Jellyfin links become refs; other links do not).
|
|
- TLS: document a reverse proxy in front of the server.
|
|
- Playlist: `queue-add`, `queue-skip`, auto-advance like a swap.
|
|
- Sidecar subtitles.
|
|
|
|
## Epic: Jellyfin
|
|
|
|
What is left (the rest is in [ARCHITECTURE.md](ARCHITECTURE.md), "Jellyfin
|
|
in a session"):
|
|
- Queue: put several library items (a season, a pick list) up as a
|
|
playlist that advances like a swap (shares `queue-add` / `queue-skip`
|
|
with the backlog's Playlist item).
|
|
- Auto-advance cancel for everyone: today Cancel is per screen (the
|
|
designated swapper's Cancel stops the swap; a seek stops all). A shared
|
|
cancel needs a wire message.
|
|
- Sidecar (external) subtitle streams of Jellyfin items: only embedded
|
|
tracks are mapped to mpv today.
|
|
|
|
## Deferred
|
|
|
|
P2P, Android. Never: transcoding, web clients.
|