From 9b0ff83d611febf37a86080f18fb6c3c0cea930d Mon Sep 17 00:00:00 2001 From: okjackcaptain <378702538@qq.com> Date: Wed, 5 Oct 2022 18:58:09 +0800 Subject: [PATCH] =?UTF-8?q?-=20=E5=97=85=E6=8E=A2=E8=A7=84=E5=88=99?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E7=9B=B8=E5=85=B3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../tvbox/osc/ui/activity/PlayActivity.java | 38 ++----------- .../tvbox/osc/ui/fragment/PlayFragment.java | 38 ++----------- .../github/tvbox/osc/util/DefaultConfig.java | 10 +--- .../tvbox/osc/util/VideoParseRuler.java | 56 ++++++++++++------- 4 files changed, 47 insertions(+), 95 deletions(-) diff --git a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java index 397ff360..d88c862e 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/activity/PlayActivity.java @@ -1430,31 +1430,16 @@ public class PlayActivity extends BaseActivity { public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); LOG.i("shouldInterceptRequest url:" + url); - //jpg等无效资源避免请求远程直接返回response - String uselessmMimeType = null; - if (url.contains(".jpg")) { - uselessmMimeType = "image/jpeg"; - } else if (url.contains(".png")) { - uselessmMimeType = "image/png"; - } else if (url.contains(".gif")) { - uselessmMimeType = "image/gif"; - } - if (uselessmMimeType != null && !uselessmMimeType.isEmpty()) { - return new WebResourceResponse(uselessmMimeType, "UTF-8", null); - } HashMap webHeaders = new HashMap<>(); - try { - Map hds = request.getRequestHeaders(); + Map hds = request.getRequestHeaders(); + if (hds != null && hds.keySet().size() > 0) { for (String k : hds.keySet()) { if (k.equalsIgnoreCase("user-agent") || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("accept") || k.equalsIgnoreCase("origin")) { webHeaders.put(k, hds.get(k)); } } - } catch (Throwable th) { - } WebResourceResponse response = checkIsVideo(url, webHeaders); return response; @@ -1570,18 +1555,6 @@ public class PlayActivity extends BaseActivity { } return null; } - //jpg等无效资源避免请求远程直接返回response - String uselessmMimeType = null; - if (url.contains(".jpg")) { - uselessmMimeType = "image/jpeg"; - } else if (url.contains(".png")) { - uselessmMimeType = "image/png"; - } else if (url.contains(".gif")) { - uselessmMimeType = "image/gif"; - } - if (uselessmMimeType != null && !uselessmMimeType.isEmpty()) { - return createXWalkWebResourceResponse(uselessmMimeType, "UTF-8", null); - } boolean ad; if (!loadedUrls.containsKey(url)) { ad = AdBlocker.isAd(url); @@ -1592,18 +1565,15 @@ public class PlayActivity extends BaseActivity { if (!ad ) { if (checkVideoFormat(url)) { HashMap webHeaders = new HashMap<>(); - try { - Map hds = request.getRequestHeaders(); + Map hds = request.getRequestHeaders(); + if (hds != null && hds.keySet().size() > 0) { for (String k : hds.keySet()) { if (k.equalsIgnoreCase("user-agent") || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("accept") || k.equalsIgnoreCase("origin")) { webHeaders.put(k, hds.get(k)); } } - } catch (Throwable th) { - } loadFoundVideoUrls.add(url); loadFoundVideoUrlsHeader.put(url, webHeaders); diff --git a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java index 5bb93a67..3fdb9100 100644 --- a/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java +++ b/app/src/main/java/com/github/tvbox/osc/ui/fragment/PlayFragment.java @@ -1454,31 +1454,16 @@ public class PlayFragment extends BaseLazyFragment { public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { String url = request.getUrl().toString(); LOG.i("shouldInterceptRequest url:" + url); - //jpg等无效资源避免请求远程直接返回response - String uselessmMimeType = null; - if (url.contains(".jpg")) { - uselessmMimeType = "image/jpeg"; - } else if (url.contains(".png")) { - uselessmMimeType = "image/png"; - } else if (url.contains(".gif")) { - uselessmMimeType = "image/gif"; - } - if (uselessmMimeType != null && !uselessmMimeType.isEmpty()) { - return new WebResourceResponse(uselessmMimeType, "UTF-8", null); - } HashMap webHeaders = new HashMap<>(); - try { - Map hds = request.getRequestHeaders(); + Map hds = request.getRequestHeaders(); + if (hds != null && hds.keySet().size() > 0) { for (String k : hds.keySet()) { if (k.equalsIgnoreCase("user-agent") || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("accept") || k.equalsIgnoreCase("origin")) { webHeaders.put(k, hds.get(k)); } } - } catch (Throwable th) { - } WebResourceResponse response = checkIsVideo(url, webHeaders); return response; @@ -1594,18 +1579,6 @@ public class PlayFragment extends BaseLazyFragment { } return null; } - //jpg等无效资源避免请求远程直接返回response - String uselessmMimeType = null; - if (url.contains(".jpg")) { - uselessmMimeType = "image/jpeg"; - } else if (url.contains(".png")) { - uselessmMimeType = "image/png"; - } else if (url.contains(".gif")) { - uselessmMimeType = "image/gif"; - } - if (uselessmMimeType != null && !uselessmMimeType.isEmpty()) { - return createXWalkWebResourceResponse(uselessmMimeType, "UTF-8", null); - } boolean ad; if (!loadedUrls.containsKey(url)) { ad = AdBlocker.isAd(url); @@ -1616,18 +1589,15 @@ public class PlayFragment extends BaseLazyFragment { if (!ad ) { if (checkVideoFormat(url)) { HashMap webHeaders = new HashMap<>(); - try { - Map hds = request.getRequestHeaders(); + Map hds = request.getRequestHeaders(); + if (hds != null && hds.keySet().size() > 0) { for (String k : hds.keySet()) { if (k.equalsIgnoreCase("user-agent") || k.equalsIgnoreCase("referer") - || k.equalsIgnoreCase("accept") || k.equalsIgnoreCase("origin")) { webHeaders.put(k, hds.get(k)); } } - } catch (Throwable th) { - } loadFoundVideoUrls.add(url); loadFoundVideoUrlsHeader.put(url, webHeaders); diff --git a/app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java b/app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java index 75d662c9..04c06234 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java +++ b/app/src/main/java/com/github/tvbox/osc/util/DefaultConfig.java @@ -106,10 +106,7 @@ public class DefaultConfig { return start > -1 ? fileName.substring(0, start) : fileName; } - //增加对flv|avi|mkv|rm|wmv|mpg等几种视频格式的支持 - //private static final Pattern snifferMatch = Pattern.compile("http((?!http).){26,}?\\.(m3u8|mp4)\\?.*|http((?!http).){26,}\\.(m3u8|mp4)|http((?!http).){26,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?cdn-tos[^\\?]*|http((?!http).)*?/obj/tos[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/player/.*?[pP]lay\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*"); - private static final Pattern snifferMatch = Pattern.compile("http((?!http).)*?default\\.365yg\\.com/.*|http((?!http).){20,}?/m3u8\\?pt=m3u8.*|http((?!http).)*?default\\.ixigua\\.com/.*|http((?!http).)*?dycdn-tos\\.pstatp[^\\?]*|http.*?/player/m3u8play\\.php\\?url=.*|http.*?/playlist/m3u8/\\?vid=.*|http.*?\\.php\\?type=m3u8&.*|http.*?/download.aspx\\?.*|http.*?/api/up_api.php\\?.*|https.*?\\.66yk\\.cn.*|http((?!http).)*?netease\\.com/file/.*"); - private static final String[] videoSubfix = {"m3u8","mp4","flv","avi","mkv","rm","wmv","mpg"}; + private static final String[] videoSuffix = {"m3u8","mp4","flv","avi","mkv","rm","wmv","mpg"}; public static boolean isVideoFormat(String url) { if (url.contains("=http")) { return false; @@ -126,14 +123,11 @@ public class DefaultConfig { if (query != null && query.startsWith("http")) { return false; } - for(String oneSubfix : videoSubfix) { + for(String oneSubfix : videoSuffix) { if (path.endsWith("." + oneSubfix)) { return true; } } - if (snifferMatch.matcher(url).find()) { - return true; - } return false; } diff --git a/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java b/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java index 0dff5f55..bd51dbf3 100644 --- a/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java +++ b/app/src/main/java/com/github/tvbox/osc/util/VideoParseRuler.java @@ -1,22 +1,23 @@ package com.github.tvbox.osc.util; import android.net.Uri; - -import androidx.annotation.Nullable; - import java.util.ArrayList; import java.util.HashMap; public class VideoParseRuler { - private static final HashMap> HOSTS_RULE = new HashMap<>(); + private static final HashMap>> HOSTS_RULE = new HashMap<>(); public static void addHostRule(String host, ArrayList rule) { - HOSTS_RULE.put(host, rule); + ArrayList> rules = new ArrayList<>(); + if (HOSTS_RULE.get(host) != null && HOSTS_RULE.get(host).size() > 0) { + rules = HOSTS_RULE.get(host); + } + rules.add(rule); + HOSTS_RULE.put(host, rules); } - @Nullable - public static ArrayList getHostRule(String host) { + public static ArrayList> getHostRules(String host) { if (HOSTS_RULE.containsKey(host)) { return HOSTS_RULE.get(host); } @@ -31,18 +32,9 @@ public class VideoParseRuler { } if (!isVideo) { Uri uri = Uri.parse(webUrl); - ArrayList hostRule = getHostRule(uri.getHost()); - if (hostRule != null && hostRule.size() > 0) { - boolean checkIsVideo = true; - for(int i=0; i> hostRules = getHostRules(host); + if (hostRules != null && hostRules.size() > 0) { + + boolean isVideoRuleCheck = false; + for(int i=0; i