From 7ad4dec02b0fe7513872ffe03812cc2667b9bb40 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 28 Oct 2022 11:41:49 +0800 Subject: [PATCH] Optimize mitv --- .../android/tv/ui/activity/LiveActivity.java | 6 +-- .../com/fongmi/android/tv/player/ExoUtil.java | 2 +- .../android/tv/player/source/Force.java | 38 +++++++++++----- .../com/fongmi/android/tv/utils/FileUtil.java | 4 ++ .../anymediacloud/iptv/standard/ForceTV.java | 6 --- .../java/com/gsoft/mitv/MainActivity.java | 45 +++++-------------- 6 files changed, 47 insertions(+), 54 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 9ad76f5dd..f775f4fa9 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -279,7 +279,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick if (item.getUrls().size() == 1) return; mBinding.info.getRoot().setVisibility(View.VISIBLE); mBinding.info.line.setText(item.getLineText()); - getUrl(item); + getUrl(mChannel = item); } @Override @@ -288,7 +288,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick if (item.getUrls().size() == 1) return; mBinding.info.getRoot().setVisibility(View.VISIBLE); mBinding.info.line.setText(item.getLineText()); - getUrl(item); + getUrl(mChannel = item); } @Override @@ -359,7 +359,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick protected void onDestroy() { super.onDestroy(); mPlayers.release(); - Force.get().destroy(); + Force.get().stop(); mGroup.setSelected(false); mChannel.setSelected(false); EventBus.getDefault().unregister(this); diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index c480a216a..41a8a7380 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -84,7 +84,7 @@ public class ExoUtil { } private static synchronized Cache getCache() { - if (cache == null) cache = new SimpleCache(FileUtil.getCacheDir(), new NoOpCacheEvictor(), getDatabase()); + if (cache == null) cache = new SimpleCache(FileUtil.getCacheDir("player"), new NoOpCacheEvictor(), getDatabase()); return cache; } } diff --git a/app/src/main/java/com/fongmi/android/tv/player/source/Force.java b/app/src/main/java/com/fongmi/android/tv/player/source/Force.java index d6afea69f..63a840c55 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/source/Force.java +++ b/app/src/main/java/com/fongmi/android/tv/player/source/Force.java @@ -6,12 +6,16 @@ import android.content.Intent; import android.content.ServiceConnection; import android.net.Uri; import android.os.IBinder; +import android.os.SystemClock; import com.fongmi.android.tv.App; import com.fongmi.android.tv.net.OKHttp; +import com.fongmi.android.tv.utils.FileUtil; import com.forcetech.Port; import com.gsoft.mitv.MainActivity; +import java.io.File; + import okhttp3.Headers; public class Force { @@ -26,22 +30,25 @@ public class Force { return Loader.INSTANCE; } - private void init() { - App.get().bindService(new Intent(App.get(), MainActivity.class), mConn, Context.BIND_AUTO_CREATE); - init = true; + private void init() throws Exception { + check(); + start(); } - public void destroy() { - try { - if (init) App.get().unbindService(mConn); - } catch (Exception e) { - e.printStackTrace(); - } + private void check() throws Exception { + File file = FileUtil.getCacheFile("libmitv.so"); + String url = "https://ghproxy.com/https://raw.githubusercontent.com/FongMi/TV/dev/release/libmitv.so"; + if (!file.exists()) FileUtil.write(file, OKHttp.newCall(url).execute().body().bytes()); + } + + private void start() { + App.get().bindService(new Intent(App.get(), MainActivity.class), mConn, Context.BIND_AUTO_CREATE); } public String fetch(String url) { try { if (!init) init(); + while (!init) SystemClock.sleep(10); int port = Port.get(url); Uri uri = Uri.parse(url); String id = uri.getLastPathSegment(); @@ -55,15 +62,24 @@ public class Force { } } + public void stop() { + try { + if (init) App.get().unbindService(mConn); + init = false; + } catch (Exception e) { + e.printStackTrace(); + } + } + private final ServiceConnection mConn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { - + init = true; } @Override public void onServiceDisconnected(ComponentName name) { - + init = false; } }; } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java index b06714d8e..738630cdd 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/FileUtil.java @@ -31,6 +31,10 @@ public class FileUtil { return App.get().getCacheDir(); } + public static File getCacheDir(String folder) { + return new File(getCachePath() + "/" + folder); + } + public static String getCachePath() { return getCacheDir().getAbsolutePath(); } diff --git a/forcetech/src/main/java/com/anymediacloud/iptv/standard/ForceTV.java b/forcetech/src/main/java/com/anymediacloud/iptv/standard/ForceTV.java index 3ce61ad53..d3331b8dd 100644 --- a/forcetech/src/main/java/com/anymediacloud/iptv/standard/ForceTV.java +++ b/forcetech/src/main/java/com/anymediacloud/iptv/standard/ForceTV.java @@ -1,13 +1,7 @@ package com.anymediacloud.iptv.standard; -import com.gsoft.mitv.MainActivity; - public class ForceTV { - static { - MainActivity.start(); - } - public void start(int port) { try { start(port, 20971520); diff --git a/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java b/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java index acd57433b..038a5dde0 100644 --- a/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java +++ b/forcetech/src/main/java/com/gsoft/mitv/MainActivity.java @@ -2,45 +2,39 @@ package com.gsoft.mitv; import android.app.Service; import android.content.Intent; +import android.os.Binder; import android.os.IBinder; import com.anymediacloud.iptv.standard.ForceTV; import com.forcetech.Port; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.lang.ref.WeakReference; - public class MainActivity extends Service { - private static WeakReference ref; + private final IBinder binder = new LocalBinder(); private ForceTV forceTV; - static { - System.loadLibrary("mitv"); + public class LocalBinder extends Binder { + MainActivity getService() { + // Return this instance of LocalService so clients can call public methods + return MainActivity.this; + } } - private native void loadLibrary(int i); - - public static void start() { - ref.get().loadLibrary(1); + static { + System.loadLibrary("mitv"); } @Override public void onCreate() { super.onCreate(); - ref = new WeakReference<>(this); - try { - loadAsset(); - } catch (Throwable ignored) { - } + loadLibrary(1); } @Override public IBinder onBind(Intent intent) { forceTV = new ForceTV(); forceTV.start(Port.MTV); - return null; + return binder; } @Override @@ -49,20 +43,5 @@ public class MainActivity extends Service { return super.onUnbind(intent); } - private void loadAsset() throws Throwable { - InputStream is = getAssets().open("libmitv.so"); - FileOutputStream fos = new FileOutputStream(getCacheDir() + "/libmitv.so"); - byte[] bytes = new byte[1024]; - while (true) { - int read = is.read(bytes); - if (read != -1) { - fos.write(bytes, 0, read); - } else { - is.close(); - fos.flush(); - fos.close(); - return; - } - } - } + private native void loadLibrary(int type); }