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 5fcbfdc43..c0030bf2e 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
@@ -702,7 +702,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mPlayers.release();
Force.get().stop();
ZLive.get().stop();
- TVBus.get().stop();
+ TVBus.get().quit();
App.removeCallbacks(mR1, mR2, mR3, mR4, mR5, mR6);
}
}
diff --git a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
index 1eeb82ad6..926d903eb 100644
--- a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
+++ b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
@@ -26,7 +26,6 @@ public class LiveViewModel extends ViewModel {
public void getLive(Live home) {
execute(() -> {
- TVBus.get().init(home.getCore());
LiveParser.start(home);
return home;
});
@@ -34,6 +33,7 @@ public class LiveViewModel extends ViewModel {
public void getUrl(Channel item) {
execute(() -> {
+ TVBus.get().stop();
String url = item.getUrls().get(item.getLine());
if (item.isForce()) item.setUrl(Force.get().fetch(url));
else if (item.isZLive()) item.setUrl(ZLive.get().fetch(url));
diff --git a/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java b/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java
index 3e5da6ff6..6fb585b95 100644
--- a/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java
+++ b/app/src/main/java/com/fongmi/android/tv/player/source/TVBus.java
@@ -1,14 +1,14 @@
package com.fongmi.android.tv.player.source;
import com.fongmi.android.tv.App;
+import com.fongmi.android.tv.api.LiveConfig;
import com.fongmi.android.tv.bean.Core;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
+import com.tvbus.engine.Listener;
import com.tvbus.engine.TVCore;
-import com.tvbus.engine.TVListener;
-import com.tvbus.engine.TVService;
-public class TVBus implements TVListener {
+public class TVBus implements Listener {
private final Gson gson;
private TVCore tvcore;
@@ -26,13 +26,16 @@ public class TVBus implements TVListener {
this.gson = new Gson();
}
- public void init(Core core) {
+ private void init(Core core) {
if (core == null) return;
- tvcore = TVCore.getInstance().listener(this);
- TVService.start(App.get(), core.getAuth(), core.getName(), core.getPass(), core.getBroker());
+ tvcore = new TVCore().listener(this);
+ tvcore.auth(core.getAuth()).name(core.getName()).pass(core.getPass()).broker(core.getBroker());
+ tvcore.serv(0).play(8902).mode(1).init(App.get());
}
public String fetch(String url) throws InterruptedException {
+ if (tvcore == null) init(LiveConfig.get().getHome().getCore());
+ if (tvcore == null) return "";
tvcore.start(url);
onWait();
return hls;
@@ -51,7 +54,11 @@ public class TVBus implements TVListener {
}
public void stop() {
- TVService.stop(App.get());
+ if (tvcore != null) tvcore.stop();
+ }
+
+ public void quit() {
+ if (tvcore != null) tvcore.quit();
}
@Override
diff --git a/tvbus/src/main/AndroidManifest.xml b/tvbus/src/main/AndroidManifest.xml
index 65230c5f1..ab68e8906 100644
--- a/tvbus/src/main/AndroidManifest.xml
+++ b/tvbus/src/main/AndroidManifest.xml
@@ -1,12 +1,2 @@
-
-
-
-
-
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/tvbus/src/main/java/com/tvbus/engine/TVListener.java b/tvbus/src/main/java/com/tvbus/engine/Listener.java
similarity index 88%
rename from tvbus/src/main/java/com/tvbus/engine/TVListener.java
rename to tvbus/src/main/java/com/tvbus/engine/Listener.java
index 822564892..d6a54c75d 100644
--- a/tvbus/src/main/java/com/tvbus/engine/TVListener.java
+++ b/tvbus/src/main/java/com/tvbus/engine/Listener.java
@@ -1,6 +1,6 @@
package com.tvbus.engine;
-public interface TVListener {
+public interface Listener {
void onInited(String result);
diff --git a/tvbus/src/main/java/com/tvbus/engine/TVCore.java b/tvbus/src/main/java/com/tvbus/engine/TVCore.java
index cc5feeb35..6d9a6d828 100644
--- a/tvbus/src/main/java/com/tvbus/engine/TVCore.java
+++ b/tvbus/src/main/java/com/tvbus/engine/TVCore.java
@@ -5,116 +5,74 @@ import android.text.TextUtils;
public class TVCore {
- private long nativeHandle;
+ private final long handle;
- private static class Loader {
- static volatile TVCore INSTANCE = new TVCore();
+ public TVCore() {
+ PmsHook.inject();
+ System.loadLibrary("tvcore");
+ handle = initialise();
}
- public static TVCore getInstance() {
- return Loader.INSTANCE;
- }
-
- private TVCore() {
- try {
- PmsHook.inject();
- System.loadLibrary("tvcore");
- nativeHandle = initialise();
- } catch (Throwable ignored) {
- }
- }
-
- public TVCore listener(TVListener listener) {
- try {
- setListener(nativeHandle, listener);
- } catch (Throwable ignored) {
- }
+ public TVCore listener(Listener listener) {
+ setListener(handle, listener);
return this;
}
public TVCore play(int port) {
- try {
- setPlayPort(nativeHandle, port);
- } catch (Throwable ignored) {
- }
+ setPlayPort(handle, port);
return this;
}
public TVCore serv(int port) {
- try {
- setServPort(nativeHandle, port);
- } catch (Throwable ignored) {
- }
+ setServPort(handle, port);
return this;
}
public TVCore mode(int mode) {
- try {
- setRunningMode(nativeHandle, mode);
- } catch (Throwable ignored) {
- }
+ setRunningMode(handle, mode);
return this;
}
public TVCore auth(String str) {
- try {
- if (!TextUtils.isEmpty(str)) setAuthUrl(nativeHandle, str);
- } catch (Throwable ignored) {
- }
+ if (!TextUtils.isEmpty(str)) setAuthUrl(handle, str);
return this;
}
public TVCore broker(String str) {
- try {
- if (!TextUtils.isEmpty(str)) setMKBroker(nativeHandle, str);
- } catch (Throwable ignored) {
- }
+ if (!TextUtils.isEmpty(str)) setMKBroker(handle, str);
return this;
}
public TVCore name(String str) {
- try {
- if (!TextUtils.isEmpty(str)) setUsername(nativeHandle, str);
- } catch (Throwable ignored) {
- }
+ if (!TextUtils.isEmpty(str)) setUsername(handle, str);
return this;
}
public TVCore pass(String str) {
- try {
- if (!TextUtils.isEmpty(str)) setPassword(nativeHandle, str);
- } catch (Throwable ignored) {
- }
+ if (!TextUtils.isEmpty(str)) setPassword(handle, str);
return this;
}
+ public void init(Context context) {
+ new Thread(() -> {
+ init(handle, context);
+ run(handle);
+ }).start();
+ }
+
public void start(String url) {
- try {
- start(nativeHandle, url);
- } catch (Throwable ignored) {
- }
+ start(handle, url);
}
public void stop() {
- try {
- stop(nativeHandle);
- } catch (Throwable ignored) {
- }
+ stop(handle);
}
- void init(Context context) {
- new Thread(() -> {
- init(nativeHandle, context);
- run(nativeHandle);
- }).start();
+ public void quit() {
+ quit(handle);
}
- void quit() {
- try {
- quit(nativeHandle);
- } catch (Throwable ignored) {
- }
- }
+ private native long initialise();
private native int init(long handle, Context context);
@@ -140,7 +98,5 @@ public class TVCore {
private native void setUsername(long handle, String str);
- private native void setListener(long handle, TVListener listener);
-
- private native long initialise();
+ private native void setListener(long handle, Listener listener);
}
\ No newline at end of file
diff --git a/tvbus/src/main/java/com/tvbus/engine/TVService.java b/tvbus/src/main/java/com/tvbus/engine/TVService.java
deleted file mode 100644
index b31e4466f..000000000
--- a/tvbus/src/main/java/com/tvbus/engine/TVService.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.tvbus.engine;
-
-import android.app.Service;
-import android.content.Context;
-import android.content.Intent;
-import android.os.IBinder;
-
-public class TVService extends Service {
-
- private TVCore tvcore;
-
- public static void start(Context context, String auth, String name, String pass, String broker) {
- try {
- Intent intent = new Intent(context, TVService.class);
- intent.putExtra("auth", auth);
- intent.putExtra("name", name);
- intent.putExtra("pass", pass);
- intent.putExtra("broker", broker);
- context.startService(intent);
- } catch (Throwable e) {
- e.printStackTrace();
- }
- }
-
- public static void stop(Context context) {
- try {
- context.stopService(new Intent(context, TVService.class));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public int onStartCommand(Intent intent, int flags, int startId) {
- tvcore = TVCore.getInstance().auth(intent.getStringExtra("auth")).name(intent.getStringExtra("name")).pass(intent.getStringExtra("pass")).broker(intent.getStringExtra("broker"));
- tvcore.serv(0).play(8902).mode(1).init(this);
- return START_NOT_STICKY;
- }
-
- @Override
- public void onDestroy() {
- super.onDestroy();
- tvcore.stop();
- tvcore.quit();
- }
-
- @Override
- public IBinder onBind(Intent intent) {
- return null;
- }
-}