From 399d7b3813d8f2f7210acef7b042316b7b972716 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8E=E4=BF=8A?= <215613905@qq.com> Date: Thu, 20 Feb 2025 10:38:38 +0800 Subject: [PATCH] =?UTF-8?q?=E8=A7=A3=E5=86=B3itv=E7=9B=B4=E6=92=AD?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E5=81=B6=E7=8E=B0=E4=B8=8D=E8=83=BD=E8=83=BD?= =?UTF-8?q?=E6=92=AD=E6=94=BE=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../osc/ui/activity/LivePlayActivity.java | 7 --- .../com/github/tvbox/osc/util/OkGoHelper.java | 48 +++++++++++++++++-- 2 files changed, 43 insertions(+), 12 deletions(-) diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java index 4a590f2b..2685785c 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/LivePlayActivity.java @@ -1577,13 +1577,6 @@ public class LivePlayActivity extends BaseActivity { } }); } - @Override - public void onError(Response response) { - super.onError(response); - // 在请求失败或超时的情况下返回false - Toast.makeText(App.getInstance(), "请求超时", Toast.LENGTH_SHORT).show(); - finish(); - } }); } diff --git a/app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java b/app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java index 052b3468..2dba074a 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java +++ b/app/src/main/java/com/github/tvbox/osc/util/OkGoHelper.java @@ -20,10 +20,13 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.security.cert.CertificateException; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Objects; +import java.util.Set; +import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.TimeUnit; import java.util.logging.Level; @@ -41,7 +44,7 @@ import xyz.doikki.videoplayer.exo.ExoMediaSourceHelper; public class OkGoHelper { - public static final long DEFAULT_MILLISECONDS = 6000; //默认的超时时间 + public static final long DEFAULT_MILLISECONDS = 8000; //默认的超时时间 static void initExoOkHttpClient() { OkHttpClient.Builder builder = new OkHttpClient.Builder(); @@ -136,21 +139,56 @@ public class OkGoHelper { // 自定义 DNS 解析器 static class CustomDns implements Dns { + private ConcurrentHashMap> map; + private final String excludeIps = "2409:8087:6c02:14:100::14,2409:8087:6c02:14:100::18,39.134.108.253,39.134.108.245"; @NonNull @Override public List lookup(@NonNull String hostname) throws UnknownHostException { - if (myHosts == null) myHosts = ApiConfig.get().getMyHost(); //确保只获取一次减少消耗 + if (myHosts == null){ + myHosts = ApiConfig.get().getMyHost(); //确保只获取一次减少消耗 + if(!myHosts.isEmpty())mapHosts(myHosts); + } // 判断输入是否为 IP 地址 if (isValidIpAddress(hostname)) { return Collections.singletonList(InetAddress.getByName(hostname)); - } else if (!myHosts.isEmpty() && myHosts.containsKey(hostname)) { - return Arrays.asList(InetAddress.getAllByName(myHosts.get(hostname))); + } else if (!map.isEmpty() && map.containsKey(hostname)) { + return Objects.requireNonNull(map.get(hostname)); } else { // return (is_doh?dnsOverHttps:Dns.SYSTEM).lookup(hostname); return (dnsOverHttps).lookup(hostname); } } + public synchronized void mapHosts(Map hosts) { + map=new ConcurrentHashMap<>(); + for (Map.Entry entry : hosts.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + map.put(key,getAllByName(value)); + } + } + + private List getAllByName(String host) { + try { + // 获取所有与主机名关联的 IP 地址 + InetAddress[] allAddresses = InetAddress.getAllByName(host); + // 创建一个列表用于存储有效的 IP 地址 + List validAddresses = new ArrayList<>(); + Set excludeIpsSet = new HashSet<>(); + for (String ip : excludeIps.split(",")) { + excludeIpsSet.add(ip.trim()); // 添加到集合,去除多余的空格 + } + for (InetAddress address : allAddresses) { + if (!excludeIpsSet.contains(address.getHostAddress())) { + validAddresses.add(address); + } + } + return validAddresses; + } catch (Exception e) { + return new ArrayList<>(); + } + } + //简单判断减少开销 private boolean isValidIpAddress(String str) { // 处理 IPv4 地址的判断