From 4f54caa7add382efc6baf4a2ea40a4850517cb7b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8E=E4=BF=8A?= <215613905@qq.com> Date: Fri, 21 Mar 2025 11:45:54 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E8=87=AA=E5=8A=A8=E5=88=87?= =?UTF-8?q?=E6=8D=A2=E6=92=AD=E6=94=BE=E5=99=A8=E7=9A=84=E6=97=B6=E6=9C=BA?= =?UTF-8?q?;=20=E5=85=BC=E5=AE=B9type3=E7=B1=BB=E5=9E=8B=E7=9A=84=E9=9C=80?= =?UTF-8?q?=E8=A6=81=E7=8B=AC=E7=AB=8Bjar=E6=94=AF=E6=8C=81=E7=9A=84?= =?UTF-8?q?=E7=9B=B4=E6=92=AD;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/github/catvod/crawler/JarLoader.java | 12 +++++++++++ .../com/github/tvbox/osc/api/ApiConfig.java | 20 ++++++++++++++++++- .../osc/ui/activity/LivePlayActivity.java | 8 +++++++- .../tvbox/osc/ui/activity/PlayActivity.java | 9 +++------ .../tvbox/osc/ui/fragment/PlayFragment.java | 10 +++------- 5 files changed, 44 insertions(+), 15 deletions(-) diff --git a/app/src/main/java/com/github/catvod/crawler/JarLoader.java b/app/src/main/java/com/github/catvod/crawler/JarLoader.java index 5e40bf3b..a57834c9 100644 --- a/app/src/main/java/com/github/catvod/crawler/JarLoader.java +++ b/app/src/main/java/com/github/catvod/crawler/JarLoader.java @@ -52,6 +52,18 @@ public class JarLoader { return loadClassLoader(cache, recentJarKey); } + public void setRecentJarKey(String key) { + recentJarKey = key; + } + + public void loadLiveJar(String jarUrl) { + String[] urls = jarUrl.split(";md5;"); + jarUrl = urls[0]; + String jarKey = MD5.string2MD5(jarUrl); + String jarMd5 = urls.length > 1 ? urls[1].trim() : ""; + loadJarInternal(jarUrl,jarMd5,jarKey); + } + public void clear() { spiders.clear(); proxyMethods.clear(); diff --git a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java index 78d7a352..e78bc4de 100644 --- a/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java +++ b/app/src/main/java/com/github/tvbox/osc/api/ApiConfig.java @@ -639,8 +639,12 @@ public class ApiConfig { bReader.close(); parseLiveJson(apiUrl, sb.toString()); } + + private String liveSpider=""; private void parseLiveJson(String apiUrl, String jsonStr) { JsonObject infoJson = gson.fromJson(jsonStr, JsonObject.class); + // spider + liveSpider = DefaultConfig.safeJsonString(infoJson, "spider", ""); // 直播源 initLiveSettings(); if(infoJson.has("lives")){ @@ -789,7 +793,7 @@ public class ApiConfig { } } else { String type= livesOBJ.get("type").getAsString(); - if(type.equals("0")){ + if(type.equals("0") || type.equals("3")){ url = livesOBJ.get("url").getAsString(); if(!url.startsWith("http://127.0.0.1")){ if(url.startsWith("http")){ @@ -797,6 +801,14 @@ public class ApiConfig { } url ="http://127.0.0.1:9978/proxy?do=live&type=txt&ext="+url; } + if(type.equals("3")){ + String jarUrl = livesOBJ.get("jar").getAsString().trim(); + if(!jarUrl.isEmpty()){ + jarLoader.loadLiveJar(jarUrl); + }else if(!liveSpider.isEmpty()){ + jarLoader.loadLiveJar(liveSpider); + } + } LOG.i("echo-live-proxy-url:"+url); }else { return; @@ -830,6 +842,12 @@ public class ApiConfig { } } + public void setLiveJar(String liveJar) + { + String jarUrl=!liveJar.isEmpty()?liveJar:liveSpider; + jarLoader.setRecentJarKey(MD5.string2MD5(jarUrl)); + } + public String getSpider() { return spider; } 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 d48b5337..6deb7fd8 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 @@ -921,6 +921,8 @@ public class LivePlayActivity extends BaseActivity { int position=Hawk.get(HawkConfig.LIVE_GROUP_INDEX, 0); JsonArray live_groups=Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray()); JsonObject livesOBJ = live_groups.get(position).getAsJsonObject(); + String type = livesOBJ.has("type")?livesOBJ.get("type").getAsString():"0"; + if(livesOBJ.has("catchup")){ catchup = livesOBJ.getAsJsonObject("catchup"); LOG.i("echo-catchup :"+ catchup.toString()); @@ -929,6 +931,10 @@ public class LivePlayActivity extends BaseActivity { if(livesOBJ.has("logo")){ logoUrl = livesOBJ.get("logo").getAsString(); } + if(type.equals("3")){ + String jarUrl=livesOBJ.has("jar")?livesOBJ.get("jar").getAsString():""; + ApiConfig.get().setLiveJar(jarUrl); + } } private HashMap liveWebHeader() @@ -1773,7 +1779,7 @@ public class LivePlayActivity extends BaseActivity { JsonObject livesOBJ = live_groups.get(position).getAsJsonObject(); if(livesOBJ.has("type")){ String type= livesOBJ.get("type").getAsString(); - if(!type.equals("0")){ + if(!type.equals("0") && !type.equals("3")){ Toast.makeText(App.getInstance(), "暂不支持该直播类型", Toast.LENGTH_SHORT).show(); break; } 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 bb19d65f..b8bf106f 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 @@ -874,20 +874,17 @@ public class PlayActivity extends BaseActivity { play(false); autoRetryCount++; }else { - if(mController.switchPlayer()){ - autoRetryCount++; -// webPlayUrl=mController.getWebPlayUrlIfNeeded(webPlayUrl); - }else { -// Toast.makeText(mContext, "自动切换播放器重试", Toast.LENGTH_SHORT).show(); - } //第一次重试直接带着原地址继续播放 if(webPlayUrl!=null){ + //切换播放器不占用重试次数 + if(mController.switchPlayer())autoRetryCount++; stopParse(); initParseLoadFound(); if(mVideoView!=null) mVideoView.release(); playUrl(webPlayUrl, webHeaderMap); }else { play(false); + autoRetryCount++; } } return true; 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 542468a7..6a3650ac 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 @@ -904,21 +904,17 @@ public class PlayFragment extends BaseLazyFragment { play(false); autoRetryCount++; }else { - //切换播放器不占用重试次数 - if(mController.switchPlayer()){ -// webPlayUrl=mController.getWebPlayUrlIfNeeded(webPlayUrl); - autoRetryCount++; - }else { -// Toast.makeText(mContext, "自动切换播放器重试", Toast.LENGTH_SHORT).show(); - } //第一次重试直接带着原地址继续播放 if(webPlayUrl!=null){ + //切换播放器不占用重试次数 + if(mController.switchPlayer())autoRetryCount++; stopParse(); initParseLoadFound(); if(mVideoView!=null) mVideoView.release(); playUrl(webPlayUrl, webHeaderMap); }else { play(false); + autoRetryCount++; } } return true;