Add strm extractor

release
jhengazuji 6 months ago
parent 68b0e94b42
commit 998e7121b3
  1. 5
      app/src/main/java/com/fongmi/android/tv/bean/Url.java
  2. 19
      app/src/main/java/com/fongmi/android/tv/player/Source.java
  3. 13
      app/src/main/java/com/fongmi/android/tv/player/extractor/Force.java
  4. 6
      app/src/main/java/com/fongmi/android/tv/player/extractor/JianPian.java
  5. 6
      app/src/main/java/com/fongmi/android/tv/player/extractor/Push.java
  6. 33
      app/src/main/java/com/fongmi/android/tv/player/extractor/Strm.java
  7. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/TVBus.java
  8. 6
      app/src/main/java/com/fongmi/android/tv/player/extractor/Thunder.java
  9. 7
      app/src/main/java/com/fongmi/android/tv/player/extractor/Video.java
  10. 5
      app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java

@ -1,5 +1,6 @@
package com.fongmi.android.tv.bean;
import android.net.Uri;
import android.text.TextUtils;
import com.fongmi.android.tv.App;
@ -36,6 +37,10 @@ public class Url {
return position;
}
public Uri uri() {
return Uri.parse(v());
}
public String v() {
return v(getPosition());
}

@ -1,5 +1,7 @@
package com.fongmi.android.tv.player;
import android.net.Uri;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.bean.Episode;
import com.fongmi.android.tv.bean.Flag;
@ -7,11 +9,11 @@ import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.player.extractor.Force;
import com.fongmi.android.tv.player.extractor.JianPian;
import com.fongmi.android.tv.player.extractor.Push;
import com.fongmi.android.tv.player.extractor.Strm;
import com.fongmi.android.tv.player.extractor.TVBus;
import com.fongmi.android.tv.player.extractor.Thunder;
import com.fongmi.android.tv.player.extractor.Video;
import com.fongmi.android.tv.player.extractor.Youtube;
import com.fongmi.android.tv.utils.UrlUtil;
import java.util.ArrayList;
import java.util.Iterator;
@ -39,17 +41,15 @@ public class Source {
extractors.add(new Force());
extractors.add(new JianPian());
extractors.add(new Push());
extractors.add(new Strm());
extractors.add(new Thunder());
extractors.add(new TVBus());
extractors.add(new Video());
extractors.add(new Youtube());
}
private Extractor getExtractor(String url) {
String host = UrlUtil.host(url);
String scheme = UrlUtil.scheme(url);
for (Extractor extractor : extractors) if (extractor.match(scheme, host)) return extractor;
return null;
private Extractor getExtractor(Uri uri) {
return extractors.stream().filter(extractor -> extractor.match(uri)).findFirst().orElse(null);
}
private void addCallable(Iterator<Episode> iterator, List<Callable<List<Episode>>> items) {
@ -75,8 +75,9 @@ public class Source {
}
public String fetch(Result result) throws Exception {
Uri uri = result.getUrl().uri();
String url = result.getUrl().v();
Extractor extractor = getExtractor(url);
Extractor extractor = getExtractor(uri);
if (extractor != null) result.setParse(0);
if (extractor instanceof Video) result.setParse(1);
return extractor == null ? url : extractor.fetch(url);
@ -94,10 +95,10 @@ public class Source {
public interface Extractor {
boolean match(String scheme, String host);
String fetch(String url) throws Exception;
boolean match(Uri uri);
void stop();
void exit();

@ -9,23 +9,23 @@ import android.os.SystemClock;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.UrlUtil;
import com.forcetech.Util;
import com.github.catvod.net.OkHttp;
import com.google.common.net.HttpHeaders;
import java.util.HashSet;
import java.util.Map;
import java.util.regex.Pattern;
import okhttp3.Headers;
public class Force implements Source.Extractor, ServiceConnection {
private static final Pattern PATTERN = Pattern.compile("(?i)(p[2-9]p|mitv)");
private final HashSet<String> set = new HashSet<>();
@Override
public boolean match(String scheme, String host) {
return PATTERN.matcher(scheme).find();
public boolean match(Uri uri) {
return PATTERN.matcher(UrlUtil.scheme(uri)).find();
}
private void init(String scheme) {
@ -41,9 +41,8 @@ public class Force implements Source.Extractor, ServiceConnection {
int port = Util.port(scheme);
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(HttpHeaders.USER_AGENT, "MTV")).execute().body().string();
return result;
OkHttp.string(cmd, Map.of(HttpHeaders.USER_AGENT, "MTV"));
return "http://127.0.0.1:" + port + "/" + id;
}
@Override

@ -4,11 +4,13 @@ import android.net.Uri;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.utils.Path;
import com.p2p.P2PClass;
import java.net.URLDecoder;
import java.net.URLEncoder;
import java.util.Arrays;
public class JianPian implements Source.Extractor {
@ -16,8 +18,8 @@ public class JianPian implements Source.Extractor {
private String path;
@Override
public boolean match(String scheme, String host) {
return "tvbox-xg".equals(scheme) || "jianpian".equals(scheme) || "ftp".equals(scheme);
public boolean match(Uri uri) {
return Arrays.asList("tvbox-xg", "jianpian", "ftp").contains(UrlUtil.scheme(uri));
}
private void init() {

@ -1,16 +1,18 @@
package com.fongmi.android.tv.player.extractor;
import android.net.Uri;
import android.os.SystemClock;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.ui.activity.VideoActivity;
import com.fongmi.android.tv.utils.UrlUtil;
public class Push implements Source.Extractor {
@Override
public boolean match(String scheme, String host) {
return "push".equals(scheme);
public boolean match(Uri uri) {
return "push".equals(UrlUtil.scheme(uri));
}
@Override

@ -0,0 +1,33 @@
package com.fongmi.android.tv.player.extractor;
import android.net.Uri;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Path;
import java.io.File;
public class Strm implements Source.Extractor {
@Override
public boolean match(Uri uri) {
return UrlUtil.path(uri).contains(".strm");
}
@Override
public String fetch(String url) throws Exception {
if (url.startsWith("file")) url = url.substring(7);
if (url.startsWith("http")) return OkHttp.string(url).split("\\R", 2)[0];
return Path.read(new File(url)).split("\\R", 2)[0];
}
@Override
public void stop() {
}
@Override
public void exit() {
}
}

@ -11,6 +11,7 @@ import com.fongmi.android.tv.bean.Core;
import com.fongmi.android.tv.exception.ExtractException;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.ResUtil;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.net.OkHttp;
import com.github.catvod.utils.Path;
import com.google.gson.JsonObject;
@ -30,8 +31,8 @@ public class TVBus implements Source.Extractor, Listener {
private Core core;
@Override
public boolean match(String scheme, String host) {
return "tvbus".equals(scheme);
public boolean match(Uri uri) {
return "tvbus".equals(UrlUtil.scheme(uri));
}
private void init(Core core) {

@ -28,13 +28,13 @@ public class Thunder implements Source.Extractor {
private GetTaskId taskId;
@Override
public boolean match(String scheme, String host) {
return "magnet".equals(scheme) || "ed2k".equals(scheme);
public boolean match(Uri uri) {
return Arrays.asList("magnet", "ed2k").contains(UrlUtil.scheme(uri));
}
@Override
public String fetch(String url) throws Exception {
return UrlUtil.scheme(url).equals("magnet") ? addTorrentTask(Uri.parse(url)) : addThunderTask(url);
return url.startsWith("magnet") ? addTorrentTask(Uri.parse(url)) : addThunderTask(url);
}
private String addTorrentTask(Uri uri) throws Exception {

@ -1,12 +1,15 @@
package com.fongmi.android.tv.player.extractor;
import android.net.Uri;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.UrlUtil;
public class Video implements Source.Extractor {
@Override
public boolean match(String scheme, String host) {
return "video".equals(scheme);
public boolean match(Uri uri) {
return "video".equals(UrlUtil.scheme(uri));
}
@Override

@ -1,5 +1,6 @@
package com.fongmi.android.tv.player.extractor;
import android.net.Uri;
import android.util.Base64;
import com.fongmi.android.tv.bean.Episode;
@ -7,6 +8,7 @@ import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.event.RefreshEvent;
import com.fongmi.android.tv.impl.NewPipeImpl;
import com.fongmi.android.tv.player.Source;
import com.fongmi.android.tv.utils.UrlUtil;
import com.github.catvod.utils.Trans;
import org.schabi.newpipe.extractor.ListExtractor;
@ -40,7 +42,8 @@ public class Youtube implements Source.Extractor {
}
@Override
public boolean match(String scheme, String host) {
public boolean match(Uri uri) {
String host = UrlUtil.host(uri);
return host.contains("youtube.com") || host.contains("youtu.be");
}

Loading…
Cancel
Save