|
|
|
|
@ -26,6 +26,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; |
|
|
|
|
@ -135,12 +136,24 @@ public class ExoUtil { |
|
|
|
|
if (sub != null) subs.add(sub); |
|
|
|
|
String mimeType = getMimeType(format, errorCode); |
|
|
|
|
if (uri.getUserInfo() != null) headers.put(HttpHeaders.AUTHORIZATION, Util.basic(uri.getUserInfo())); |
|
|
|
|
if (url.contains("***") && url.contains("|||")) return getConcat(headers, url, format, subs, sub, drm, errorCode); |
|
|
|
|
return new DefaultMediaSourceFactory(getDataSourceFactory(headers), getExtractorsFactory()).createMediaSource(getMediaItem(uri, mimeType, subs, drm)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static MediaSource getConcat(Map<String, String> headers, String url, String format, List<Sub> subs, Sub sub, Drm drm, int errorCode) { |
|
|
|
|
ConcatenatingMediaSource2.Builder builder = new ConcatenatingMediaSource2.Builder(); |
|
|
|
|
for (String split : url.split("\\*\\*\\*")) { |
|
|
|
|
String[] info = split.split("\\|\\|\\|"); |
|
|
|
|
if (info.length < 2) continue; |
|
|
|
|
long duration = Long.parseLong(info[1]); |
|
|
|
|
builder.add(getSource(headers, info[0], format, subs, sub, drm, errorCode), duration); |
|
|
|
|
} |
|
|
|
|
return builder.build(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private static MediaItem getMediaItem(Uri uri, String mimeType, List<Sub> subs, Drm drm) { |
|
|
|
|
MediaItem.Builder builder = new MediaItem.Builder().setUri(uri); |
|
|
|
|
if (subs.size() > 0) builder.setSubtitleConfigurations(getSubtitles(subs)); |
|
|
|
|
if (!subs.isEmpty()) builder.setSubtitleConfigurations(getSubtitles(subs)); |
|
|
|
|
if (drm != null) builder.setDrmConfiguration(drm.get()); |
|
|
|
|
builder.setAllowChunklessPreparation(Players.isHard()); |
|
|
|
|
if (mimeType != null) builder.setMimeType(mimeType); |
|
|
|
|
|