diff --git a/lib/models/video/play/url.dart b/lib/models/video/play/url.dart index 0792a760e..4a6ed23f1 100644 --- a/lib/models/video/play/url.dart +++ b/lib/models/video/play/url.dart @@ -129,6 +129,14 @@ class Durl { } } +final _ipRegExp = RegExp(r'^https?://\d{1,3}\.\d{1,3}'); + +bool _isMCDNorPCDN(String url) { + return url.contains("szbdyd.com") || + url.contains(".mcdn.bilivideo") || + _ipRegExp.hasMatch(url); +} + class VideoItem { VideoItem({ this.id, @@ -165,8 +173,10 @@ class VideoItem { VideoItem.fromJson(Map json) { id = json['id']; baseUrl = json['baseUrl']; - backupUrl = - json['backupUrl'] != null ? json['backupUrl'].toList().first : ''; + var backupUrls = json['backupUrl']?.toList() ?? []; + backupUrl = backupUrls.isNotEmpty + ? backupUrls.firstWhere((i) => !_isMCDNorPCDN(i), orElse: () => backupUrls.first) + : ''; bandWidth = json['bandWidth']; mimeType = json['mime_type']; codecs = json['codecs']; @@ -236,8 +246,10 @@ class AudioItem { AudioItem.fromJson(Map json) { id = json['id']; baseUrl = json['baseUrl']; - backupUrl = - json['backupUrl'] != null ? json['backupUrl'].toList().first : ''; + var backupUrls = json['backupUrl']?.toList() ?? []; + backupUrl = backupUrls.isNotEmpty + ? backupUrls.firstWhere((i) => !_isMCDNorPCDN(i), orElse: () => backupUrls.first) + : ''; bandWidth = json['bandWidth']; mimeType = json['mime_type']; codecs = json['codecs']; diff --git a/lib/utils/video_utils.dart b/lib/utils/video_utils.dart index 844b88b22..291cd1579 100644 --- a/lib/utils/video_utils.dart +++ b/lib/utils/video_utils.dart @@ -7,12 +7,6 @@ import 'package:flutter/material.dart'; import '../models/live/room_info.dart'; class VideoUtils { - static bool isMCDNorPCDN(String url) { - return url.contains("szbdyd.com") || - url.contains(".mcdn.bilivideo") || - RegExp(r'^https?://\d{1,3}\.\d{1,3}').hasMatch(url); - } - static String getCdnUrl(dynamic item, [defaultCDNService]) { String? backupUrl; String? videoUrl; @@ -41,9 +35,7 @@ class VideoUtils { if (defaultCDNService == CDNService.backupUrl.code) { return backupUrl.isNullOrEmpty.not ? backupUrl : item.baseUrl ?? ""; } - videoUrl = (backupUrl.isNullOrEmpty || isMCDNorPCDN(backupUrl!)) - ? item.baseUrl - : backupUrl; + videoUrl = backupUrl.isNullOrEmpty ? item.baseUrl : backupUrl; if (videoUrl.isNullOrEmpty) { return "";