Enhance exo malformed check

pull/123/head
FongMi 4 years ago
parent f5ff95d7c5
commit 73416d101d
  1. 11
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  2. 10
      app/src/main/java/com/fongmi/android/tv/player/Players.java

@ -35,17 +35,18 @@ public class ExoUtil {
return new CaptionStyleCompat(Color.WHITE, Color.TRANSPARENT, Color.TRANSPARENT, CaptionStyleCompat.EDGE_TYPE_OUTLINE, Color.BLACK, null);
}
public static MediaSource getSource(Result result) {
return getSource(result.getHeaders(), result.getPlayUrl() + result.getUrl(), getConfig(result));
public static MediaSource getSource(Result result, boolean malformed) {
return getSource(result.getHeaders(), result.getPlayUrl() + result.getUrl(), malformed, getConfig(result));
}
public static MediaSource getSource(Map<String, String> headers, String url) {
return getSource(headers, url, Collections.emptyList());
public static MediaSource getSource(Map<String, String> headers, String url, boolean malformed) {
return getSource(headers, url, malformed, Collections.emptyList());
}
private static MediaSource getSource(Map<String, String> headers, String url, List<MediaItem.SubtitleConfiguration> config) {
private static MediaSource getSource(Map<String, String> headers, String url, boolean malformed, List<MediaItem.SubtitleConfiguration> config) {
MediaItem.Builder builder = new MediaItem.Builder().setUri(Uri.parse(url));
if (url.contains("m3u8")) builder.setMimeType(MimeTypes.APPLICATION_M3U8);
if (malformed) builder.setMimeType(MimeTypes.APPLICATION_OCTET);
if (config.size() > 0) builder.setSubtitleConfigurations(config);
return new DefaultMediaSourceFactory(getDataSourceFactory(headers)).createMediaSource(builder.build());
}

@ -27,6 +27,7 @@ public class Players implements Player.Listener, AnalyticsListener, ParseTask.Ca
private Formatter formatter;
private ExoPlayer exoPlayer;
private ParseTask parseTask;
private boolean malformed;
private int retry;
public Players init() {
@ -155,15 +156,17 @@ public class Players implements Player.Listener, AnalyticsListener, ParseTask.Ca
}
private void setMediaSource(Result result) {
exoPlayer.setMediaSource(ExoUtil.getSource(result));
exoPlayer.setMediaSource(ExoUtil.getSource(result, malformed));
PlayerEvent.state(0);
exoPlayer.prepare();
malformed = false;
}
private void setMediaSource(Map<String, String> headers, String url) {
exoPlayer.setMediaSource(ExoUtil.getSource(headers, url));
exoPlayer.setMediaSource(ExoUtil.getSource(headers, url, malformed));
PlayerEvent.state(0);
exoPlayer.prepare();
malformed = false;
}
@Override
@ -179,6 +182,7 @@ public class Players implements Player.Listener, AnalyticsListener, ParseTask.Ca
@Override
public void onPlayerError(@NonNull PlaybackException error) {
malformed = error.errorCode == PlaybackException.ERROR_CODE_PARSING_MANIFEST_MALFORMED;
PlayerEvent.error(R.string.error_play_format, true);
}
@ -189,6 +193,6 @@ public class Players implements Player.Listener, AnalyticsListener, ParseTask.Ca
@Override
public void onAudioSinkError(@NonNull EventTime eventTime, @NonNull Exception audioSinkError) {
seekTo(1000);
seekTo(500);
}
}

Loading…
Cancel
Save