From 282b12396088c0e2e36711a5f72e9fc394af6021 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=BA=8E=E4=BF=8A?= <215613905@qq.com> Date: Sat, 5 Nov 2022 18:03:52 +0800 Subject: [PATCH] =?UTF-8?q?=E7=9B=B4=E6=92=AD=E6=97=A0=E9=9C=80jar?= =?UTF-8?q?=E4=BB=A3=E7=90=86;=E5=85=BC=E5=AE=B9=E8=9C=82=E8=9C=9C?= =?UTF-8?q?=E5=9C=A8=E7=BA=BF=E9=85=8D=E7=BD=AE;=E7=AB=96=E5=B1=8F?= =?UTF-8?q?=E6=8C=89=E9=92=AE=E6=98=BE=E7=A4=BA=E6=97=B6=E6=9C=BA=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../com/github/tvbox/osc/api/ApiConfig.java | 17 +++- .../osc/player/controller/VodController.java | 9 +- .../osc/ui/activity/LivePlayActivity.java | 20 +++- .../tvbox/osc/ui/activity/PlayActivity.java | 1 - .../tvbox/osc/ui/fragment/PlayFragment.java | 1 - .../tvbox/osc/util/live/TxtSubscribe.java | 99 +++++++++++++++++++ 6 files changed, 138 insertions(+), 9 deletions(-) create mode 100644 app/src/main/java/com/github/tvbox/osc/util/live/TxtSubscribe.java 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 e4e197ea..698c311a 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 @@ -381,7 +381,22 @@ public class ApiConfig { liveChannelGroup.setGroupName(url); liveChannelGroupList.add(liveChannelGroup); } else { - if(lives.contains("group"))loadLives(infoJson.get("lives").getAsJsonArray()); + if(lives.contains("group")){ + loadLives(infoJson.get("lives").getAsJsonArray()); + }else { + JsonObject fengMiLives = infoJson.get("lives").getAsJsonArray().get(0).getAsJsonObject(); + String type=fengMiLives.get("type").getAsString(); + if(type.equals("0")){ + String url =fengMiLives.get("url").getAsString(); + if(url.startsWith("http")){ + url = Base64.encodeToString(url.getBytes("UTF-8"), Base64.DEFAULT | Base64.URL_SAFE | Base64.NO_WRAP); + } + url ="http://127.0.0.1:9978/proxy?do=live&type=txt&ext="+url; + LiveChannelGroup liveChannelGroup = new LiveChannelGroup(); + liveChannelGroup.setGroupName(url); + liveChannelGroupList.add(liveChannelGroup); + } + } } } catch (Throwable th) { th.printStackTrace(); diff --git a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java index 33b4fc04..ab0af461 100644 --- a/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java +++ b/app/src/main/java/com/github/tvbox/osc/player/controller/VodController.java @@ -1,5 +1,6 @@ package com.github.tvbox.osc.player.controller; +import android.annotation.SuppressLint; import android.content.Context; import android.content.pm.ActivityInfo; import android.os.Handler; @@ -612,11 +613,11 @@ public class VodController extends BaseController { } public void initLandscapePortraitBtnInfo() { - if(mControlWrapper!=null){ + if(mControlWrapper!=null && mActivity!=null){ int width = mControlWrapper.getVideoSize()[0]; int height = mControlWrapper.getVideoSize()[1]; double screenSqrt = ScreenUtils.getSqrt(mActivity); - if (screenSqrt < 20.0 && width < height) { + if (screenSqrt < 10.0 && width < height) { mLandscapePortraitBtn.setVisibility(View.VISIBLE); mLandscapePortraitBtn.setText("竖屏"); } @@ -805,6 +806,7 @@ public class VodController extends BaseController { case VideoView.STATE_IDLE: break; case VideoView.STATE_PLAYING: + initLandscapePortraitBtnInfo(); startProgress(); break; case VideoView.STATE_PAUSED: @@ -901,7 +903,6 @@ public class VodController extends BaseController { float speed = 3.0f; mPlayerConfig.put("sp", speed); updatePlayerCfgView(); - mBottomRoot.setVisibility(VISIBLE); listener.updatePlayerCfg(); mControlWrapper.setSpeed(speed); } catch (JSONException f) { @@ -910,6 +911,7 @@ public class VodController extends BaseController { } } + @SuppressLint("ClickableViewAccessibility") @Override public boolean onTouchEvent(MotionEvent e) { if (e.getAction() == MotionEvent.ACTION_UP) { @@ -919,7 +921,6 @@ public class VodController extends BaseController { float speed = speed_old; mPlayerConfig.put("sp", speed); updatePlayerCfgView(); - mBottomRoot.setVisibility(GONE); listener.updatePlayerCfg(); mControlWrapper.setSpeed(speed); } catch (JSONException f) { 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 7eecc938..21606f4d 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 @@ -5,8 +5,10 @@ import android.animation.AnimatorListenerAdapter; import android.animation.IntEvaluator; import android.animation.ObjectAnimator; import android.content.Context; +import android.net.Uri; import android.os.CountDownTimer; import android.os.Handler; +import android.util.Base64; import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; @@ -53,6 +55,7 @@ import com.github.tvbox.osc.util.EpgUtil; import com.github.tvbox.osc.util.FastClickCheckUtil; import com.github.tvbox.osc.util.HawkConfig; import com.github.tvbox.osc.util.LOG; +import com.github.tvbox.osc.util.live.TxtSubscribe; import com.github.tvbox.osc.util.urlhttp.CallBackUtil; import com.github.tvbox.osc.util.urlhttp.UrlHttpUtil; import com.google.gson.Gson; @@ -80,6 +83,7 @@ import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.Hashtable; +import java.util.LinkedHashMap; import java.util.List; import java.util.Locale; import java.util.TimeZone; @@ -1526,7 +1530,6 @@ public class LivePlayActivity extends BaseActivity { } if (list.size() == 1 && list.get(0).getGroupName().startsWith("http://127.0.0.1")) { - showLoading(); loadProxyLives(list.get(0).getGroupName()); } else { @@ -1538,6 +1541,15 @@ public class LivePlayActivity extends BaseActivity { } public void loadProxyLives(String url) { + try { + 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) { + Toast.makeText(App.getInstance(), "频道列表为空", Toast.LENGTH_SHORT).show(); + finish(); + return; + } + showLoading(); OkGo.get(url).execute(new AbsCallback() { @Override @@ -1547,7 +1559,11 @@ public class LivePlayActivity extends BaseActivity { @Override public void onSuccess(Response response) { - JsonArray livesArray = new Gson().fromJson(response.body(), JsonArray.class); + JsonArray livesArray; + LinkedHashMap>> linkedHashMap = new LinkedHashMap<>(); + TxtSubscribe.parse(linkedHashMap, response.body()); + livesArray = TxtSubscribe.live2JsonArray(linkedHashMap); + ApiConfig.get().loadLives(livesArray); List list = ApiConfig.get().getChannelGroupList(); if (list.isEmpty()) { 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 d6b12634..23a0524a 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 @@ -544,7 +544,6 @@ public class PlayActivity extends BaseActivity { } mVideoView.start(); mController.resetSpeed(); - mController.initLandscapePortraitBtnInfo(); } } } 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 96114c62..7cabae8c 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 @@ -542,7 +542,6 @@ public class PlayFragment extends BaseLazyFragment { } mVideoView.start(); mController.resetSpeed(); - mController.initLandscapePortraitBtnInfo(); } } } diff --git a/app/src/main/java/com/github/tvbox/osc/util/live/TxtSubscribe.java b/app/src/main/java/com/github/tvbox/osc/util/live/TxtSubscribe.java new file mode 100644 index 00000000..d6904291 --- /dev/null +++ b/app/src/main/java/com/github/tvbox/osc/util/live/TxtSubscribe.java @@ -0,0 +1,99 @@ +package com.github.tvbox.osc.util.live; + +import com.google.gson.JsonArray; +import com.google.gson.JsonObject; + +import java.io.BufferedReader; +import java.io.StringReader; + +import java.util.ArrayList; +import java.util.LinkedHashMap; + +public class TxtSubscribe { + public static void parse(LinkedHashMap>> linkedHashMap, String str) { + ArrayList arrayList; + try { + BufferedReader bufferedReader = new BufferedReader(new StringReader(str)); + String readLine = bufferedReader.readLine(); + LinkedHashMap> linkedHashMap2 = new LinkedHashMap<>(); + LinkedHashMap> linkedHashMap3 = linkedHashMap2; + while (readLine != null) { + if (readLine.trim().isEmpty()) { + readLine = bufferedReader.readLine(); + } else { + String[] split = readLine.split(","); + if (split.length < 2) { + readLine = bufferedReader.readLine(); + } else { + if (readLine.contains("#genre#")) { + String trim = split[0].trim(); + if (!linkedHashMap.containsKey(trim)) { + linkedHashMap3 = new LinkedHashMap<>(); + linkedHashMap.put(trim, linkedHashMap3); + } else { + linkedHashMap3 = linkedHashMap.get(trim); + } + } else { + String trim2 = split[0].trim(); + for (String str2 : split[1].trim().split("#")) { + String trim3 = str2.trim(); + if (!trim3.isEmpty() && (trim3.startsWith("http") || trim3.startsWith("rtsp") || trim3.startsWith("rtmp"))) { + if (!linkedHashMap3.containsKey(trim2)) { + arrayList = new ArrayList<>(); + linkedHashMap3.put(trim2, arrayList); + } else { + arrayList = linkedHashMap3.get(trim2); + } + if (!arrayList.contains(trim3)) { + arrayList.add(trim3); + } + } + } + } + readLine = bufferedReader.readLine(); + } + } + } + bufferedReader.close(); + if (linkedHashMap2.isEmpty()) { + return; + } + linkedHashMap.put("未分组", linkedHashMap2); + } catch (Throwable unused) { + } + } + + public static JsonArray live2JsonArray(LinkedHashMap>> linkedHashMap) { + JsonArray jsonarr = new JsonArray(); + for (String str : linkedHashMap.keySet()) { + JsonArray jsonarr2 = new JsonArray(); + LinkedHashMap> linkedHashMap2 = linkedHashMap.get(str); + if (!linkedHashMap2.isEmpty()) { + for (String str2 : linkedHashMap2.keySet()) { + ArrayList arrayList = linkedHashMap2.get(str2); + if (!arrayList.isEmpty()) { + JsonArray jsonarr3 = new JsonArray(); + for (int i = 0; i < arrayList.size(); i++) { + jsonarr3.add(arrayList.get(i)); + } + JsonObject jsonobj = new JsonObject(); + try { + jsonobj.addProperty("name", str2); + jsonobj.add("urls", jsonarr3); + } catch (Throwable e) { + } + jsonarr2.add(jsonobj); + } + } + JsonObject jsonobj2 = new JsonObject(); + try { + jsonobj2.addProperty("group", str); + jsonobj2.add("channels", jsonarr2); + } catch (Throwable e) { + } + jsonarr.add(jsonobj2); + } + } + return jsonarr; + } +}