Support exo format

pull/137/head
FongMi 3 years ago
parent 65c011a5f4
commit 075c849ad2
  1. 6
      app/src/main/java/com/fongmi/android/tv/bean/Result.java
  2. 21
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java

@ -48,6 +48,8 @@ public class Result {
private Integer parse; private Integer parse;
@SerializedName("jx") @SerializedName("jx")
private Integer jx; private Integer jx;
@SerializedName("format")
private String format;
@SerializedName("flag") @SerializedName("flag")
private String flag; private String flag;
@SerializedName("url") @SerializedName("url")
@ -162,6 +164,10 @@ public class Result {
this.jx = jx; this.jx = jx;
} }
public String getFormat() {
return format;
}
public String getFlag() { public String getFlag() {
return TextUtils.isEmpty(flag) ? "" : flag; return TextUtils.isEmpty(flag) ? "" : flag;
} }

@ -97,29 +97,36 @@ public class ExoUtil {
} }
public static MediaSource getSource(Result result, int errorCode) { public static MediaSource getSource(Result result, int errorCode) {
return getSource(result.getHeaders(), result.getRealUrl(), result.getSubs(), errorCode); return getSource(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getSubs(), errorCode);
} }
public static MediaSource getSource(Map<String, String> headers, String url, int errorCode) { public static MediaSource getSource(Map<String, String> headers, String url, int errorCode) {
return getSource(headers, url, Collections.emptyList(), errorCode); return getSource(headers, url, null, Collections.emptyList(), errorCode);
} }
private static MediaSource getSource(Map<String, String> headers, String url, List<Sub> subs, int errorCode) { private static MediaSource getSource(Map<String, String> headers, String url, String format, List<Sub> subs, int errorCode) {
Uri uri = Uri.parse(url.trim().replace("\\", "")); Uri uri = Uri.parse(url.trim().replace("\\", ""));
String mimeType = getMimeType(format, errorCode);
if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, "Basic " + Base64.encodeToString(uri.getUserInfo().getBytes(), Base64.NO_WRAP)); if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, "Basic " + Base64.encodeToString(uri.getUserInfo().getBytes(), Base64.NO_WRAP));
return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, subs, errorCode)); return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, mimeType, subs));
} }
private static MediaItem getMediaItem(Uri uri, List<Sub> subs, int errorCode) { private static MediaItem getMediaItem(Uri uri, String mimeType, List<Sub> subs) {
MediaItem.Builder builder = new MediaItem.Builder().setUri(uri); MediaItem.Builder builder = new MediaItem.Builder().setUri(uri);
if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_IO_UNSPECIFIED) builder.setMimeType(MimeTypes.APPLICATION_M3U8);
else if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) builder.setMimeType(MimeTypes.APPLICATION_OCTET);
if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs)); if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs));
builder.setAllowChunklessPreparation(Players.isHard()); builder.setAllowChunklessPreparation(Players.isHard());
if (mimeType != null) builder.setMimeType(mimeType);
builder.setAds(Sniffer.getAdsRegex(uri)); builder.setAds(Sniffer.getAdsRegex(uri));
return builder.build(); return builder.build();
} }
private static String getMimeType(String format, int errorCode) {
if (format != null) return format;
if (errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED) return MimeTypes.APPLICATION_OCTET;
if (errorCode == PlaybackException.ERROR_CODE_PARSING_CONTAINER_UNSUPPORTED || errorCode == PlaybackException.ERROR_CODE_IO_UNSPECIFIED) return MimeTypes.APPLICATION_M3U8;
return null;
}
private static List<MediaItem.SubtitleConfiguration> getSubtitles(List<Sub> subs) { private static List<MediaItem.SubtitleConfiguration> getSubtitles(List<Sub> subs) {
List<MediaItem.SubtitleConfiguration> items = new ArrayList<>(); List<MediaItem.SubtitleConfiguration> items = new ArrayList<>();
for (Sub sub : subs) items.add(sub.getExo()); for (Sub sub : subs) items.add(sub.getExo());

Loading…
Cancel
Save