fix; set subtitle before init (#1742)

* tweka

* fix; set subtitle before init
This commit is contained in:
My-Responsitories
2025-11-15 15:34:23 +08:00
committed by GitHub
parent c89d6a5a59
commit e589f27195
3 changed files with 18 additions and 19 deletions

View File

@@ -121,7 +121,7 @@ class VideoDetailController extends GetxController
final videoPlayerKey = GlobalKey(); final videoPlayerKey = GlobalKey();
final childKey = GlobalKey<ScaffoldState>(); final childKey = GlobalKey<ScaffoldState>();
PlPlayerController plPlayerController = PlPlayerController.getInstance() final plPlayerController = PlPlayerController.getInstance()
..setCurrBrightness(-1.0); ..setCurrBrightness(-1.0);
bool get setSystemBrightness => plPlayerController.setSystemBrightness; bool get setSystemBrightness => plPlayerController.setSystemBrightness;
@@ -755,7 +755,7 @@ class VideoDetailController extends GetxController
Future<void> handleSBData(List<SegmentItemModel> list) async { Future<void> handleSBData(List<SegmentItemModel> list) async {
if (list.isNotEmpty) { if (list.isNotEmpty) {
try { try {
Completer? completer; Future? future;
final duration = list.first.videoDuration ?? data.timeLength!; final duration = list.first.videoDuration ?? data.timeLength!;
// segmentList // segmentList
segmentList.addAll( segmentList.addAll(
@@ -813,21 +813,20 @@ class VideoDetailController extends GetxController
case SkipType.alwaysSkip: case SkipType.alwaysSkip:
case SkipType.skipOnce: case SkipType.skipOnce:
segmentModel.hasSkipped = true; segmentModel.hasSkipped = true;
completer = Completer();
final videoPlayerController = final videoPlayerController =
plPlayerController.videoPlayerController!; plPlayerController.videoPlayerController!;
if (videoPlayerController.state.playing) { if (videoPlayerController.state.playing) {
onSkip( future = onSkip(
segmentModel, segmentModel,
).whenComplete(completer!.complete); );
} else { } else {
videoPlayerController.stream.playing.firstWhere(( videoPlayerController.stream.playing.firstWhere((
e, e,
) { ) {
if (e) { if (e) {
onSkip( future = onSkip(
segmentModel, segmentModel,
).whenComplete(completer!.complete); );
return true; return true;
} }
return false; return false;
@@ -860,7 +859,7 @@ class VideoDetailController extends GetxController
if (positionSubscription == null && if (positionSubscription == null &&
(autoPlay.value || plPlayerController.preInitPlayer)) { (autoPlay.value || plPlayerController.preInitPlayer)) {
await completer?.future; await future;
initSkip(); initSkip();
} }
} catch (e) { } catch (e) {
@@ -1190,11 +1189,11 @@ class VideoDetailController extends GetxController
seasonId: isUgc ? null : seasonId, seasonId: isUgc ? null : seasonId,
pgcType: isUgc ? null : pgcType, pgcType: isUgc ? null : pgcType,
videoType: videoType, videoType: videoType,
callback: () { callback: () async {
if (videoState.value is! Success) { if (videoState.value is! Success) {
videoState.value = const Success(null); videoState.value = const Success(null);
} }
setSubtitle(vttSubtitlesIndex.value); await setSubtitle(vttSubtitlesIndex.value);
}, },
width: firstVideo.width, width: firstVideo.width,
height: firstVideo.height, height: firstVideo.height,
@@ -1486,16 +1485,16 @@ class VideoDetailController extends GetxController
// 设定字幕轨道 // 设定字幕轨道
Future<void> setSubtitle(int index) async { Future<void> setSubtitle(int index) async {
if (index <= 0) { if (index <= 0) {
plPlayerController.videoPlayerController?.setSubtitleTrack( await plPlayerController.videoPlayerController?.setSubtitleTrack(
SubtitleTrack.no(), SubtitleTrack.no(),
); );
vttSubtitlesIndex.value = index; vttSubtitlesIndex.value = index;
return; return;
} }
void setSub(String subtitle) { Future<void> setSub(String subtitle) async {
final sub = subtitles[index - 1]; final sub = subtitles[index - 1];
plPlayerController.videoPlayerController?.setSubtitleTrack( await plPlayerController.videoPlayerController?.setSubtitleTrack(
SubtitleTrack.data( SubtitleTrack.data(
subtitle, subtitle,
title: sub.lanDoc, title: sub.lanDoc,
@@ -1507,14 +1506,14 @@ class VideoDetailController extends GetxController
String? subtitle = vttSubtitles[index - 1]; String? subtitle = vttSubtitles[index - 1];
if (subtitle != null) { if (subtitle != null) {
setSub(subtitle); await setSub(subtitle);
} else { } else {
var result = await VideoHttp.vttSubtitles( var result = await VideoHttp.vttSubtitles(
subtitles[index - 1].subtitleUrl!, subtitles[index - 1].subtitleUrl!,
); );
if (result != null) { if (result != null) {
vttSubtitles[index - 1] = result; vttSubtitles[index - 1] = result;
setSub(result); await setSub(result);
} }
} }
} }
@@ -1634,7 +1633,7 @@ class VideoDetailController extends GetxController
? 1 ? 1
: 0, : 0,
}; };
setSubtitle(idx); await setSubtitle(idx);
} }
} }
} }

View File

@@ -644,8 +644,8 @@ class HeaderControlState extends State<HeaderControl> {
lanDoc: name.split('.').firstOrNull ?? name, lanDoc: name.split('.').firstOrNull ?? name,
), ),
) )
..vttSubtitles[length] = sub ..vttSubtitles[length] = sub;
..setSubtitle(length + 1); await videoDetailCtr.setSubtitle(length + 1);
} }
} }
} catch (e) { } catch (e) {

View File

@@ -703,7 +703,6 @@ class PlPlayerController {
seekTo, seekTo,
volume, volume,
); );
callback?.call();
// 获取视频时长 00:00 // 获取视频时长 00:00
_duration.value = duration ?? _videoPlayerController!.state.duration; _duration.value = duration ?? _videoPlayerController!.state.duration;
_position.value = _buffered.value = _sliderPosition.value = _position.value = _buffered.value = _sliderPosition.value =
@@ -718,6 +717,7 @@ class PlPlayerController {
// listen the video player events // listen the video player events
startListeners(); startListeners();
await _initializePlayer(); await _initializePlayer();
callback?.call();
} catch (err, stackTrace) { } catch (err, stackTrace) {
dataStatus.status.value = DataStatus.error; dataStatus.status.value = DataStatus.error;
if (kDebugMode) { if (kDebugMode) {