opt: get video subtitle

Signed-off-by: bggRGjQaUbCoE <githubaccount56556@proton.me>
This commit is contained in:
bggRGjQaUbCoE
2024-12-03 21:00:29 +08:00
parent c8a4be00ce
commit 48d4e3ed34
2 changed files with 38 additions and 32 deletions

View File

@@ -871,6 +871,10 @@ class VideoDetailController extends GetxController
_initSkip(); _initSkip();
if (vttSubtitlesIndex == null) {
_getSubtitle();
}
/// 开启自动全屏时在player初始化完成后立即传入headerControl /// 开启自动全屏时在player初始化完成后立即传入headerControl
plPlayerController.headerControl = headerControl; plPlayerController.headerControl = headerControl;
} }
@@ -883,7 +887,6 @@ class VideoDetailController extends GetxController
if (enableSponsorBlock) { if (enableSponsorBlock) {
await _querySponsorBlock(); await _querySponsorBlock();
} }
_getSubtitle();
if (data.acceptDesc!.isNotEmpty && data.acceptDesc!.contains('试看')) { if (data.acceptDesc!.isNotEmpty && data.acceptDesc!.contains('试看')) {
SmartDialog.showToast( SmartDialog.showToast(
'该视频为专属视频,仅提供试看', '该视频为专属视频,仅提供试看',
@@ -1580,12 +1583,11 @@ class VideoDetailController extends GetxController
} }
List<Map<String, String>> _vttSubtitles = <Map<String, String>>[]; List<Map<String, String>> _vttSubtitles = <Map<String, String>>[];
int vttSubtitlesIndex = 0; int? vttSubtitlesIndex;
bool showVP = true; bool showVP = true;
void _getSubtitle() { void _getSubtitle() {
_vttSubtitles.clear(); _vttSubtitles.clear();
vttSubtitlesIndex = 0;
viewPointList.clear(); viewPointList.clear();
_querySubtitles().then((value) { _querySubtitles().then((value) {
if (_vttSubtitles.isNotEmpty) { if (_vttSubtitles.isNotEmpty) {
@@ -1606,9 +1608,9 @@ class VideoDetailController extends GetxController
} }
if (plPlayerController.vttSubtitles.isEmpty) { if (plPlayerController.vttSubtitles.isEmpty) {
plPlayerController.vttSubtitles.value = _vttSubtitles; plPlayerController.vttSubtitles.value = _vttSubtitles;
plPlayerController.vttSubtitlesIndex.value = vttSubtitlesIndex; plPlayerController.vttSubtitlesIndex.value = vttSubtitlesIndex!;
if (vttSubtitlesIndex != 0) { if (vttSubtitlesIndex != 0) {
plPlayerController.setSubtitle(vttSubtitlesIndex); plPlayerController.setSubtitle(vttSubtitlesIndex!);
} }
} }
} }
@@ -1621,34 +1623,37 @@ class VideoDetailController extends GetxController
// SmartDialog.showToast('查询字幕错误,${res["msg"]}'); // SmartDialog.showToast('查询字幕错误,${res["msg"]}');
// } // }
if (res["data"] is List && res["data"].isNotEmpty) { if (res['status']) {
var result = await VideoHttp.vttSubtitles(res["data"]); vttSubtitlesIndex = 0;
if (result != null) { if (res["data"] is List && res["data"].isNotEmpty) {
_vttSubtitles = result; var result = await VideoHttp.vttSubtitles(res["data"]);
if (result != null) {
_vttSubtitles = result;
}
// if (_vttSubtitles.isEmpty) {
// SmartDialog.showToast('字幕均加载失败');
// }
} }
// if (_vttSubtitles.isEmpty) { if (GStorage.showViewPoints &&
// SmartDialog.showToast('字幕均加载失败'); res["view_points"] is List &&
// } res["view_points"].isNotEmpty) {
} viewPointList = (res["view_points"] as List).map((item) {
if (GStorage.showViewPoints && double start =
res["view_points"] is List && (item['to'] / ((data.timeLength ?? 0) / 1000)).clamp(0.0, 1.0);
res["view_points"].isNotEmpty) { return Segment(
viewPointList = (res["view_points"] as List).map((item) { start,
double start = start,
(item['to'] / ((data.timeLength ?? 0) / 1000)).clamp(0.0, 1.0); Colors.black87,
return Segment( item?['content'],
start, item?['imgUrl'],
start, item?['from'],
Colors.black87, item?['to'],
item?['content'], );
item?['imgUrl'], }).toList();
item?['from'], if (plPlayerController.viewPointList.isEmpty) {
item?['to'], plPlayerController.viewPointList.value = viewPointList;
); plPlayerController.showVP.value = showVP = true;
}).toList(); }
if (plPlayerController.viewPointList.isEmpty) {
plPlayerController.viewPointList.value = viewPointList;
plPlayerController.showVP.value = showVP = true;
} }
} }
} }

View File

@@ -540,6 +540,7 @@ class VideoIntroController extends GetxController
// 重新获取视频资源 // 重新获取视频资源
final VideoDetailController videoDetailCtr = final VideoDetailController videoDetailCtr =
Get.find<VideoDetailController>(tag: heroTag); Get.find<VideoDetailController>(tag: heroTag);
videoDetailCtr.vttSubtitlesIndex = null;
videoDetailCtr.bvid = bvid; videoDetailCtr.bvid = bvid;
videoDetailCtr.oid.value = aid ?? IdUtils.bv2av(bvid); videoDetailCtr.oid.value = aid ?? IdUtils.bv2av(bvid);
videoDetailCtr.cid.value = cid; videoDetailCtr.cid.value = cid;