Support p2p~p9p

pull/123/head
FongMi 3 years ago
parent 0f3c5328a2
commit 8d299559fb
  1. 52
      app/src/main/java/com/fongmi/android/tv/player/source/Force.java
  2. 40
      forcetech/src/main/AndroidManifest.xml
  3. 2
      forcetech/src/main/java/com/anymediacloud/iptv/standard/ForceTV.java
  4. 10
      forcetech/src/main/java/com/forcetech/Port.java
  5. 92
      forcetech/src/main/java/com/forcetech/Util.java
  6. 16
      forcetech/src/main/java/com/forcetech/android/ForceTV.java
  7. 34
      forcetech/src/main/java/com/forcetech/service/P2PService.java
  8. 34
      forcetech/src/main/java/com/forcetech/service/P3PService.java
  9. 34
      forcetech/src/main/java/com/forcetech/service/P4PService.java
  10. 34
      forcetech/src/main/java/com/forcetech/service/P5PService.java
  11. 34
      forcetech/src/main/java/com/forcetech/service/P6PService.java
  12. 34
      forcetech/src/main/java/com/forcetech/service/P7PService.java
  13. 34
      forcetech/src/main/java/com/forcetech/service/P8PService.java
  14. 34
      forcetech/src/main/java/com/forcetech/service/P9PService.java
  15. 4
      forcetech/src/main/java/com/gsoft/mitv/MainActivity.java

