From 3eaf11f042f945e1807fd04ad5c22584a084342c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8E=E4=BF=8A?= <215613905@qq.com> Date: Tue, 1 Apr 2025 10:28:22 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E6=92=AD=E6=BA=90=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E4=BC=98=E5=8C=96;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/github/tvbox/osc/api/ApiConfig.java | 1 + .../osc/ui/activity/LivePlayActivity.java | 163 +++++++----------- 2 files changed, 59 insertions(+), 105 deletions(-) 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 a7753b65..6a4ffbe2 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 @@ -850,6 +850,7 @@ public class ApiConfig { } LOG.i("echo-live-proxy-url:"+url); }else { + liveChannelGroupList.clear(); return; } } 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 c45c4f7d..2b8da654 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 @@ -1814,18 +1814,6 @@ public class LivePlayActivity extends BaseActivity { if(position==Hawk.get(HawkConfig.LIVE_GROUP_INDEX, 0))break; JsonArray live_groups=Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray()); JsonObject livesOBJ = live_groups.get(position).getAsJsonObject(); - if(livesOBJ.has("type")){ - String type= livesOBJ.get("type").getAsString(); - if(!type.equals("0") && !type.equals("3")){ - Toast.makeText(App.getInstance(), "暂不支持该直播类型", Toast.LENGTH_SHORT).show(); - break; - } - }else { - if(!livesOBJ.has("channels")){ - Toast.makeText(App.getInstance(), "暂不支持该直播类型", Toast.LENGTH_SHORT).show(); - break; - } - } liveSettingItemAdapter.selectItem(position, true, true); Hawk.put(HawkConfig.LIVE_GROUP_INDEX, position); ApiConfig.get().loadLiveApi(livesOBJ); @@ -1839,28 +1827,13 @@ public class LivePlayActivity extends BaseActivity { private void initLiveChannelList() { List list = ApiConfig.get().getChannelGroupList(); if (list.isEmpty()) { - if(Hawk.get(HawkConfig.LIVE_GROUP_INDEX, 0)!=0){ - Hawk.put(HawkConfig.LIVE_GROUP_INDEX, 0); - JsonArray live_groups=Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray()); - if(!live_groups.isEmpty()){ - JsonObject livesOBJ = live_groups.get(0).getAsJsonObject(); - ApiConfig.get().loadLiveApi(livesOBJ); - }else { - Toast.makeText(App.getInstance(), "频道列表为空", Toast.LENGTH_SHORT).show(); - finish(); - return; - } - }else { - Toast.makeText(App.getInstance(), "频道列表为空", Toast.LENGTH_SHORT).show(); - finish(); - return; - } + setDefaultLiveChannelList(); + return; } initLiveObj(); if (list.size() == 1 && list.get(0).getGroupName().startsWith("http://127.0.0.1")) { loadProxyLives(list.get(0).getGroupName()); - } - else { + } else { liveChannelGroupList.clear(); liveChannelGroupList.addAll(list); showSuccess(); @@ -1873,9 +1846,8 @@ public class LivePlayActivity extends BaseActivity { Uri parsedUrl = Uri.parse(url); url = new String(Base64.decode(parsedUrl.getQueryParameter("ext"), Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP), "UTF-8"); } catch (Throwable th) { - if(!url.startsWith("http://127.0.0.1")){ - Toast.makeText(App.getInstance(), "直播文件错误", Toast.LENGTH_SHORT).show(); - finish(); + if (!url.startsWith("http://127.0.0.1")) { + setDefaultLiveChannelList(); return; } } @@ -1885,8 +1857,9 @@ public class LivePlayActivity extends BaseActivity { if(url.contains(".py")){ if (!hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE)) { + // 权限不足时,直接设置默认播放列表 Toast.makeText(App.getInstance(), "该源需要存储权限", Toast.LENGTH_SHORT).show(); - finish(); + setDefaultLiveChannelList(); return; } String finalUrl = url; @@ -1896,7 +1869,7 @@ public class LivePlayActivity extends BaseActivity { ExecutorService executor = Executors.newSingleThreadExecutor(); Future future = executor.submit(new Callable() { @Override - public String call() throws Exception { + public String call() { LOG.i("echo--loadProxyLives-json--"); Spider sp = ApiConfig.get().getPyCSP(finalUrl); String json=sp.liveContent(finalUrl); @@ -1913,31 +1886,19 @@ public class LivePlayActivity extends BaseActivity { } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } finally { - // 将字符串转换为 JSONObject -// try { -// assert sortJson != null; -// JSONObject jsonObject = new JSONObject(sortJson); -// sortJson = jsonObject.getString("liveList"); -// } catch (JSONException e) { -// JsonArray live_groups=Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray()); -// Hawk.put(HawkConfig.LIVE_GROUP_INDEX,Hawk.get(HawkConfig.LIVE_GROUP_INDEX,0)+1); -// if(Hawk.get(HawkConfig.LIVE_GROUP_INDEX,0)>live_groups.size()-1){ -// Hawk.put(HawkConfig.LIVE_GROUP_INDEX,0); -// } -// mHandler.post(new Runnable() { -// @Override -// public void run() { -// Toast.makeText(App.getInstance(), "加载错误,请重试", Toast.LENGTH_SHORT).show(); -// -// jumpActivity(HomeActivity.class); -// } -// }); -// return; -// } - JsonArray livesArray; + if (sortJson==null || sortJson.isEmpty()) { + // 频道列表为空时,使用默认播放列表 + mHandler.post(new Runnable() { + @Override + public void run() { + setDefaultLiveChannelList(); + } + }); + return; + } LinkedHashMap>> linkedHashMap = new LinkedHashMap<>(); TxtSubscribe.parse(linkedHashMap, sortJson); - livesArray = TxtSubscribe.live2JsonArray(linkedHashMap); + JsonArray livesArray = TxtSubscribe.live2JsonArray(linkedHashMap); ApiConfig.get().loadLives(livesArray); List list = ApiConfig.get().getChannelGroupList(); @@ -1945,8 +1906,7 @@ public class LivePlayActivity extends BaseActivity { mHandler.post(new Runnable() { @Override public void run() { - Toast.makeText(App.getInstance(), "频道列表为空", Toast.LENGTH_SHORT).show(); - finish(); + setDefaultLiveChannelList(); } }); return; @@ -1981,16 +1941,19 @@ public class LivePlayActivity extends BaseActivity { @Override public void onSuccess(Response response) { - JsonArray livesArray; LinkedHashMap>> linkedHashMap = new LinkedHashMap<>(); TxtSubscribe.parse(linkedHashMap, response.body()); - livesArray = TxtSubscribe.live2JsonArray(linkedHashMap); + JsonArray livesArray = TxtSubscribe.live2JsonArray(linkedHashMap); ApiConfig.get().loadLives(livesArray); List list = ApiConfig.get().getChannelGroupList(); if (list.isEmpty()) { - Toast.makeText(App.getInstance(), "频道列表为空", Toast.LENGTH_SHORT).show(); - finish(); + mHandler.post(new Runnable() { + @Override + public void run() { + setDefaultLiveChannelList(); + } + }); return; } liveChannelGroupList.clear(); @@ -2004,59 +1967,20 @@ public class LivePlayActivity extends BaseActivity { } }); } + @Override public void onError(Response response) { - Toast.makeText(App.getInstance(), "加载错误,请重试", Toast.LENGTH_SHORT).show(); - JsonArray live_groups=Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray()); - Hawk.put(HawkConfig.LIVE_GROUP_INDEX,Hawk.get(HawkConfig.LIVE_GROUP_INDEX,0)+1); - if(Hawk.get(HawkConfig.LIVE_GROUP_INDEX,0)>live_groups.size()-1){ - Hawk.put(HawkConfig.LIVE_GROUP_INDEX,0); - } mHandler.post(new Runnable() { @Override public void run() { - jumpActivity(HomeActivity.class); + setDefaultLiveChannelList(); } }); } }); - } } - private void autoSwitchNextLive(){ - Toast.makeText(App.getInstance(), "加载错误,自动切换下一个源", Toast.LENGTH_SHORT).show(); - JsonArray live_groups=Hawk.get(HawkConfig.LIVE_GROUP_LIST,new JsonArray()); - int position=Hawk.get(HawkConfig.LIVE_GROUP_INDEX,0)+1; - if(position>live_groups.size()-1){ - Hawk.put(HawkConfig.LIVE_GROUP_INDEX,0); - Toast.makeText(App.getInstance(), "当前无有效直播,自动退出到主页", Toast.LENGTH_SHORT).show(); - jumpActivity(HomeActivity.class); - } - - JsonObject livesOBJ = live_groups.get(position).getAsJsonObject(); - if(livesOBJ.has("type")){ - String type= livesOBJ.get("type").getAsString(); - if(!type.equals("0") && !type.equals("3")){ - Toast.makeText(App.getInstance(), "暂不支持该直播类型", Toast.LENGTH_SHORT).show(); - autoSwitchNextLive(); - } - }else { - if(!livesOBJ.has("channels")){ - Toast.makeText(App.getInstance(), "暂不支持该直播类型", Toast.LENGTH_SHORT).show(); - autoSwitchNextLive(); - } - } - liveSettingItemAdapter.selectItem(position, true, true); - Hawk.put(HawkConfig.LIVE_GROUP_INDEX, position); - ApiConfig.get().loadLiveApi(livesOBJ); - if (mVideoView != null) { - mVideoView.release(); - mVideoView=null; - } - recreate(); - } - private void initLiveState() { String lastChannelName = Hawk.get(HawkConfig.LIVE_CHANNEL, ""); @@ -2459,4 +2383,33 @@ public class LivePlayActivity extends BaseActivity { countDownTimer3.start(); } + /** + * 当播放列表为空或加载失败时,设置一个默认的播放列表,保证播放界面不会崩溃 + */ + private void setDefaultLiveChannelList() { + liveChannelGroupList.clear(); + // 创建默认直播分组 + LiveChannelGroup defaultGroup = new LiveChannelGroup(); + defaultGroup.setGroupIndex(0); + defaultGroup.setGroupName("default group"); + defaultGroup.setGroupPassword(""); + LiveChannelItem defaultChannel = new LiveChannelItem(); + defaultChannel.setChannelName("default channel"); + defaultChannel.setChannelIndex(0); + defaultChannel.setChannelNum(1); + ArrayList defaultSourceNames = new ArrayList<>(); + ArrayList defaultSourceUrls = new ArrayList<>(); + defaultSourceNames.add("default source"); + defaultSourceUrls.add("http://default.play.url/stream"); + defaultChannel.setChannelSourceNames(defaultSourceNames); + defaultChannel.setChannelUrls(defaultSourceUrls); + // 将默认频道添加到分组内 + ArrayList channels = new ArrayList<>(); + channels.add(defaultChannel); + defaultGroup.setLiveChannels(channels); + // 添加分组到全局列表 + liveChannelGroupList.add(defaultGroup); + showSuccess(); + initLiveState(); + } } \ No newline at end of file