mirror of
https://github.com/R0m1k3/xtremflow.git
synced 2026-10-21 14:08:04 +02:00
Merge pull request #35 from R0m1k3/antigravity
feat: add IPTV player screen with FFmpeg transcoding and HLS support …
This commit is contained in:
commit
d4c00d4021
1 file changed
+42
-5
@@ -97,11 +97,48 @@ class _PlayerScreenState extends ConsumerState<PlayerScreen> {
|
|||||||
debugPrint('PlayerScreen: FFmpeg HLS URL: $hlsUrl');
|
debugPrint('PlayerScreen: FFmpeg HLS URL: $hlsUrl');
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// For VOD and Series, use direct proxy (they usually work)
|
// For VOD and Series
|
||||||
final streamUrl = widget.streamType == StreamType.vod
|
final ext = widget.containerExtension.toLowerCase();
|
||||||
? xtreamService.getVodStreamUrl(widget.streamId, widget.containerExtension)
|
final baseUrl = html.window.location.origin;
|
||||||
: xtreamService.getSeriesStreamUrl(widget.streamId, widget.containerExtension);
|
|
||||||
hlsUrl = streamUrl;
|
// Check if format needs transcoding (MKV, AVI, etc. are not browser-native)
|
||||||
|
final needsTranscoding = ext == 'mkv' || ext == 'avi' || ext == 'wmv' || ext == 'flv';
|
||||||
|
|
||||||
|
if (needsTranscoding) {
|
||||||
|
// Use FFmpeg for non-browser-compatible formats
|
||||||
|
setState(() {
|
||||||
|
_statusMessage = 'Transcoding video for browser compatibility...';
|
||||||
|
});
|
||||||
|
|
||||||
|
final vodPath = widget.streamType == StreamType.vod ? 'movie' : 'series';
|
||||||
|
final iptvUrl = '${widget.playlist.dns}/$vodPath/${widget.playlist.username}/${widget.playlist.password}/${widget.streamId}.$ext';
|
||||||
|
final encodedUrl = Uri.encodeComponent(iptvUrl);
|
||||||
|
final streamEndpoint = '$baseUrl/api/stream/vod_${widget.streamId}?url=$encodedUrl';
|
||||||
|
|
||||||
|
debugPrint('PlayerScreen: Starting FFmpeg VOD transcode: $streamEndpoint');
|
||||||
|
|
||||||
|
final response = await http.get(Uri.parse(streamEndpoint));
|
||||||
|
|
||||||
|
if (response.statusCode != 200) {
|
||||||
|
throw Exception('Failed to start VOD transcode: ${response.body}');
|
||||||
|
}
|
||||||
|
|
||||||
|
final data = jsonDecode(response.body);
|
||||||
|
if (data['status'] != 'started') {
|
||||||
|
throw Exception('VOD transcode failed: ${data['error'] ?? 'Unknown error'}');
|
||||||
|
}
|
||||||
|
|
||||||
|
hlsUrl = '$baseUrl${data['hlsUrl']}';
|
||||||
|
debugPrint('PlayerScreen: FFmpeg VOD HLS URL: $hlsUrl');
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// MP4, WebM can be played directly via proxy
|
||||||
|
final streamUrl = widget.streamType == StreamType.vod
|
||||||
|
? xtreamService.getVodStreamUrl(widget.streamId, widget.containerExtension)
|
||||||
|
: xtreamService.getSeriesStreamUrl(widget.streamId, widget.containerExtension);
|
||||||
|
hlsUrl = streamUrl;
|
||||||
|
debugPrint('PlayerScreen: Direct playback URL: $hlsUrl');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
setState(() {
|
setState(() {
|
||||||
|
|||||||
Reference in new issue
Block a user