From 28e517a8022196c8cd7ed8eaa419904e8b30141f Mon Sep 17 00:00:00 2001 From: orz12 Date: Wed, 6 Mar 2024 15:25:18 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E6=94=B9=E5=96=84=E5=85=A8=E5=B1=8F?= =?UTF-8?q?=E4=B8=8E=E6=92=AD=E6=94=BE=E5=99=A8=E6=9B=B4=E6=96=B0=E4=BD=93?= =?UTF-8?q?=E9=AA=8C=EF=BC=8C=E7=94=A8listener=E4=BB=A3=E6=9B=BF=E7=AD=89?= =?UTF-8?q?=E5=BE=85=E6=97=B6=E9=97=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/video/detail/controller.dart | 1 + lib/plugin/pl_player/controller.dart | 55 ++++++++++++-------------- 2 files changed, 27 insertions(+), 29 deletions(-) diff --git a/lib/pages/video/detail/controller.dart b/lib/pages/video/detail/controller.dart index a171da6e..43768713 100644 --- a/lib/pages/video/detail/controller.dart +++ b/lib/pages/video/detail/controller.dart @@ -163,6 +163,7 @@ class VideoDetailController extends GetxController /// 更新画质、音质 /// TODO 继续进度播放 updatePlayer() { + isShowCover.value = false; defaultST = plPlayerController.position.value; plPlayerController.removeListeners(); plPlayerController.isBuffering.value = false; diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 0b3c8d9b..a3d415c6 100644 --- a/lib/plugin/pl_player/controller.dart +++ b/lib/plugin/pl_player/controller.dart @@ -102,7 +102,7 @@ class PlPlayerController { final RxInt _vttSubtitlesIndex = 0.obs; Timer? _timer; - Timer? _timerForSeek; + StreamSubscription? _bufferedListenerForSeek; Timer? _timerForVolume; Timer? _timerForShowingVolume; Timer? _timerForGettingVolume; @@ -153,7 +153,7 @@ class PlPlayerController { Stream get onMuteChanged => _mute.stream; // 视频字幕 - RxList> get vttSubtitles => _vttSubtitles; + RxList> get vttSubtitles => _vttSubtitles; RxInt get vttSubtitlesIndex => _vttSubtitlesIndex; /// [videoPlayerController] instance of Player @@ -388,7 +388,7 @@ class PlPlayerController { await _initializePlayer(seekTo: seekTo, duration: _duration.value); if (videoType.value != 'live') { refreshSubtitles().then((value) { - if (_vttSubtitles.isNotEmpty){ + if (_vttSubtitles.isNotEmpty) { String preference = setting.get(SettingBoxKey.subtitlePreference, defaultValue: SubtitlePreference.values.first.code); if (preference == 'on') { @@ -547,11 +547,19 @@ class PlPlayerController { } Future autoEnterFullscreen() async { - bool autoEnterFullscreen = - GStrorage.setting.get(SettingBoxKey.enableAutoEnter, defaultValue: false); + bool autoEnterFullscreen = GStrorage.setting + .get(SettingBoxKey.enableAutoEnter, defaultValue: false); if (autoEnterFullscreen) { - await Future.delayed(const Duration(milliseconds: 300)); - triggerFullScreen(status: true); + if (buffered.value == Duration.zero) { + _bufferedListenerForEnterFullscreen = buffered.listen((status) { + if (status > Duration.zero) { + _bufferedListenerForEnterFullscreen.cancel(); + triggerFullScreen(status: true); + } + }); + } else { + triggerFullScreen(status: true); + } } } @@ -656,31 +664,20 @@ class PlPlayerController { _position.value = position; updatePositionSecond(); _heartDuration = position.inSeconds; - if (duration.value.inSeconds != 0) { + if (buffered.value == Duration.zero) { + _bufferedListenerForSeek?.cancel(); + _bufferedListenerForSeek = buffered.listen((status) { + if (status.inSeconds != 0) { + _bufferedListenerForSeek?.cancel(); + _videoPlayerController?.seek(position); + } + }); + } else { if (type != 'slider') { /// 拖动进度条调节时,不等待第一帧,防止抖动 await _videoPlayerController?.stream.buffer.first; } await _videoPlayerController?.seek(position); - // if (playerStatus.stopped) { - // play(); - // } - } else { - print('seek duration else'); - _timerForSeek?.cancel(); - _timerForSeek = - Timer.periodic(const Duration(milliseconds: 200), (Timer t) async { - //_timerForSeek = null; - if (duration.value.inSeconds != 0) { - await _videoPlayerController?.stream.buffer.first; - await _videoPlayerController?.seek(position); - // if (playerStatus.status.value == PlayerStatus.paused) { - // play(); - // } - t.cancel(); - _timerForSeek = null; - } - }); } } @@ -1048,7 +1045,7 @@ class PlPlayerController { _timerForVolume?.cancel(); _timerForGettingVolume?.cancel(); timerForTrackingMouse?.cancel(); - _timerForSeek?.cancel(); + _bufferedListenerForSeek?.cancel(); } // 记录播放记录 @@ -1098,7 +1095,7 @@ class PlPlayerController { _timerForVolume?.cancel(); _timerForGettingVolume?.cancel(); timerForTrackingMouse?.cancel(); - _timerForSeek?.cancel(); + _bufferedListenerForSeek?.cancel(); // _position.close(); _playerEventSubs?.cancel(); // _sliderPosition.close();