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 3d35cbf4e..c7255e534 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 @@ -64,7 +64,7 @@ public class ExoUtil { public static boolean haveTrack(Tracks tracks, int type) { int count = 0; for (Tracks.Group trackGroup : tracks.getGroups()) if (trackGroup.getType() == type) count += trackGroup.length; - return count > 1; + return count > 0; } public static MediaSource getSource(Result result, int errorCode) { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/TrackSelectionDialog.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/TrackSelectionDialog.java index 17566dc1a..409580e90 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/TrackSelectionDialog.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/TrackSelectionDialog.java @@ -14,6 +14,7 @@ import com.fongmi.android.tv.utils.ResUtil; import com.google.android.exoplayer2.Tracks; import com.google.android.exoplayer2.trackselection.TrackSelectionOverride; import com.google.android.material.dialog.MaterialAlertDialogBuilder; +import com.google.common.collect.ImmutableList; import java.util.ArrayList; import java.util.List; @@ -105,10 +106,26 @@ public final class TrackSelectionDialog implements TrackAdapter.OnClickListener } } + private void setExoTrack(Track item) { + if (item.isSelected()) { + player.exo().setTrackSelectionParameters(player.exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(player.exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), ImmutableList.of())).build()); + } else { + player.exo().setTrackSelectionParameters(player.exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(player.exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), item.getTrack())).build()); + } + } + + private void setIjkTrack(Track item) { + if (item.isSelected()) { + player.ijk().deselectTrack(item.getTrack()); + } else { + player.ijk().selectTrack(item.getTrack()); + } + } + @Override public void onItemClick(Track item) { - if (player.isExo()) player.exo().setTrackSelectionParameters(player.exo().getTrackSelectionParameters().buildUpon().setOverrideForType(new TrackSelectionOverride(player.exo().getCurrentTracks().getGroups().get(item.getGroup()).getMediaTrackGroup(), item.getTrack())).build()); - if (player.isIjk()) player.ijk().selectTrack(item.getTrack()); + if (player.isExo()) setExoTrack(item); + if (player.isIjk()) setIjkTrack(item); dialog.dismiss(); } } \ No newline at end of file diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index 0a2d3dded..f118fab6a 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -467,7 +467,7 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl if (trackInfos == null) return false; int count = 0; for (IjkTrackInfo trackInfo : trackInfos) if (trackInfo.getTrackType() == type) ++count; - return count > 1; + return count > 0; } public IjkTrackInfo[] getTrackInfo() { @@ -484,6 +484,13 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl seekTo(position); } + public void deselectTrack(int track) { + long position = getCurrentPosition(); + mIjkPlayer.deselectTrack(track); + subtitleView.setText(""); + seekTo(position); + } + private void setPreferredTextLanguage() { IjkTrackInfo[] trackInfos = mIjkPlayer.getTrackInfo(); if (trackInfos == null) return;