46 lines
1.1 KiB
Dart
46 lines
1.1 KiB
Dart
import 'dart:html' as html;
|
|
import 'dart:ui_web' as ui_web;
|
|
|
|
import 'package:flutter/material.dart';
|
|
|
|
class WebStreamPlayer extends StatefulWidget {
|
|
final String streamUrl;
|
|
final int? refreshToken;
|
|
|
|
const WebStreamPlayer({
|
|
super.key,
|
|
required this.streamUrl,
|
|
this.refreshToken,
|
|
});
|
|
|
|
@override
|
|
State<WebStreamPlayer> createState() => _WebStreamPlayerState();
|
|
}
|
|
|
|
class _WebStreamPlayerState extends State<WebStreamPlayer> {
|
|
late final String _viewType;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
final cacheBuster = DateTime.now().microsecondsSinceEpoch;
|
|
_viewType = 'flv-player-$cacheBuster';
|
|
|
|
ui_web.platformViewRegistry.registerViewFactory(_viewType, (int viewId) {
|
|
final iframe = html.IFrameElement()
|
|
..src =
|
|
'flv_player.html?v=$cacheBuster&src=${Uri.encodeComponent(widget.streamUrl)}'
|
|
..style.border = '0'
|
|
..style.width = '100%'
|
|
..style.height = '100%'
|
|
..allow = 'autoplay; fullscreen';
|
|
return iframe;
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return HtmlElementView(viewType: _viewType);
|
|
}
|
|
}
|