From 027c34548c9e49ad1dd391e4f4b0bd326ec4e999 Mon Sep 17 00:00:00 2001 From: okjack Date: Fri, 10 May 2024 18:26:49 +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 | 32 ++++++++----------- .../android/tv/ui/dialog/TrackDialog.java | 18 +++++++---- .../android/tv/ui/activity/VideoActivity.java | 2 +- .../android/tv/ui/dialog/InfoDialog.java | 3 +- 6 files changed, 30 insertions(+), 29 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 aa62875f3..8af02413a 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 8797569f2..b988f412b 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 @@ -1045,7 +1045,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onTrack(View view) { - TrackDialog.create().player(mPlayers).chooser(this).type(Integer.parseInt(view.getTag().toString())).show(this); + TrackDialog.create().player(mPlayers).chooser(this).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 7de843246..64a7dd461 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 @@ -122,25 +122,7 @@ 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("***") && url.contains("|||")) return getConcatSource(result, sub, errorCode); return getSource(result.getHeaders(), result.getRealUrl(), result.getFormat(), result.getSubs(), sub, null, errorCode); } @@ -157,12 +139,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(Players.EXO)); 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 663edf94f..689a229c5 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 Listener listener; private ChooserListener cListener; private Players player; + private boolean vod; private int type; public static TrackDialog create() { @@ -52,11 +53,6 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic this.provider = new TrackNameProvider(); } - public TrackDialog type(int type) { - this.type = type; - return this; - } - public TrackDialog chooser(ChooserListener listener) { this.cListener = listener; return this; @@ -67,6 +63,16 @@ public final class TrackDialog extends BaseDialog implements TrackAdapter.OnClic return this; } + public TrackDialog vod(boolean vod) { + this.vod = vod; + return this; + } + + public TrackDialog type(int type) { + this.type = type; + return this; + } + public void show(FragmentActivity activity) { for (Fragment f : activity.getSupportFragmentManager().getFragments()) if (f instanceof BottomSheetDialogFragment) return; show(activity.getSupportFragmentManager(), null); @@ -86,7 +92,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 3f2ed76f9..44018e21e 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 @@ -805,7 +805,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(); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java index c59fcf8ed..c4921a2c2 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java @@ -47,7 +47,8 @@ public class InfoDialog { } public InfoDialog url(String url) { - this.url = url; + if (url.startsWith("data")) this.url = "data***"; + else this.url = url; return this; }