import 'dart:convert'; import 'dart:ui'; import 'package:flutter/material.dart'; import 'dart:async'; import 'package:flutter/services.dart'; import 'package:flutter_superplayer/flutter_superplayer.dart'; const _kControlViewTypes = [kControlViewTypeDefault, kControlViewTypeWithout]; class SuperPlayerPage extends StatefulWidget { SuperPlayerPage({@required this.url, this.loop = 1, this.title = 'Tencent Player', Key key}) : super(key: key); String url; String title; int loop; //设置播放循环,默认播放器的循环次数是1, 即不循环播放。如果设置循环次数0,表示无限循环。 @override _SuperPlayerPageState createState() => _SuperPlayerPageState(); } class _SuperPlayerPageState extends State with SuperPlayerListener { SuperPlayerController _playerController = SuperPlayerController(); String _sdkVersion = 'Unknown'; List _logs = []; bool bFullScreen = false; String _controlViewType = _kControlViewTypes.first; @override void initState() { super.initState(); //initPlatformState(); // Future.delayed(const Duration(milliseconds: 1000), () { // _playerController.playWithModel(SuperPlayerModel(url: widget.url)); // setState(() { // }); // }); init(); } Future init() async { await _playerController.addListener(this); await initPlatformState(); if (!mounted) return; print('mounted = ${mounted}'); // 开启调试日志 //await FTXPlayerController.setConsoleEnabled(true); // 初始化播放器 //await _controller.initialize(onlyAudio: true); await _playerController.uiHideDanmu(); //设置播放循环,默认播放器的循环次数是1, 即不循环播放。如果设置循环次数0,表示无限循环。 if (0 == widget.loop) { await _playerController.setLoop(true); } await _playerController.playWithModel(testSuperPlayerModel); //_controller.play("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"); // _controller // .play('rtmp://125.64.218.67:9901/rtp/gb_play_34020000001320003016_34020000001320003016'); // 设置循环播放 //await _controller.setLoop(true); // 开始播放 //await _controller.play("http://125.64.218.67:9908/video/2_6063_20210409_140608_川Q31715.mp4"); } SuperPlayerModel get testSuperPlayerModel { // int appId = 1252463788; // String fileId = "5285890781763144364"; SuperPlayerModel superPlayerModel = SuperPlayerModel( url: widget.url, // appId: appId, // videoId: SuperPlayerVideoId(fileId: fileId), ); return superPlayerModel; } // Platform messages are asynchronous, so we initialize in an async method. Future initPlatformState() async { String sdkVersion; // Platform messages may fail, so we use a try/catch PlatformException. try { sdkVersion = await FlutterSuperPlayer.sdkVersion; } on PlatformException { sdkVersion = 'Failed to get platform version.'; } print('sdkVersion = ${sdkVersion}'); print('mounted = ${mounted}'); // If the widget was removed from the tree while the asynchronous platform // message was in flight, we want to discard the reply rather than calling // setState to update our non-existent appearance. if (!mounted) return; setState(() { _sdkVersion = sdkVersion; }); } void _addLog(String method, dynamic data) { _logs.add('>>>$method'); if (data != null) { _logs.add(data is Map ? json.encode(data) : data); } _logs.add(' '); setState(() {}); } @override Widget build(BuildContext context) { return Scaffold( body: Align( alignment: Alignment(0, 0), child: Container( padding: EdgeInsets.only(top: bFullScreen ? 0 : MediaQueryData.fromWindow(window).padding.top), alignment: Alignment(0, 0), width: MediaQuery.of(context).size.width, child: SuperPlayerView( controller: _playerController, controlViewType: _controlViewType, ), ), ), ); } @override void onClickFloatCloseBtn() { _addLog('onClickFloatCloseBtn', {}); } @override void onClickSmallReturnBtn() { _addLog('onClickSmallReturnBtn', {}); Navigator.maybePop(context); } @override void onFullScreenChange(bool isFullScreen) { _addLog('onFullScreenChange', {'isFullScreen': isFullScreen}); bFullScreen = !bFullScreen; setState(() {}); } @override void onPlayProgressChange(int current, int duration) { _addLog('onPlayProgressChange', {'current': current, 'duration': duration}); } @override void onPlayStateChange(int playState) { _addLog('onPlayStateChange', {'playState': playState}); } @override void onStartFloatWindowPlay() { _addLog('onStartFloatWindowPlay', {}); } }