fix(player): surface a persistent HTTP 503 at open instead of retrying forever

ffmpeg's reconnect loop deliberately retries 503 without bound (#1520), so a
server that keeps refusing the stream at open time left a silent black screen:
ExoPlayer fell back to MPV, MPV reconnected forever, and no error ever reached
the screen. A new open-phase watchdog arms on the first 503 seen before any
frame renders and, after 20s without one, synthesizes a server-http-503 error
that shows an actionable dialog. Mid-stream 503s and live TV keep their
existing ride-out paths.

close #1830
This commit is contained in:
edde746
2026-08-08 12:06:32 +02:00
parent f0debe2c32
commit e6be5f9fef
38 changed files with 321 additions and 12 deletions
@@ -727,7 +727,7 @@ class _VideoSettingsSheetState extends State<VideoSettingsSheet> {
),
if (kDebugMode)
for (final status in const [500, 404])
for (final status in const [500, 404, 503])
FocusableListTile(
leading: AppIcon(Symbols.bug_report_rounded, fill: 1, color: tokens(context).textMuted),
title: Text('Simulate HTTP $status from server'),