pull/585/head
FongMi 11 months ago
parent 8503c1bd84
commit 44636acc55
  1. 2
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  2. 6
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  3. 10
      app/src/main/java/com/fongmi/android/tv/player/extractor/Youtube.java

@ -277,7 +277,7 @@ public class Result implements Parcelable {
} }
public boolean hasMsg() { public boolean hasMsg() {
return getMsg().length() > 0; return !getMsg().isEmpty();
} }
public String getRealUrl() { public String getRealUrl() {

@ -366,10 +366,10 @@ public class Players implements Player.Listener, ParseCallback {
public void start(Result result, boolean useParse, int timeout) { public void start(Result result, boolean useParse, int timeout) {
if (result.hasMsg()) { if (result.hasMsg()) {
ErrorEvent.extract(result.getMsg()); ErrorEvent.extract(result.getMsg());
} else if (result.getParse(1) == 1 || result.getJx() == 1) {
startParse(result, useParse);
} else if (isIllegal(result.getRealUrl())) { } else if (isIllegal(result.getRealUrl())) {
ErrorEvent.url(); ErrorEvent.url();
} else if (result.getParse(1) == 1 || result.getJx() == 1) {
startParse(result, useParse);
} else if (result.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(result.getDrm().getUUID())) { } else if (result.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(result.getDrm().getUUID())) {
ErrorEvent.drm(); ErrorEvent.drm();
} else { } else {
@ -458,6 +458,8 @@ public class Players implements Player.Listener, ParseCallback {
String host = UrlUtil.host(uri); String host = UrlUtil.host(uri);
String scheme = UrlUtil.scheme(uri); String scheme = UrlUtil.scheme(uri);
if ("data".equals(scheme)) return false; if ("data".equals(scheme)) return false;
if (url.startsWith("json:")) return false;
if (url.startsWith("parse:")) return false;
return scheme.isEmpty() || "file".equals(scheme) ? !Path.exists(url) : host.isEmpty(); return scheme.isEmpty() || "file".equals(scheme) ? !Path.exists(url) : host.isEmpty();
} }

@ -24,14 +24,12 @@ public class Youtube implements Source.Extractor {
public String fetch(String url) throws Exception { public String fetch(String url) throws Exception {
String html = OkHttp.newCall(url, Headers.of(HttpHeaders.USER_AGENT, Util.CHROME)).execute().body().string(); String html = OkHttp.newCall(url, Headers.of(HttpHeaders.USER_AGENT, Util.CHROME)).execute().body().string();
Matcher matcher = Pattern.compile("var ytInitialPlayerResponse =(.*?\\});").matcher(html); Matcher matcher = Pattern.compile("var ytInitialPlayerResponse =(.*?\\});").matcher(html);
if (!matcher.find()) return ""; JsonObject object = Json.parse(matcher.group(1)).getAsJsonObject().get("streamingData").getAsJsonObject();
JsonObject streamingData = Json.parse(matcher.group(1)).getAsJsonObject().get("streamingData").getAsJsonObject(); return getHlsManifestUrl(object);
if (streamingData.has("hlsManifestUrl")) return getHlsManifestUrl(streamingData);
return "";
} }
private String getHlsManifestUrl(JsonObject streamingData) { private String getHlsManifestUrl(JsonObject object) {
JsonElement hlsManifestUrl = streamingData.get("hlsManifestUrl"); JsonElement hlsManifestUrl = object.get("hlsManifestUrl");
if (hlsManifestUrl.isJsonArray()) return hlsManifestUrl.getAsJsonArray().get(0).getAsString(); if (hlsManifestUrl.isJsonArray()) return hlsManifestUrl.getAsJsonArray().get(0).getAsString();
return hlsManifestUrl.getAsString(); return hlsManifestUrl.getAsString();
} }

Loading…
Cancel
Save