From e32b5728d5a54a90149c417be4f5703c710df637 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 1 Jul 2023 20:12:00 +0800 Subject: [PATCH] Fix ijk m3u8 bug --- .../java/com/fongmi/android/tv/utils/M3U8.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) 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 a2901a87d..993be3826 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 @@ -14,12 +14,15 @@ import okhttp3.Headers; public class M3U8 { + private static final Pattern REGEX_URI = Pattern.compile("URI=\"(.+?)\""); + private static final String TAG_KEY = "#EXT-X-KEY"; + 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(); - for (String line : result.split("\n")) sb.append(shouldResolve(line) ? UriUtil.resolve(url, line) : line).append("\n"); + for (String line : result.split("\n")) sb.append(shouldResolve(line) ? resolve(url, line) : line).append("\n"); return sb.toString(); } @@ -31,6 +34,16 @@ public class M3U8 { } private static boolean shouldResolve(String line) { - return !line.startsWith("#") && !line.startsWith("http"); + return (!line.startsWith("#") && !line.startsWith("http")) || line.startsWith(TAG_KEY); + } + + private static String resolve(String base, String line) { + if (line.startsWith(TAG_KEY)) { + Matcher matcher = REGEX_URI.matcher(line); + String value = matcher.find() ? matcher.group(1) : ""; + return value == null ? line : line.replace(value, UriUtil.resolve(base, value)); + } else { + return UriUtil.resolve(base, line); + } } }