From 0b5aa3f9e4e8d66b2e7df812ca2dc1b94d6ac333 Mon Sep 17 00:00:00 2001 From: Michael SCHAL Date: Mon, 9 Mar 2026 13:46:56 +0100 Subject: [PATCH] feat: Implement initial streaming handler for live and VOD content using FFmpeg HLS transcoding with GPU acceleration support. --- bin/api/streaming_handler.dart | 5 +++-- lib/features/iptv/services/xtream_service.dart | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bin/api/streaming_handler.dart b/bin/api/streaming_handler.dart index 78cebe8..17dbfd9 100644 --- a/bin/api/streaming_handler.dart +++ b/bin/api/streaming_handler.dart @@ -126,8 +126,9 @@ Handler createLiveStreamHandler( }) { final router = Router(); - // Route: /api/live/{streamId}.m3u8 (Master playlist) - router.get('/.m3u8', (Request request, String streamId) async { + // Route: /api/live/{streamId}/playlist.m3u8 (Master playlist) + router.get('//playlist.m3u8', + (Request request, String streamId) async { final playlist = await getPlaylist(request); if (playlist == null) return Response.forbidden('No playlist'); diff --git a/lib/features/iptv/services/xtream_service.dart b/lib/features/iptv/services/xtream_service.dart index 0d696a0..93362a0 100644 --- a/lib/features/iptv/services/xtream_service.dart +++ b/lib/features/iptv/services/xtream_service.dart @@ -78,8 +78,8 @@ class XtreamService { /// Generate stream URL for live TV String getLiveStreamUrl(String streamId) { if (_currentPlaylist == null) throw Exception('No playlist configured'); - // Use HLS (.m3u8) for all live streams to ensure iOS compatibility - return '$_backendBaseUrl/api/live/$streamId.m3u8'; + // Use HLS (.m3u8) with a subpath to ensure relative segments resolve correctly + return '$_backendBaseUrl/api/live/$streamId/playlist.m3u8'; } /// Generate stream URL for VOD (movies)