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(); }