mirror of
https://github.com/HChaZZY/PiliPlus.git
synced 2025-12-06 09:13:48 +08:00
refa: subtitle
Closes #553 Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
@@ -111,9 +111,6 @@ class PlPlayerController {
|
||||
bool _enableHeart = true;
|
||||
|
||||
late DataSource dataSource;
|
||||
// 视频字幕
|
||||
final RxList<Map<String, String>> vttSubtitles = <Map<String, String>>[].obs;
|
||||
final RxInt vttSubtitlesIndex = 0.obs;
|
||||
|
||||
Timer? _timer;
|
||||
Timer? _timerForSeek;
|
||||
@@ -471,8 +468,6 @@ class PlPlayerController {
|
||||
DataSource dataSource, {
|
||||
List<Segment>? segmentList,
|
||||
List<Segment>? viewPointList,
|
||||
List<Map<String, String>>? vttSubtitles,
|
||||
int? vttSubtitlesIndex,
|
||||
bool? showVP,
|
||||
List? dmTrend,
|
||||
bool autoplay = true,
|
||||
@@ -504,8 +499,6 @@ class PlPlayerController {
|
||||
this.dataSource = dataSource;
|
||||
this.segmentList.value = segmentList ?? <Segment>[];
|
||||
this.viewPointList.value = viewPointList ?? <Segment>[];
|
||||
this.vttSubtitles.value = vttSubtitles ?? <Map<String, String>>[];
|
||||
this.vttSubtitlesIndex.value = vttSubtitlesIndex ?? 0;
|
||||
this.showVP.value = showVP ?? true;
|
||||
this.dmTrend.value = dmTrend ?? [];
|
||||
_autoPlay = autoplay;
|
||||
@@ -555,7 +548,6 @@ class PlPlayerController {
|
||||
startListeners();
|
||||
}
|
||||
await _initializePlayer();
|
||||
setSubtitle(this.vttSubtitlesIndex.value);
|
||||
} catch (err, stackTrace) {
|
||||
dataStatus.status.value = DataStatus.error;
|
||||
debugPrint(stackTrace.toString());
|
||||
@@ -1574,22 +1566,6 @@ class PlPlayerController {
|
||||
}
|
||||
}
|
||||
|
||||
// 设定字幕轨道
|
||||
setSubtitle(int index) {
|
||||
if (index == 0) {
|
||||
_videoPlayerController?.setSubtitleTrack(SubtitleTrack.no());
|
||||
vttSubtitlesIndex.value = 0;
|
||||
return;
|
||||
}
|
||||
Map<String, String> s = vttSubtitles[index];
|
||||
_videoPlayerController?.setSubtitleTrack(SubtitleTrack.data(
|
||||
s['text']!,
|
||||
title: s['title']!,
|
||||
language: s['language']!,
|
||||
));
|
||||
vttSubtitlesIndex.value = index;
|
||||
}
|
||||
|
||||
static void updatePlayCount() {
|
||||
if (_instance?._playerCount.value == 1) {
|
||||
_instance?.dispose();
|
||||
|
||||
@@ -550,40 +550,52 @@ class _PLVideoPlayerState extends State<PLVideoPlayer>
|
||||
|
||||
/// 字幕
|
||||
BottomControlType.subtitle: Obx(
|
||||
() => plPlayerController.vttSubtitles.isEmpty
|
||||
() => widget.videoDetailController?.subtitles.isEmpty == true
|
||||
? const SizedBox.shrink()
|
||||
: SizedBox(
|
||||
width: widgetWidth,
|
||||
height: 30,
|
||||
child: PopupMenuButton<int>(
|
||||
initialValue: plPlayerController.vttSubtitles.length <
|
||||
plPlayerController.vttSubtitlesIndex.value
|
||||
? 0
|
||||
: plPlayerController.vttSubtitlesIndex.value,
|
||||
initialValue: widget
|
||||
.videoDetailController!.vttSubtitlesIndex.value
|
||||
.clamp(0, widget.videoDetailController!.subtitles.length),
|
||||
color: Colors.black.withOpacity(0.8),
|
||||
itemBuilder: (BuildContext context) {
|
||||
return plPlayerController.vttSubtitles
|
||||
.asMap()
|
||||
.entries
|
||||
.map((entry) {
|
||||
return PopupMenuItem<int>(
|
||||
value: entry.key,
|
||||
return [
|
||||
PopupMenuItem<int>(
|
||||
value: 0,
|
||||
onTap: () {
|
||||
plPlayerController.setSubtitle(entry.key);
|
||||
widget.videoDetailController!.setSubtitle(0);
|
||||
},
|
||||
child: Text(
|
||||
"${entry.value['title']}",
|
||||
"关闭字幕",
|
||||
style: const TextStyle(color: Colors.white),
|
||||
),
|
||||
);
|
||||
}).toList();
|
||||
),
|
||||
...widget.videoDetailController!.subtitles
|
||||
.asMap()
|
||||
.entries
|
||||
.map((entry) {
|
||||
return PopupMenuItem<int>(
|
||||
value: entry.key + 1,
|
||||
onTap: () {
|
||||
widget.videoDetailController!
|
||||
.setSubtitle(entry.key + 1);
|
||||
},
|
||||
child: Text(
|
||||
"${entry.value['lan_doc']}",
|
||||
style: const TextStyle(color: Colors.white),
|
||||
),
|
||||
);
|
||||
})
|
||||
];
|
||||
},
|
||||
child: Container(
|
||||
width: 35,
|
||||
height: 30,
|
||||
alignment: Alignment.center,
|
||||
child: Icon(
|
||||
plPlayerController.vttSubtitlesIndex.value == 0
|
||||
widget.videoDetailController!.vttSubtitlesIndex.value == 0
|
||||
? Icons.closed_caption_off_outlined
|
||||
: Icons.closed_caption_off_rounded,
|
||||
size: 22,
|
||||
|
||||
Reference in New Issue
Block a user