diff --git a/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java b/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java index 48958e1e9..7b8a04496 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java @@ -19,7 +19,7 @@ public class IjkUtil { public static MediaSource getSource(Map headers, String url) { Uri uri = Uri.parse(url.trim().replace("\\", "")); - if (Sniffer.isAds(uri)) uri = Uri.parse(Server.get().getAddress(true).concat("/m3u8?url=").concat(url)); + if (Sniffer.isAds(uri)) uri = Uri.parse(Server.get().getAddress().concat("/m3u8?url=").concat(url)); return new MediaSource(Utils.checkHeaders(headers), uri); } } diff --git a/app/src/main/java/com/fongmi/android/tv/server/Nano.java b/app/src/main/java/com/fongmi/android/tv/server/Nano.java index bc0c81178..4122e55d5 100644 --- a/app/src/main/java/com/fongmi/android/tv/server/Nano.java +++ b/app/src/main/java/com/fongmi/android/tv/server/Nano.java @@ -29,7 +29,6 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; import fi.iki.elonen.NanoHTTPD; -import okhttp3.Headers; public class Nano extends NanoHTTPD { @@ -123,7 +122,7 @@ public class Nano extends NanoHTTPD { private Response doM3u8(IHTTPSession session) { try { String url = session.getParms().get("url"); - String result = M3U8.get(url, Headers.of(session.getHeaders())); + String result = M3U8.get(url, session.getHeaders()); for (String ad : Sniffer.getAdsRegex(Uri.parse(url))) result = result.replaceAll(ad, ""); return newFixedLengthResponse(Response.Status.OK, NanoHTTPD.MIME_PLAINTEXT, result); } catch (Exception e) { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java index 80c4c651c..a2901a87d 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/M3U8.java @@ -3,7 +3,10 @@ package com.fongmi.android.tv.utils; import androidx.media3.common.util.UriUtil; import com.github.catvod.net.OkHttp; +import com.google.common.net.HttpHeaders; +import java.util.Map; +import java.util.Objects; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -11,8 +14,8 @@ import okhttp3.Headers; public class M3U8 { - public static String get(String url, Headers headers) throws Exception { - String result = OkHttp.newCall(url, headers).execute().body().string(); + public static String get(String url, Map headers) throws Exception { + String result = OkHttp.newCall(url, getHeader(headers)).execute().body().string(); Matcher matcher = Pattern.compile("#EXT-X-STREAM-INF(.*)\\n?(.*)").matcher(result); if (matcher.find() && matcher.groupCount() > 1) return get(UriUtil.resolve(url, matcher.group(2)), headers); StringBuilder sb = new StringBuilder(); @@ -20,6 +23,13 @@ public class M3U8 { return sb.toString(); } + private static Headers getHeader(Map headers) { + Headers.Builder builder = new Headers.Builder(); + if (headers.containsKey(HttpHeaders.USER_AGENT)) builder.add(HttpHeaders.USER_AGENT, Objects.requireNonNull(headers.get(HttpHeaders.USER_AGENT))); + if (headers.containsKey(HttpHeaders.REFERER)) builder.add(HttpHeaders.REFERER, Objects.requireNonNull(headers.get(HttpHeaders.REFERER))); + return builder.build(); + } + private static boolean shouldResolve(String line) { return !line.startsWith("#") && !line.startsWith("http"); }