From e3f5bc6e66fd8a59bb60de0b357a575155d45e52 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Mon, 15 Dec 2025 12:31:58 +0100 Subject: [PATCH] feat: Implement IPTV settings management including streaming, buffer, EPG, and player preferences, and add HLS handler. --- bin/api/hls_handler.dart | 29 ++++++++++--------- .../iptv/providers/settings_provider.dart | 4 +-- 2 files changed, 18 insertions(+), 15 deletions(-) diff --git a/bin/api/hls_handler.dart b/bin/api/hls_handler.dart index a17e837..e91e99c 100644 --- a/bin/api/hls_handler.dart +++ b/bin/api/hls_handler.dart @@ -168,30 +168,33 @@ Handler createStreamInitHandler() { '-bufsize', '5000k', ]); } else { - // VOD: Higher quality transcoding + // VOD: Use ultrafast preset to prevent buffer stalls + // FFmpeg must transcode FASTER than realtime to keep the buffer full ffmpegArgs.addAll([ '-c:v', 'libx264', - '-preset', 'fast', - '-tune', 'film', - '-profile:v', 'high', - '-level', '4.1', + '-preset', 'ultrafast', // CRITICAL: Fast encoding to prevent buffer stalls + '-tune', 'fastdecode', // Optimize for fast decoding in browser + '-profile:v', 'main', // Good compatibility, better than baseline for VOD + '-level', '4.0', '-pix_fmt', 'yuv420p', - '-g', '48', + '-g', '48', // Keyframe every 2s at 24fps + '-threads', '0', // Use all available CPU cores ]); if (quality == 'low') { ffmpegArgs.addAll([ '-vf', 'scale=-2:480', - '-b:v', '1500k', - '-maxrate', '1500k', - '-bufsize', '3000k', + '-b:v', '1000k', + '-maxrate', '1200k', + '-bufsize', '2000k', ]); } else { + // High quality but still fast enough to prevent stalls ffmpegArgs.addAll([ - '-b:v', '6000k', - '-maxrate', '8000k', - '-bufsize', '12000k', - '-crf', '18', + '-b:v', '2500k', // Reduced from 6000k for faster encoding + '-maxrate', '3000k', // Reduced from 8000k + '-bufsize', '5000k', // Reduced from 12000k + '-crf', '23', // Slightly lower quality but much faster ]); } } diff --git a/lib/features/iptv/providers/settings_provider.dart b/lib/features/iptv/providers/settings_provider.dart index 2e19b8c..c4325fb 100644 --- a/lib/features/iptv/providers/settings_provider.dart +++ b/lib/features/iptv/providers/settings_provider.dart @@ -106,8 +106,8 @@ class IptvSettings { this.showClock = false, this.preferredAspectRatio = 'contain', this.playerType = PlayerType.standard, - // VOD defaults - this.forceVodTranscoding = false, + // VOD defaults - true by default to avoid 509 errors from IPTV servers + this.forceVodTranscoding = true, }); IptvSettings copyWith({