feat: 简单实现字幕功能

This commit is contained in:
guozhigq
2024-03-24 23:25:45 +08:00
parent 1f75a7e781
commit 955d8f5401
9 changed files with 318 additions and 62 deletions

View File

@ -20,7 +20,6 @@ import 'package:pilipala/utils/utils.dart';
import 'package:pilipala/utils/video_utils.dart';
import 'package:screen_brightness/screen_brightness.dart';
import '../../../http/index.dart';
import '../../../models/video/subTitile/content.dart';
import '../../../http/danmaku.dart';
import '../../../utils/id_utils.dart';
@ -98,6 +97,7 @@ class VideoDetailController extends GetxController
RxList<SubTitileContentModel> subtitleContents =
<SubTitileContentModel>[].obs;
late bool enableRelatedVideo;
List subtitles = [];
@override
void onInit() {
@ -256,6 +256,8 @@ class VideoDetailController extends GetxController
/// 开启自动全屏时在player初始化完成后立即传入headerControl
plPlayerController.headerControl = headerControl;
plPlayerController.subtitles.value = subtitles;
}
// 视频链接
@ -398,30 +400,38 @@ class VideoDetailController extends GetxController
var result = await VideoHttp.getSubtitle(bvid: bvid, cid: cid.value);
if (result['status']) {
if (result['data'].subtitles.isNotEmpty) {
SmartDialog.showToast('字幕加载中...');
var subtitle = result['data'].subtitles.first;
getSubtitleContent(subtitle.subtitleUrl);
subtitles = result['data'].subtitles;
if (subtitles.isNotEmpty) {
for (var i in subtitles) {
final Map<String, dynamic> res = await VideoHttp.getSubtitleContent(
i.subtitleUrl,
);
i.content = res['content'];
i.body = res['body'];
}
}
}
return result['data'];
} else {
SmartDialog.showToast(result['msg'].toString());
}
}
// 获取字幕内容
Future getSubtitleContent(String url) async {
var res = await Request().get('https:$url');
subtitleContents.value = res.data['body'].map<SubTitileContentModel>((e) {
return SubTitileContentModel.fromJson(e);
}).toList();
setSubtitleContent();
}
// Future getSubtitleContent(String url) async {
// var res = await Request().get('https:$url');
// subtitleContents.value = res.data['body'].map<SubTitileContentModel>((e) {
// return SubTitileContentModel.fromJson(e);
// }).toList();
// setSubtitleContent();
// }
setSubtitleContent() {
plPlayerController.subtitleContent.value = '';
if (subtitleContents.isNotEmpty) {
plPlayerController.subtitleContents = subtitleContents;
}
plPlayerController.subtitles.value = subtitles;
}
clearSubtitleContent() {
plPlayerController.subtitleContent.value = '';
plPlayerController.subtitles.value = [];
}
/// 发送弹幕