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 00f7008fe..1937efb4e 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 @@ -27,6 +27,7 @@ import androidx.media3.exoplayer.DefaultRenderersFactory; import androidx.media3.exoplayer.ExoPlayer; import androidx.media3.exoplayer.LoadControl; import androidx.media3.exoplayer.RenderersFactory; +import androidx.media3.exoplayer.source.ConcatenatingMediaSource2; import androidx.media3.exoplayer.source.DefaultMediaSourceFactory; import androidx.media3.exoplayer.source.MediaSource; import androidx.media3.exoplayer.trackselection.DefaultTrackSelector; @@ -121,7 +122,25 @@ public class ExoUtil { return null; } + private static MediaSource getConcatSource(Result result, Sub sub, int errorCode) { + String url = result.getRealUrl(); + String[] urls = url.split("\\*\\*\\*"); + ConcatenatingMediaSource2.Builder concatenatingMediaSource = new ConcatenatingMediaSource2.Builder(); + for(String one : urls) { + if (TextUtils.isEmpty(one)) continue; + String[] oneInfo = one.split("\\|\\|\\|"); + if (oneInfo.length < 2) continue; + String oneUrl = oneInfo[0]; + String oneDuration = oneInfo[1]; + long duration = Long.parseLong(oneDuration); + concatenatingMediaSource.add(getSource(result.getHeaders(), oneUrl, result.getFormat(), result.getSubs(), sub, null, errorCode), duration); + } + return concatenatingMediaSource.build(); + } + public static MediaSource getSource(Result result, Sub sub, int errorCode) { + String url = result.getRealUrl(); + if (url.contains("***")) return getConcatSource(result, sub, errorCode); return getSource(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getSubs(), sub, null, errorCode); }