From cfb6c674eafff015d0f04fee86c55128bd3ba5fc Mon Sep 17 00:00:00 2001 From: My-Responsitories <107370289+My-Responsitories@users.noreply.github.com> Date: Wed, 19 Feb 2025 06:55:02 +0000 Subject: [PATCH] skip mcdn on parsing (#281) --- lib/models/video/play/url.dart | 20 ++++++++++++++++---- lib/utils/video_utils.dart | 10 +--------- 2 files changed, 17 insertions(+), 13 deletions(-) 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 "";