pull/496/head
FongMi 2 years ago
parent 4a70be4f9c
commit 66843765bc
  1. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  3. 15
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  4. 16
      app/src/main/java/com/fongmi/android/tv/ui/dialog/TrackDialog.java
  5. 2
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.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();
}

@ -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();
}

@ -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);

@ -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]);
}

@ -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();
}

Loading…
Cancel
Save