diff --git a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java index 0859e3fd9..a7f7d6458 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java +++ b/app/src/main/java/com/fongmi/android/tv/api/LiveParser.java @@ -2,6 +2,8 @@ package com.fongmi.android.tv.api; import android.util.Base64; +import androidx.media3.common.MimeTypes; + import com.fongmi.android.tv.bean.Catchup; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.ClearKey; @@ -132,6 +134,7 @@ public class LiveParser { private String key; private String type; private String click; + private String format; private String origin; private String referer; private Integer parse; @@ -160,6 +163,7 @@ public class LiveParser { else if (line.startsWith("#EXTVLCOPT:http-referrer")) referer(line); else if (line.startsWith("#KODIPROP:inputstream.adaptive.license_key")) key(line); else if (line.startsWith("#KODIPROP:inputstream.adaptive.license_type")) type(line); + else if (line.startsWith("#KODIPROP:inputstream.adaptive.manifest_type")) format(line); else if (line.startsWith("#KODIPROP:inputstream.adaptive.stream_headers")) headers(line); } @@ -167,6 +171,7 @@ public class LiveParser { if (ua != null) channel.setUa(ua); if (parse != null) channel.setParse(parse); if (click != null) channel.setClick(click); + if (format != null) channel.setFormat(format); if (origin != null) channel.setOrigin(origin); if (referer != null) channel.setReferer(referer); if (player != null) channel.setPlayerType(player); @@ -216,6 +221,16 @@ public class LiveParser { } } + private void format(String line) { + try { + String type = line.split("manifest_type=")[1].trim(); + if ("mpd".equals(type)) format = MimeTypes.APPLICATION_MPD; + else if ("hls".equals(type)) format = MimeTypes.APPLICATION_M3U8; + } catch (Exception e) { + format = null; + } + } + private void origin(String line) { try { origin = line.split("(?i)origin=")[1].trim(); @@ -285,6 +300,7 @@ public class LiveParser { click = null; player = null; header = null; + format = null; origin = null; referer = null; } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java index 0c46a7c58..6eaee5cb7 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Channel.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Channel.java @@ -35,6 +35,8 @@ public class Channel { private String ua; @SerializedName("click") private String click; + @SerializedName("format") + private String format; @SerializedName("origin") private String origin; @SerializedName("referer") @@ -142,6 +144,14 @@ public class Channel { this.click = click; } + public String getFormat() { + return format; + } + + public void setFormat(String format) { + this.format = format; + } + public String getOrigin() { return TextUtils.isEmpty(origin) ? "" : origin; } @@ -339,6 +349,7 @@ public class Channel { setHeader(item.getHeader()); setNumber(item.getNumber()); setOrigin(item.getOrigin()); + setFormat(item.getFormat()); setParse(item.getParse()); setClick(item.getClick()); setLogo(item.getLogo()); 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 7b8fd4ca0..34008fabf 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 @@ -123,7 +123,7 @@ public class ExoUtil { } public static MediaSource getSource(Channel channel, int errorCode) { - return getSource(channel.getHeaders(), channel.getUrl(), null, Collections.emptyList(), null, channel.getDrm(), errorCode); + return getSource(channel.getHeaders(), channel.getUrl(), channel.getFormat(), Collections.emptyList(), null, channel.getDrm(), errorCode); } public static MediaSource getSource(Map headers, String url, Sub sub, int errorCode) {