@ -2,26 +2,25 @@ package com.fongmi.android.tv.player.source;
import android.content.ComponentName;
import android.content.Context;
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.Github;
import com.fongmi.android.tv.net.OkHttp;
import com.fongmi.android.tv.utils.FileUtil;
import com.forcetech.Port;
import com.gsoft.mitv.MainActivity;
import com.forcetech.Util;
import java.io.File;
import java.util.HashSet;
import okhttp3.Headers;
public class Force {
private boolean init;
private final HashSet<String> set;
private static class Loader {
static volatile Force INSTANCE = new Force();
@ -31,31 +30,28 @@ public class Force {
return Loader.INSTANCE;
}
private void init() throws Exception {
check();
start();
}
private void check() throws Exception {
File file = FileUtil.getCacheFile("libmitv.so");
String url = Github.get().getReleasePath("/other/libmitv.so");
if (!file.exists()) FileUtil.write(file, OkHttp.newCall(url).execute().body().bytes());
public Force() {
set = new HashSet<>();
}
private void start() {
App.get().bindService(new Intent(App.get(), MainActivity.class), mConn, Context.BIND_AUTO_CREATE);
private void init(String url) throws Exception {
File file = FileUtil.getCacheFile(Util.so(url));
String path = Github.get().getBranchPath("dev", "/other/jniLibs/" + file.getName());
if (!file.exists()) FileUtil.write(file, OkHttp.newCall(path).execute().body().bytes());
App.get().bindService(Util.intent(App.get(), url, file), mConn, Context.BIND_AUTO_CREATE);
}
public String fetch(String url) {
try {
if (!init) init();
while (!init) SystemClock.sleep(10);
int port = Port.get(url);
String scheme = Util.scheme(url);
if (!set.contains(scheme)) init(url);
while (!set.contains(scheme)) SystemClock.sleep(10);
Uri uri = Uri.parse(url);
int port = Util.port(url);
String id = uri.getLastPathSegment();
String cmd = "http://127.0.0.1:" + port + "/cmd.xml?cmd=switch_chan&server=" + uri.getHost() + ":" + uri.getPort() + "&id=" + id;
String result = "http://127.0.0.1:" + port + "/" + id;
OkHttp.newCall(cmd, Headers.of("user-agent", "MTV")).execute();
OkHttp.newCall(cmd, Headers.of("user-agent", "MTV")).execute().body().string();
return result;
} catch (Exception e) {
e.printStackTrace();
@ -65,22 +61,30 @@ public class Force {
public void stop() {
try {
if (init) App.get().unbindService(mConn);
init = false;
if (!set.isEmpty()) App.get().unbindService(mConn);
} catch (Exception e) {
e.printStackTrace();
} finally {
set.clear();
}
}
private final ServiceConnection mConn = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName name, IBinder service) {
init = true;
set.add(get(name));
}
@Override
public void onServiceDisconnected(ComponentName name) {
init = false;
set.remove(get(name));
}
private String get(ComponentName o) {
String name = o.getClassName().toLowerCase();
name = name.substring(name.lastIndexOf(".") + 1);
name = name.replace("service", "");
return name;
}
};
}

@ -4,6 +4,46 @@
<application>
<service
android:name="com.forcetech.service.P2PService"
android:exported="false"
android:process=":p2p" />
<service
android:name="com.forcetech.service.P3PService"
android:exported="false"
android:process=":p3p" />
<service
android:name="com.forcetech.service.P4PService"
android:exported="false"
android:process=":p4p" />
<service
android:name="com.forcetech.service.P5PService"
android:exported="false"
android:process=":p9p" />
<service
android:name="com.forcetech.service.P6PService"
android:exported="false"
android:process=":p6p" />
<service
android:name="com.forcetech.service.P7PService"
android:exported="false"
android:process=":p7p" />
<service
android:name="com.forcetech.service.P8PService"
android:exported="false"
android:process=":p8p" />
<service
android:name="com.forcetech.service.P9PService"
android:exported="false"
android:process=":p9p" />
<service
android:name="com.gsoft.mitv.MainActivity"
android:exported="false"

@ -4,7 +4,7 @@ public class ForceTV {
public void start(int port) {
try {
start(port, 20971520);
start(port, 20 * 1024 * 1024);
} catch (Throwable ignored) {
}
}

@ -1,10 +0,0 @@
package com.forcetech;
public class Port {
public static int MTV = 9002;
public static int get(String url) {
return MTV;
}
}

@ -0,0 +1,92 @@
package com.forcetech;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import com.forcetech.service.P2PService;
import com.forcetech.service.P3PService;
import com.forcetech.service.P4PService;
import com.forcetech.service.P5PService;
import com.forcetech.service.P6PService;
import com.forcetech.service.P7PService;
import com.forcetech.service.P8PService;
import com.forcetech.service.P9PService;
import com.gsoft.mitv.MainActivity;
import java.io.File;
public class Util {
public static int MTV = 9002;
public static int P2P = 9906;
public static int P3P = 9907;
public static int P4P = 9908;
public static int P5P = 9909;
public static int P6P = 9910;
public static int P7P = 9911;
public static int P8P = 9912;
public static int P9P = 9913;
public static String scheme(String url) {
String scheme = Uri.parse(url).getScheme();
if (scheme.equals("P2p")) scheme = "mitv";
return scheme.toLowerCase();
}
public static String so(String url) {
return "lib" + scheme(url) + ".so";
}
public static Intent intent(Context context, String url, File file) {
Intent intent = new Intent(context, clz(url));
intent.putExtra("path", file.getAbsolutePath());
return intent;
}
private static Class<?> clz(String url) {
switch (scheme(url)) {
case "p2p":
return P2PService.class;
case "p3p":
return P3PService.class;
case "p4p":
return P4PService.class;
case "p5p":
return P5PService.class;
case "p6p":
return P6PService.class;
case "p7p":
return P7PService.class;
case "p8p":
return P8PService.class;
case "p9p":
return P9PService.class;
default:
return MainActivity.class;
}
}
public static int port(String url) {
switch (scheme(url)) {
case "p2p":
return P2P;
case "p3p":
return P3P;
case "p4p":
return P4P;
case "p5p":
return P5P;
case "p6p":
return P6P;
case "p7p":
return P7P;
case "p8p":
return P8P;
case "p9p":
return P9P;
default:
return MTV;
}
}
}

@ -0,0 +1,16 @@
package com.forcetech.android;
public class ForceTV {
public void start(String lib, int port) {
try {
System.load(lib);
start(port, 20 * 1024 * 1024);
} catch (Throwable ignored) {
}
}
public native int start(int port, int size);
public native int stop();
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P2PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P2P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P3PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P3P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P4PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P4P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P5PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P5P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P6PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P6P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P7PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P7P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P8PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P8P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -0,0 +1,34 @@
package com.forcetech.service;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import com.forcetech.Util;
import com.forcetech.android.ForceTV;
import com.gsoft.mitv.LocalBinder;
public class P9PService extends Service {
private ForceTV forceTV;
private IBinder binder;
@Override
public void onCreate() {
super.onCreate();
binder = new LocalBinder();
}
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(intent.getStringExtra("path"), Util.P9P);
return binder;
}
@Override
public boolean onUnbind(Intent intent) {
if (forceTV != null) forceTV.stop();
return super.onUnbind(intent);
}
}

@ -5,7 +5,7 @@ import android.content.Intent;
import android.os.IBinder;
import com.anymediacloud.iptv.standard.ForceTV;
import com.forcetech.Port;
import com.forcetech.Util;
public class MainActivity extends Service {
@ -29,7 +29,7 @@ public class MainActivity extends Service {
@Override
public IBinder onBind(Intent intent) {
forceTV = new ForceTV();
forceTV.start(Port.MTV);
forceTV.start(Util.MTV);
return binder;
}

Loading…
Cancel
Save