diff --git a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java index eb528bb38..5427276cb 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java @@ -117,7 +117,7 @@ public class ExoUtil { } private static MediaSource getSource(Map headers, String url, String format, List subs, Drm drm, int errorCode) { - Uri uri = Uri.parse(url); + Uri uri = Uri.parse(Util.fixUrl(url)); String mimeType = getMimeType(format, errorCode); if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, Util.basic(uri)); return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, mimeType, subs, drm)); 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 d0851451d..5fd96268a 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 @@ -7,6 +7,7 @@ import com.fongmi.android.tv.bean.Result; import com.fongmi.android.tv.server.Server; import com.fongmi.android.tv.utils.Sniffer; import com.fongmi.android.tv.utils.Utils; +import com.github.catvod.utils.Util; import java.net.URLEncoder; import java.util.Map; @@ -24,9 +25,9 @@ public class IjkUtil { } public static MediaSource getSource(Map headers, String url) { - Uri uri = Uri.parse(url); - boolean local = Sniffer.getRegex(uri).size() > 0; - if (local) uri = Uri.parse(Server.get().getAddress().concat("/m3u8?url=").concat(URLEncoder.encode(url))); + Uri uri = Uri.parse(Util.fixUrl(url)); + boolean m3u8Ad = Sniffer.getRegex(uri).size() > 0; + if (m3u8Ad) uri = Uri.parse(Server.get().getAddress().concat("/m3u8?url=").concat(URLEncoder.encode(uri.toString()))); return new MediaSource(Utils.checkUa(headers), uri); } } diff --git a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java index 81d1855c9..5e5dfd8da 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java +++ b/app/src/main/java/com/fongmi/android/tv/player/ParseJob.java @@ -183,7 +183,7 @@ public class ParseJob implements ParseCallback { private Map getHeader(JsonObject object) { Map headers = new HashMap<>(); - for (String key : object.keySet()) if (key.equalsIgnoreCase(HttpHeaders.USER_AGENT) || key.equalsIgnoreCase(HttpHeaders.REFERER)) headers.put(Util.fix(key), object.get(key).getAsString()); + for (String key : object.keySet()) if (key.equalsIgnoreCase(HttpHeaders.USER_AGENT) || key.equalsIgnoreCase(HttpHeaders.REFERER)) headers.put(Util.fixHeader(key), object.get(key).getAsString()); if (headers.isEmpty()) return parse.getHeaders(); return headers; } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index e3c48e38e..e362596d9 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -13,7 +13,6 @@ import android.text.TextUtils; import androidx.annotation.NonNull; import androidx.media3.common.PlaybackException; import androidx.media3.common.Player; -import androidx.media3.common.util.Util; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.analytics.AnalyticsListener; import androidx.media3.exoplayer.util.EventLogger; @@ -33,6 +32,7 @@ import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.Utils; import com.github.catvod.utils.Path; +import com.github.catvod.utils.Util; import com.orhanobut.logger.Logger; import java.util.Formatter; @@ -177,7 +177,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic } public String stringToTime(long time) { - return Util.getStringForTime(builder, formatter, time); + return Util.format(builder, formatter, time); } public float getSpeed() { @@ -486,9 +486,9 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic } private boolean isIllegal(String url) { - Uri uri = Uri.parse(url); - String host = com.github.catvod.utils.Util.host(uri); - String scheme = com.github.catvod.utils.Util.scheme(uri); + Uri uri = Uri.parse(Util.fixUrl(url)); + String host = Util.host(uri); + String scheme = Util.scheme(uri); return scheme.isEmpty() || scheme.equals("file") ? !Path.exists(url) : host.isEmpty(); } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Source.java b/app/src/main/java/com/fongmi/android/tv/player/Source.java index 6a69b278c..6c03adc2a 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Source.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Source.java @@ -48,7 +48,6 @@ public class Source { public String fetch(Result result) throws Exception { String url = result.getUrl().v(); - url = url.trim().replace("\\", ""); Extractor extractor = getExtractor(url); if (extractor != null) result.setParse(0); return extractor == null ? url : extractor.fetch(url); @@ -56,7 +55,6 @@ public class Source { public String fetch(Channel channel) throws Exception { String url = channel.getCurrent().split("\\$")[0]; - url = url.trim().replace("\\", ""); Extractor extractor = getExtractor(url); return extractor == null ? url : extractor.fetch(url); } diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java index 53db7de4a..bb3e207f5 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java @@ -81,7 +81,7 @@ public class ImgUtil { private static void addHeader(LazyHeaders.Builder builder, String header) { Map map = Json.toMap(JsonParser.parseString(header)); - for (Map.Entry entry : map.entrySet()) builder.addHeader(Util.fix(entry.getKey()), entry.getValue()); + for (Map.Entry entry : map.entrySet()) builder.addHeader(Util.fixHeader(entry.getKey()), entry.getValue()); } public static byte[] resize(byte[] bytes) { diff --git a/catvod/src/main/java/com/github/catvod/utils/Util.java b/catvod/src/main/java/com/github/catvod/utils/Util.java index 3d6f3569e..c5fc51698 100644 --- a/catvod/src/main/java/com/github/catvod/utils/Util.java +++ b/catvod/src/main/java/com/github/catvod/utils/Util.java @@ -16,6 +16,7 @@ import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import java.text.DecimalFormat; import java.text.SimpleDateFormat; +import java.util.Formatter; public class Util { @@ -125,7 +126,19 @@ public class Util { } } - public static String fix(String key) { + public static String format(StringBuilder builder, Formatter formatter, long timeMs) { + try { + return androidx.media3.common.util.Util.getStringForTime(builder, formatter, timeMs); + } catch (Exception e) { + return ""; + } + } + + public static String fixUrl(String url) { + return url.trim().replace("\\", ""); + } + + public static String fixHeader(String key) { if (key.equalsIgnoreCase(HttpHeaders.USER_AGENT)) return HttpHeaders.USER_AGENT; if (key.equalsIgnoreCase(HttpHeaders.REFERER)) return HttpHeaders.REFERER; if (key.equalsIgnoreCase(HttpHeaders.COOKIE)) return HttpHeaders.COOKIE;