forked from Foxyz/sync_replay_project
Read once: a link passed on is fetched from the site once, for the putter's player and the relay
Before, the member passing a page link on downloaded it twice, independently: their mpv straight from the CDN and the relay's pulls again, with a different format pick and without yt-dlp's cookies. The two drifted (the putter played on while viewers stalled, or the reverse) and doubled the connections the CDN saw. Now one SharedSource per track reads the site once (resuming after cuts, backing off on 412/429/5xx and silence) into a bounded buffer (64 MiB ahead, 16 behind) that serves both the putter's mpv through a loopback endpoint and the server's pulls; the putter plays the relay's own format pick, and the relay sends yt-dlp's cookies. Up next's warm relay uses the same reader. Pieces tracks (HLS/DASH) keep two fetches for now. Measured in the opt-in e2e: half the CDN traffic, no 412s under a lockout CDN, viewer seeks 0.29 s instead of 4 s there. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
7715dc479a
commit
ec0849eb01
19 files changed
+1894
-101
No files matched your search
+11
-3
@@ -94,7 +94,10 @@ Three suites, run from each package's folder:
|
||||
- `cd packages/server && dart test` (well under a minute): live servers
|
||||
on loopback: auth and version refusal, identity, takeover and grace
|
||||
(`presence_test` on a fake clock), media and relay byte serving with
|
||||
source drops, Jellyfin relay against a fake, queue (and the shared
|
||||
source drops, the read-once source (`shared_source_test`: its loopback
|
||||
range answers, a cut and resume with backoff, seeks of either reader,
|
||||
the two kept within one window, its memory bound), Jellyfin relay
|
||||
against a fake, queue (and the shared
|
||||
countdown on a fake clock), session log,
|
||||
isolate `serve`, sharing (`share_test`: a listener attached and detached
|
||||
under the same members and Up next, the host key standing in for the
|
||||
@@ -114,7 +117,10 @@ Three suites, run from each package's folder:
|
||||
|
||||
Opt-in, skipped unless set: `JELLYFIN_TEST_*` (core `jellyfin_live` and
|
||||
server `jellyfin_relay_live` against a real Jellyfin; read their headers),
|
||||
`YTDLP_LIVE=1` (downloads yt-dlp and resolves a real tweet). Everything
|
||||
`YTDLP_LIVE=1` (downloads yt-dlp and resolves a real tweet),
|
||||
`WT_SINGLE_FETCH=1` (server `single_fetch_e2e`: a link passed on read
|
||||
once against twice, two real mpv against a fake CDN that cuts and locks
|
||||
out; minutes; `WT_SF_SCENARIOS`, `WT_SF_PLAY` narrow it). Everything
|
||||
else is offline: Jellyfin and link hosts are local fakes.
|
||||
|
||||
Real-mpv tests: `sync_playback_e2e`, `coord_presence` (drops through a
|
||||
@@ -129,7 +135,9 @@ stand-in yt-dlp and a Referer-checking CDN: the EDL, the headers and
|
||||
cookies, subtitles without danmaku, a 403, the D11 error),
|
||||
`media_switch_e2e` (commands during a switch wait and apply once, no mpv
|
||||
errors), `relay_e2e` (a dedicated server with no file of its
|
||||
own: a guest's file, links passed on or fetched by the server, a late
|
||||
own: a guest's file, links passed on (read once: the source's player on
|
||||
its loopback reader, nothing from mpv at the origin) or fetched by the
|
||||
server, a late
|
||||
source, a source that drops and resumes; a seek past what a slow source
|
||||
has sent, timed; a source that drops while a viewer seeks past
|
||||
the buffer and another joins: no seek loop, "Waiting for", all resume
|
||||
|
||||
Reference in new issue
Block a user