From e1343965b2612fb86d9b74fe1dd657a1ab9f8032 Mon Sep 17 00:00:00 2001 From: orz12 Date: Wed, 13 Mar 2024 21:22:41 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20seekTo=E5=BE=AA=E7=8E=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/plugin/pl_player/controller.dart | 43 +++++++++++++++++----------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/lib/plugin/pl_player/controller.dart b/lib/plugin/pl_player/controller.dart index 5c0ab3af..6a709456 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; - StreamSubscription? _bufferedListenerForSeek; + Timer? _timerForSeek; 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 @@ -387,7 +387,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') { @@ -551,8 +551,8 @@ 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) { Future.delayed(const Duration(milliseconds: 500), () { if (dataStatus.status.value != DataStatus.loaded) { @@ -672,20 +672,31 @@ class PlPlayerController { _position.value = position; updatePositionSecond(); _heartDuration = position.inSeconds; - if (buffered.value == Duration.zero) { - _bufferedListenerForSeek?.cancel(); - _bufferedListenerForSeek = buffered.listen((status) { - if (status.inSeconds != 0) { - _bufferedListenerForSeek?.cancel(); - _videoPlayerController?.seek(position); - } - }); - } else { + if (duration.value.inSeconds != 0) { 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; + } + }); } } @@ -1058,7 +1069,7 @@ class PlPlayerController { _timerForVolume?.cancel(); _timerForGettingVolume?.cancel(); timerForTrackingMouse?.cancel(); - _bufferedListenerForSeek?.cancel(); + _timerForSeek?.cancel(); } // 记录播放记录 @@ -1117,7 +1128,7 @@ class PlPlayerController { _timerForVolume?.cancel(); _timerForGettingVolume?.cancel(); timerForTrackingMouse?.cancel(); - _bufferedListenerForSeek?.cancel(); + _timerForSeek?.cancel(); // _position.close(); _playerEventSubs?.cancel(); // _sliderPosition.close();