Relay: viewers keep the file size (headers within 4 s, connection: close), retries back off, 412 re-resolves
Two server behaviours left ffmpeg (8.1/9.0) without the file size, after which every seek failed with "size -38" until a reload: - dart:io holds response headers until body bytes exist: a stalled source meant no headers within mpv's 5 s timeout. Relay byte responses are now written on the raw connection, headers with the first bytes or after 4 s, and a swap ends waiting reads with a plain close. - every response closed its socket without saying connection: close, so ffmpeg 8.x reused a dead connection for its next seek (pol's X clips). The server now says it whenever the request asks. A failed pull waits 250 ms doubling to 8 s instead of re-pulling at once (the ~130 ms storm that drew Bilibili's 412/403); 412 counts as an expired URL and re-resolves the page, at most once per 60 s. The app reloads a player once per media when ffmpeg reports the lost size anyway. P37: a read that waits past ffmpeg's retry budget still ends the file early. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
5e3834e6ba
commit
e91539d113
17 files changed
+575
-63
No files matched your search
@@ -58,6 +58,14 @@ Problems are numbered; delete a line when its fix ships.
|
||||
- P36 After a reconnect the app re-dials the warm relay of an Up next
|
||||
item that was already played ("relay channel refused: not the source of
|
||||
Up next item q8"): harmless, the feeder should end with its item.
|
||||
- P37 A relay viewer whose read waits on bytes the source does not send
|
||||
for longer than ffmpeg's reconnect budget (4 tries per read, about
|
||||
40 s with the 4 s header rule) gets an I/O error that mpv takes as the
|
||||
end of the file. Measured with mpv 0.41 / ffmpeg 9.0.2 and the source
|
||||
away about a minute across a seek: it played on; one read stalled past
|
||||
the budget ends the file. Options: a longer `reconnect_delay_max` for
|
||||
relay URLs only, or the end-of-file path reopening a relay viewer
|
||||
that stopped short while the server plays.
|
||||
|
||||
**Restructure** (in order; reviewed against the code). Truth lives in
|
||||
three places: the server (members, presence, gate, transport, queue incl.
|
||||
|
||||
Reference in new issue
Block a user