From 35dc94014c8346fd28a8c03bd0a97bbdd58b35cc Mon Sep 17 00:00:00 2001 From: guozhigq Date: Fri, 23 Feb 2024 00:30:26 +0800 Subject: [PATCH] =?UTF-8?q?mod:=20=E7=9B=B4=E6=92=ADmcdn=E9=93=BE=E6=8E=A5?= =?UTF-8?q?=E6=9B=BF=E6=8D=A2=20issues=20#568?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/pages/live_room/controller.dart | 13 ++++++++++--- lib/utils/video_utils.dart | 13 +++++++++++-- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/lib/pages/live_room/controller.dart b/lib/pages/live_room/controller.dart index ee7b8214..2bb1cd0a 100644 --- a/lib/pages/live_room/controller.dart +++ b/lib/pages/live_room/controller.dart @@ -4,6 +4,8 @@ import 'package:pilipala/http/live.dart'; import 'package:pilipala/models/live/room_info.dart'; import 'package:pilipala/plugin/pl_player/index.dart'; import '../../models/live/room_info_h5.dart'; +import '../../utils/storage.dart'; +import '../../utils/video_utils.dart'; class LiveRoomController extends GetxController { String cover = ''; @@ -16,6 +18,7 @@ class LiveRoomController extends GetxController { PlPlayerController plPlayerController = PlPlayerController.getInstance(videoType: 'live'); Rx roomInfoH5 = RoomInfoH5Model().obs; + late bool enableCDN; @override void onInit() { @@ -31,6 +34,8 @@ class LiveRoomController extends GetxController { cover = liveItem.cover; } } + // CDN优化 + enableCDN = setting.get(SettingBoxKey.enableCDN, defaultValue: true); } playerInit(source) async { @@ -57,9 +62,11 @@ class LiveRoomController extends GetxController { List codec = res['data'].playurlInfo.playurl.stream.first.format.first.codec; CodecItem item = codec.first; - String videoUrl = (item.urlInfo?.first.host)! + - item.baseUrl! + - item.urlInfo!.first.extra!; + String videoUrl = enableCDN + ? VideoUtils.getCdnUrl(item) + : (item.urlInfo?.first.host)! + + item.baseUrl! + + item.urlInfo!.first.extra!; await playerInit(videoUrl); return res; } diff --git a/lib/utils/video_utils.dart b/lib/utils/video_utils.dart index 88faba3c..a4bdd027 100644 --- a/lib/utils/video_utils.dart +++ b/lib/utils/video_utils.dart @@ -1,5 +1,7 @@ import 'package:pilipala/models/video/play/url.dart'; +import '../models/live/room_info.dart'; + class VideoUtils { static String getCdnUrl(dynamic item) { var backupUrl = ""; @@ -12,13 +14,20 @@ class VideoUtils { } else if (item is AudioItem) { backupUrl = item.backupUrl ?? ""; videoUrl = backupUrl.contains("http") ? backupUrl : (item.baseUrl ?? ""); + } else if (item is CodecItem) { + backupUrl = (item.urlInfo?.first.host)! + + item.baseUrl! + + item.urlInfo!.first.extra!; + videoUrl = backupUrl.contains("http") ? backupUrl : (item.baseUrl ?? ""); } else { return ""; } /// issues #70 - if (videoUrl.contains(".mcdn.bilivideo") || - videoUrl.contains("/upgcxcode/")) { + if (videoUrl.contains(".mcdn.bilivideo")) { + videoUrl = + 'https://proxy-tf-all-ws.bilivideo.com/?url=${Uri.encodeComponent(videoUrl)}'; + } else if (videoUrl.contains("/upgcxcode/")) { //CDN列表 var cdnList = { 'ali': 'upos-sz-mirrorali.bilivideo.com',