Fix ijk header bug

pull/137/head
FongMi 3 years ago
parent bd6586374b
commit 7018fe56b3
  1. 2
      app/src/main/java/com/fongmi/android/tv/player/IjkUtil.java
  2. 3
      app/src/main/java/com/fongmi/android/tv/server/Nano.java
  3. 14
      app/src/main/java/com/fongmi/android/tv/utils/M3U8.java

@ -19,7 +19,7 @@ public class IjkUtil {
public static MediaSource getSource(Map<String, String> 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);
}
}

@ -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) {

@ -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<String, String> 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<String, String> 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");
}

Loading…
Cancel
Save