From 66843765bc10b7fdc80b995945e4544068b8dbdc Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 10 May 2024 17:37:11 +0800 Subject: [PATCH] Fix bug --- .../android/tv/ui/activity/CastActivity.java | 2 +- .../android/tv/ui/activity/VideoActivity.java | 2 +- .../com/fongmi/android/tv/player/ExoUtil.java | 15 ++++++++++++++- .../fongmi/android/tv/ui/dialog/TrackDialog.java | 16 +++++++++++----- .../android/tv/ui/activity/VideoActivity.java | 2 +- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index 1507cc64d..93b240dc7 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -216,7 +216,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void onTrack(View view) { - TrackDialog.create().player(mPlayers).type(Integer.parseInt(view.getTag().toString())).show(this); + TrackDialog.create().player(mPlayers).vod(true).type(Integer.parseInt(view.getTag().toString())).show(this); hideControl(); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 6222b8b1d..586b16fab 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -878,7 +878,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onTrack(View view) { - TrackDialog.create().player(mPlayers).type(Integer.parseInt(view.getTag().toString())).show(this); + TrackDialog.create().player(mPlayers).vod(true).type(Integer.parseInt(view.getTag().toString())).show(this); hideControl(); } 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 34008fabf..9f3b90504 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 @@ -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 headers, String url, String format, List 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 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); diff --git a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java index 954679614..f6608c030 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java @@ -41,6 +41,7 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic private FragmentActivity activity; private Listener listener; private Players player; + private boolean vod; private int type; public static TrackDialog create() { @@ -52,13 +53,18 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic this.provider = new TrackNameProvider(); } - public TrackDialog type(int type) { - this.type = type; + public TrackDialog player(Players player) { + this.player = player; return this; } - public TrackDialog player(Players player) { - this.player = player; + public TrackDialog vod(boolean vod) { + this.vod = vod; + return this; + } + + public TrackDialog type(int type) { + this.type = type; return this; } @@ -82,7 +88,7 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic binding.recycler.addItemDecoration(new SpaceItemDecoration(1, 16)); binding.recycler.post(() -> binding.recycler.scrollToPosition(adapter.getSelected())); binding.recycler.setVisibility(adapter.getItemCount() == 0 ? View.GONE : View.VISIBLE); - binding.choose.setVisibility(type == C.TRACK_TYPE_TEXT && player.isExo() ? View.VISIBLE : View.GONE); + binding.choose.setVisibility(type == C.TRACK_TYPE_TEXT && player.isExo() && vod ? View.VISIBLE : View.GONE); binding.size.setVisibility(type == C.TRACK_TYPE_TEXT ? View.VISIBLE : View.GONE); binding.title.setText(ResUtil.getStringArray(R.array.select_track)[type - 1]); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index dbdc70118..d615e1159 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -734,7 +734,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onTrack(View view) { - TrackDialog.create().player(mPlayers).type(Integer.parseInt(view.getTag().toString())).show(this); + TrackDialog.create().player(mPlayers).vod(true).type(Integer.parseInt(view.getTag().toString())).show(this); hideControl(); }