From 04508c37af6ca0e48bc0c13743f370b957d4018c Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Tue, 16 Dec 2025 20:50:21 +0100 Subject: [PATCH] fix: let FFmpeg handle HTTP redirects natively - manual resolution consumed one-time tokens --- bin/api/streaming_handler.dart | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/bin/api/streaming_handler.dart b/bin/api/streaming_handler.dart index d7486bf..36b287c 100644 --- a/bin/api/streaming_handler.dart +++ b/bin/api/streaming_handler.dart @@ -116,20 +116,21 @@ Handler createLiveStreamHandler( return Response.internalServerError(body: 'No playlist configured'); } - final originalUrl = + // Use original URL - let FFmpeg handle HTTP redirects natively + // Manual redirect resolution consumes one-time tokens from IPTV servers + final targetUrl = '${playlist.dns}/live/${playlist.username}/${playlist.password}/$streamId.ts'; - - // Resolve any HTTP redirects before passing to FFmpeg - final targetUrl = await _resolveRedirects(originalUrl); print('[Live] Streaming via FFmpeg: $targetUrl'); // Start FFmpeg to proxy and stabilize the stream // We use "-c copy" to avoid transcoding (Low CPU) but gain FFmpeg's network robustness final ffmpegArgs = [ '-hide_banner', '-loglevel', 'error', - '-headers', 'User-Agent: VLC/3.0.18 LibVLC/3.0.18\r\n', + // Full headers to mimic a real video player + '-headers', + 'User-Agent: VLC/3.0.18 LibVLC/3.0.18\r\nAccept: */*\r\nConnection: keep-alive\r\nReferer: ${playlist.dns}/\r\n', - // Robustness flags (Same as VOD) + // HTTP redirect handling and robustness flags '-reconnect', '1', '-reconnect_at_eof', '1', '-reconnect_streamed', '1', @@ -137,6 +138,7 @@ Handler createLiveStreamHandler( '-rw_timeout', '15000000', '-analyzeduration', '5000000', // Faster probe for live '-probesize', '5000000', + '-max_reload', '3', // Allow up to 3 retries for failed requests '-i', targetUrl,