diff --git a/lib/pages/setting/widgets/model.dart b/lib/pages/setting/widgets/model.dart index 00687c44..04b492b1 100644 --- a/lib/pages/setting/widgets/model.dart +++ b/lib/pages/setting/widgets/model.dart @@ -1887,6 +1887,14 @@ List get extraSettings => [ } }, ), + SettingsModel( + settingsType: SettingsType.sw1tch, + title: '提前初始化播放器', + subtitle: '相对减少手动播放加载时间', + leading: Icon(Icons.play_circle_outlined), + setKey: SettingBoxKey.preInitPlayer, + defaultVal: false, + ), SettingsModel( settingsType: SettingsType.sw1tch, enableFeedback: true, diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index 6fa12d7d..0893d0b2 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -225,6 +225,7 @@ class VideoDetailController extends GetxController bool get showReply => videoType == SearchType.video ? _showVideoReply : _showBangumiReply; + late final preInitPlayer = GStorage.preInitPlayer; late final horizontalSeasonPanel = GStorage.horizontalSeasonPanel; int? seasonCid; late RxInt seasonIndex = 0.obs; @@ -1205,6 +1206,8 @@ class VideoDetailController extends GetxController if (autoPlay.value) { isShowCover.value = false; await playerInit(); + } else if (preInitPlayer) { + await playerInit(); } isQuerying = false; return; @@ -1313,6 +1316,8 @@ class VideoDetailController extends GetxController if (autoPlay.value) { isShowCover.value = false; await playerInit(); + } else if (preInitPlayer) { + await playerInit(); } } else { autoPlay.value = false; diff --git a/lib/pages/video/detail/view.dart b/lib/pages/video/detail/view.dart index e4839487..890ca10d 100644 --- a/lib/pages/video/detail/view.dart +++ b/lib/pages/video/detail/view.dart @@ -298,7 +298,11 @@ class _VideoDetailPageState extends State plPlayerController = videoDetailController.plPlayerController; videoDetailController.isShowCover.value = false; videoDetailController.autoPlay.value = true; - await videoDetailController.playerInit(autoplay: true); + if (videoDetailController.preInitPlayer) { + await plPlayerController!.play(); + } else { + await videoDetailController.playerInit(autoplay: true); + } plPlayerController!.addStatusLister(playerListener); plPlayerController!.addPositionListener(positionListener); await plPlayerController!.autoEnterFullscreen(); @@ -433,6 +437,8 @@ class _VideoDetailPageState extends State await videoDetailController.playerInit( autoplay: videoDetailController.playerStatus == PlayerStatus.playing, ); + } else if (videoDetailController.preInitPlayer) { + await videoDetailController.playerInit(); } // if (videoDetailController.playerStatus == PlayerStatus.playing) { diff --git a/lib/utils/storage.dart b/lib/utils/storage.dart index df8c9a41..ec6ea400 100644 --- a/lib/utils/storage.dart +++ b/lib/utils/storage.dart @@ -342,6 +342,9 @@ class GStorage { static int get superResolutionType => GStorage.setting.get(SettingBoxKey.superResolutionType, defaultValue: 0); + static bool get preInitPlayer => + GStorage.setting.get(SettingBoxKey.preInitPlayer, defaultValue: false); + static List get dynamicDetailRatio => List.from(setting .get(SettingBoxKey.dynamicDetailRatio, defaultValue: [60.0, 40.0])); @@ -565,6 +568,7 @@ class SettingBoxKey { showHotRcmd = 'showHotRcmd', audioNormalization = 'audioNormalization', superResolutionType = 'superResolutionType', + preInitPlayer = 'preInitPlayer', // Sponsor Block enableSponsorBlock = 'enableSponsorBlock',