From 2035ae90f34f122d16c67caa26653a734472e9f9 Mon Sep 17 00:00:00 2001 From: orz12 Date: Wed, 12 Jun 2024 18:34:07 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E6=8F=90=E5=89=8D=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E5=B0=81=E9=9D=A2=E3=80=81=E7=82=B9=E5=87=BB=E5=B0=8F=E7=94=B5?= =?UTF-8?q?=E8=A7=86=E5=BC=BA=E5=88=B6=E5=B0=9D=E8=AF=95=E6=92=AD=E6=94=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/video/detail/controller.dart | 5 +++-- lib/pages/video/detail/view.dart | 6 +++--- lib/plugin/pl_player/controller.dart | 17 ++++++++++++++++- lib/plugin/pl_player/view.dart | 9 +++++++-- 4 files changed, 29 insertions(+), 8 deletions(-) diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index 3fc3b242..9f3fd369 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -117,6 +117,7 @@ class VideoDetailController extends GetxController length: 2, vsync: this, initialIndex: defaultShowComment ? 1 : 0); autoPlay.value = setting.get(SettingBoxKey.autoPlayEnable, defaultValue: true); + if (autoPlay.value) isShowCover.value = false; enableHA.value = setting.get(SettingBoxKey.enableHA, defaultValue: true); hwdec.value = setting.get(SettingBoxKey.hardwareDecoding, defaultValue: Platform.isAndroid ? 'auto-safe' : 'auto'); @@ -319,8 +320,8 @@ class VideoDetailController extends GetxController currentDecodeFormats = VideoDecodeFormatsCode.fromString('avc1')!; currentVideoQa = VideoQualityCode.fromCode(data.quality!)!; if (autoPlay.value) { - await playerInit(); isShowCover.value = false; + await playerInit(); } return result; } @@ -421,8 +422,8 @@ class VideoDetailController extends GetxController } defaultST = Duration(milliseconds: data.lastPlayTime!); if (autoPlay.value) { - await playerInit(); isShowCover.value = false; + await playerInit(); } } else { if (result['code'] == -404) { diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index 21f6f400..dfefc53f 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -200,13 +200,13 @@ class _VideoDetailPageState extends State /// 未开启自动播放时触发播放 Future handlePlay() async { + videoDetailController.isShowCover.value = false; await videoDetailController.playerInit(); plPlayerController = videoDetailController.plPlayerController; plPlayerController!.addStatusLister(playerListener); listenFullScreenStatus(); await plPlayerController!.autoEnterFullscreen(); videoDetailController.autoPlay.value = true; - videoDetailController.isShowCover.value = false; } // // 生命周期监听 @@ -310,11 +310,11 @@ class _VideoDetailPageState extends State super.didPopNext(); videoDetailController.isFirstTime = false; final bool autoplay = autoPlayEnable; + videoDetailController.autoPlay.value = + !videoDetailController.isShowCover.value; await videoDetailController.playerInit(autoplay: autoplay); /// 未开启自动播放时,未播放跳转下一页返回/播放后跳转下一页返回 - videoDetailController.autoPlay.value = - !videoDetailController.isShowCover.value; videoIntroController.isPaused = false; // if (autoplay) { // // await Future.delayed(const Duration(milliseconds: 300)); diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index c14008d5..69a5100e 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -101,6 +101,8 @@ class PlPlayerController { int _cid = 0; int _heartDuration = 0; bool _enableHeart = true; + + late DataSource dataSource; final RxList> _vttSubtitles = >[].obs; final RxInt _vttSubtitlesIndex = 0.obs; @@ -411,6 +413,7 @@ class PlPlayerController { bool enableHeart = true, }) async { try { + this.dataSource = dataSource; _autoPlay = autoplay; _looping = looping; // 初始化视频倍速 @@ -595,6 +598,16 @@ class PlPlayerController { return player; } + Future refreshPlayer() async { + await _videoPlayerController?.open( + Media( + dataSource.videoSource!, + httpHeaders: dataSource.httpHeaders, + ), + play: true, + ); + } + // 开始播放 Future _initializePlayer({ Duration seekTo = Duration.zero, @@ -1102,6 +1115,8 @@ class PlPlayerController { Future triggerFullScreen({bool status = true}) async { FullScreenMode mode = FullScreenModeCode.fromCode( setting.get(SettingBoxKey.fullScreenMode, defaultValue: 0))!; + bool removeSafeArea = setting.get(SettingBoxKey.videoPlayerRemoveSafeArea, + defaultValue: false); if (!isFullScreen.value && status) { // StatusBarControl.setHidden(true, animation: StatusBarAnimation.FADE); hideStatusBar(); @@ -1124,7 +1139,7 @@ class PlPlayerController { } } else if (isFullScreen.value && !status) { // StatusBarControl.setHidden(false, animation: StatusBarAnimation.FADE); - showStatusBar(); + if (!removeSafeArea) showStatusBar(); toggleFullScreen(false); if (mode == FullScreenMode.none) { return; diff --git a/lib/plugin/pl_player/view.dart b/lib/plugin/pl_player/view.dart index 2813c1b6..10a7609f 100644 --- a/lib/plugin/pl_player/view.dart +++ b/lib/plugin/pl_player/view.dart @@ -1043,7 +1043,12 @@ class _PLVideoPlayerState extends State Obx(() { if (_.dataStatus.loading || _.isBuffering.value) { return Center( - child: Container( + child: GestureDetector( + onTap: () { + _.refreshPlayer(); + }, + child: + Container( padding: const EdgeInsets.all(30), decoration: const BoxDecoration( shape: BoxShape.circle, @@ -1057,7 +1062,7 @@ class _PLVideoPlayerState extends State semanticLabel: "加载中", ), ), - ); + )); } else { return const SizedBox(); }