Untitled
unknown
plain_text
a year ago
3.3 kB
4
Indexable
class SimplePlayer extends StatefulWidget { const SimplePlayer(); @override State<SimplePlayer> createState() => _SimplePlayerState(); } class _SimplePlayerState extends State<SimplePlayer> with WidgetsBindingObserver { bool isLoadSuccess = false; @override void initState() { init(); initializePlayer(); super.initState(); } initializePlayer() { viewController = BccmPlayerViewController( playerController: BccmPlayerController.primary, config: BccmPlayerViewConfig( useSurfaceView: false, deviceOrientationsFullscreen: (viewController) { final videoSize = viewController.playerController.value.videoSize; if (videoSize == null || videoSize.aspectRatio == 1) { return [DeviceOrientation.landscapeLeft]; } return null; }, deviceOrientationsNormal: (viewController) => [DeviceOrientation.portraitUp, DeviceOrientation.portraitDown], controlsConfig: BccmPlayerControlsConfig( additionalActionsBuilder: (context) => [ if (Platform.isIOS) Padding( padding: EdgeInsets.only(right: 4), child: Transform.scale( scale: 0.85, child: AirPlayRoutePickerView( width: 20, height: 34, prioritizesVideoDevices: true, tintColor: Colors.white, activeTintColor: Colors.white, backgroundColor: Colors.transparent, ), ), ) ], ), ), ); } init() async { MediaItem item = MediaItem( url: <YOUR MEDIA URL>, mimeType: <YOUR MEDIA URL>.contains('.m3u8') ? 'application/x-mpegURL' : 'video/mp4', metadata: MediaMetadata(title: <TITLE OF YOUR MEDIA>), ); await BccmPlayerInterface.instance.replaceCurrentMediaItem(BccmPlayerController.primary.value.playerId, item, autoplay: true).then((value) { if (mounted) { setState(() { isLoadSuccess = true; }); } else { _stopAndDisposePlayerAfterLoading(); } }); } @override void dispose() { _stopAndDisposePlayer(); // Stop and dispose the player SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp, DeviceOrientation.portraitDown]); WidgetsBinding.instance.removeObserver(this); super.dispose(); } void _stopAndDisposePlayer() async { viewController.playerController.pause(); viewController.playerController.stop(reset: true); } void _stopAndDisposePlayerAfterLoading() async { viewController.playerController.pause(); viewController.playerController.stop(reset: true); } @override Widget build(BuildContext context) { return Stack( alignment: Alignment.center, children: [ (isLoadSuccess) ? BccmPlayerView.withViewController(viewController) : CircularProgressIndicator( strokeWidth: 2, valueColor: AlwaysStoppedAnimation( defaultLoaderAccentColorGlobal ?? Theme.of(context).colorScheme.secondary, ), ), ], ); } }
Editor is loading...
Leave a Comment