feat: 简单实现字幕功能
This commit is contained in:
@ -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 = [];
|
||||
}
|
||||
|
||||
/// 发送弹幕
|
||||
|
||||
Reference in New Issue
Block a user