diff --git a/RELEASENOTES.md b/RELEASENOTES.md index d72e648a72..37124deb1c 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -31,6 +31,11 @@ instead. You can also continue to use `ExoPlayer.getCurrentTrackGroups` and `ExoPlayer.getCurrentTrackSelections`, although these methods remain deprecated. + * Remove `DownloadHelper` + `DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT` and + `DEFAULT_TRACK_SELECTOR_PARAMETERS` constants. Use + `getDefaultTrackSelectorParameters(Context)` instead when possible, and + `DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT` otherwise. ### 2.17.0 (2022-02-24) diff --git a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java index 84a4d8d749..1bc2cc0442 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/offline/DownloadHelper.java @@ -47,10 +47,10 @@ import com.google.android.exoplayer2.source.chunk.MediaChunk; import com.google.android.exoplayer2.source.chunk.MediaChunkIterator; import com.google.android.exoplayer2.trackselection.BaseTrackSelection; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector; -import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.Parameters; import com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride; import com.google.android.exoplayer2.trackselection.ExoTrackSelection; import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo; +import com.google.android.exoplayer2.trackselection.TrackSelectionParameters; import com.google.android.exoplayer2.trackselection.TrackSelectorResult; import com.google.android.exoplayer2.upstream.Allocator; import com.google.android.exoplayer2.upstream.BandwidthMeter; @@ -83,8 +83,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull; *
If possible, use {@link #getDefaultTrackSelectorParameters(Context)} instead. * - * @see Parameters#DEFAULT_WITHOUT_CONTEXT + * @see DefaultTrackSelector.Parameters#DEFAULT_WITHOUT_CONTEXT */ - public static final Parameters DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT = - Parameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setForceHighestSupportedBitrate(true).build(); - - /** - * @deprecated This instance does not have {@link Context} constraints. Use {@link - * #getDefaultTrackSelectorParameters(Context)} instead. - */ - @Deprecated - public static final Parameters DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_VIEWPORT = - DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT; - - /** - * @deprecated This instance does not have {@link Context} constraints. Use {@link - * #getDefaultTrackSelectorParameters(Context)} instead. - */ - @Deprecated - public static final DefaultTrackSelector.Parameters DEFAULT_TRACK_SELECTOR_PARAMETERS = - DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT; + public static final DefaultTrackSelector.Parameters + DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT = + DefaultTrackSelector.Parameters.DEFAULT_WITHOUT_CONTEXT + .buildUpon() + .setForceHighestSupportedBitrate(true) + .build(); /** Returns the default parameters used for track selection for downloading. */ public static DefaultTrackSelector.Parameters getDefaultTrackSelectorParameters(Context context) { - return Parameters.getDefaults(context) + return DefaultTrackSelector.Parameters.getDefaults(context) .buildUpon() .setForceHighestSupportedBitrate(true) .build(); @@ -188,7 +176,7 @@ public final class DownloadHelper { } /** - * @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory, + * @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory, * DataSource.Factory)} instead. */ @SuppressWarnings("deprecation") @@ -207,7 +195,7 @@ public final class DownloadHelper { } /** - * @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory, + * @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory, * DataSource.Factory, DrmSessionManager)} instead. */ @Deprecated @@ -216,17 +204,17 @@ public final class DownloadHelper { DataSource.Factory dataSourceFactory, RenderersFactory renderersFactory, @Nullable DrmSessionManager drmSessionManager, - DefaultTrackSelector.Parameters trackSelectorParameters) { + TrackSelectionParameters trackSelectionParameters) { return forMediaItem( new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_MPD).build(), - trackSelectorParameters, + trackSelectionParameters, renderersFactory, dataSourceFactory, drmSessionManager); } /** - * @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory, + * @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory, * DataSource.Factory)} instead. */ @SuppressWarnings("deprecation") @@ -245,7 +233,7 @@ public final class DownloadHelper { } /** - * @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory, + * @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory, * DataSource.Factory, DrmSessionManager)} instead. */ @Deprecated @@ -254,17 +242,17 @@ public final class DownloadHelper { DataSource.Factory dataSourceFactory, RenderersFactory renderersFactory, @Nullable DrmSessionManager drmSessionManager, - DefaultTrackSelector.Parameters trackSelectorParameters) { + TrackSelectionParameters trackSelectionParameters) { return forMediaItem( new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_M3U8).build(), - trackSelectorParameters, + trackSelectionParameters, renderersFactory, dataSourceFactory, drmSessionManager); } /** - * @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory, + * @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory, * DataSource.Factory)} instead. */ @SuppressWarnings("deprecation") @@ -280,7 +268,7 @@ public final class DownloadHelper { } /** - * @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory, + * @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory, * DataSource.Factory)} instead. */ @SuppressWarnings("deprecation") @@ -299,7 +287,7 @@ public final class DownloadHelper { } /** - * @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory, + * @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory, * DataSource.Factory, DrmSessionManager)} instead. */ @Deprecated @@ -308,10 +296,10 @@ public final class DownloadHelper { DataSource.Factory dataSourceFactory, RenderersFactory renderersFactory, @Nullable DrmSessionManager drmSessionManager, - DefaultTrackSelector.Parameters trackSelectorParameters) { + TrackSelectionParameters trackSelectionParameters) { return forMediaItem( new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_SS).build(), - trackSelectorParameters, + trackSelectionParameters, renderersFactory, dataSourceFactory, drmSessionManager); @@ -369,7 +357,7 @@ public final class DownloadHelper { * @param mediaItem A {@link MediaItem}. * @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are * selected. - * @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for + * @param trackSelectionParameters {@link TrackSelectionParameters} for selecting tracks for * downloading. * @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest for adaptive * streams. This argument is required for adaptive streams and ignored for progressive @@ -381,12 +369,12 @@ public final class DownloadHelper { */ public static DownloadHelper forMediaItem( MediaItem mediaItem, - DefaultTrackSelector.Parameters trackSelectorParameters, + TrackSelectionParameters trackSelectionParameters, @Nullable RenderersFactory renderersFactory, @Nullable DataSource.Factory dataSourceFactory) { return forMediaItem( mediaItem, - trackSelectorParameters, + trackSelectionParameters, renderersFactory, dataSourceFactory, /* drmSessionManager= */ null); @@ -398,7 +386,7 @@ public final class DownloadHelper { * @param mediaItem A {@link MediaItem}. * @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are * selected. - * @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for + * @param trackSelectionParameters {@link TrackSelectionParameters} for selecting tracks for * downloading. * @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest for adaptive * streams. This argument is required for adaptive streams and ignored for progressive @@ -412,7 +400,7 @@ public final class DownloadHelper { */ public static DownloadHelper forMediaItem( MediaItem mediaItem, - DefaultTrackSelector.Parameters trackSelectorParameters, + TrackSelectionParameters trackSelectionParameters, @Nullable RenderersFactory renderersFactory, @Nullable DataSource.Factory dataSourceFactory, @Nullable DrmSessionManager drmSessionManager) { @@ -424,7 +412,7 @@ public final class DownloadHelper { ? null : createMediaSourceInternal( mediaItem, castNonNull(dataSourceFactory), drmSessionManager), - trackSelectorParameters, + trackSelectionParameters, renderersFactory != null ? getRendererCapabilities(renderersFactory) : new RendererCapabilities[0]); @@ -480,7 +468,7 @@ public final class DownloadHelper { * @param mediaItem The media item. * @param mediaSource A {@link MediaSource} for which tracks are selected, or null if no track * selection needs to be made. - * @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for + * @param trackSelectionParameters {@link TrackSelectionParameters} for selecting tracks for * downloading. * @param rendererCapabilities The {@link RendererCapabilities} of the renderers for which tracks * are selected. @@ -488,12 +476,12 @@ public final class DownloadHelper { public DownloadHelper( MediaItem mediaItem, @Nullable MediaSource mediaSource, - DefaultTrackSelector.Parameters trackSelectorParameters, + TrackSelectionParameters trackSelectionParameters, RendererCapabilities[] rendererCapabilities) { this.localConfiguration = checkNotNull(mediaItem.localConfiguration); this.mediaSource = mediaSource; this.trackSelector = - new DefaultTrackSelector(trackSelectorParameters, new DownloadTrackSelection.Factory()); + new DefaultTrackSelector(trackSelectionParameters, new DownloadTrackSelection.Factory()); this.rendererCapabilities = rendererCapabilities; this.scratchSet = new SparseIntArray(); trackSelector.init(/* listener= */ () -> {}, new FakeBandwidthMeter()); @@ -609,13 +597,13 @@ public final class DownloadHelper { * completes. * * @param periodIndex The period index for which the track selection is replaced. - * @param trackSelectorParameters The {@link DefaultTrackSelector.Parameters} to obtain the new + * @param trackSelectionParameters The {@link TrackSelectionParameters} to obtain the new * selection of tracks. */ public void replaceTrackSelections( - int periodIndex, DefaultTrackSelector.Parameters trackSelectorParameters) { + int periodIndex, TrackSelectionParameters trackSelectionParameters) { clearTrackSelections(periodIndex); - addTrackSelection(periodIndex, trackSelectorParameters); + addTrackSelection(periodIndex, trackSelectionParameters); } /** @@ -623,13 +611,13 @@ public final class DownloadHelper { * completes. * * @param periodIndex The period index this track selection is added for. - * @param trackSelectorParameters The {@link DefaultTrackSelector.Parameters} to obtain the new + * @param trackSelectionParameters The {@link TrackSelectionParameters} to obtain the new * selection of tracks. */ public void addTrackSelection( - int periodIndex, DefaultTrackSelector.Parameters trackSelectorParameters) { + int periodIndex, TrackSelectionParameters trackSelectionParameters) { assertPreparedWithMedia(); - trackSelector.setParameters(trackSelectorParameters); + trackSelector.setParameters(trackSelectionParameters); runTrackSelection(periodIndex); } @@ -643,19 +631,25 @@ public final class DownloadHelper { */ public void addAudioLanguagesToSelection(String... languages) { assertPreparedWithMedia(); - for (int periodIndex = 0; periodIndex < mappedTrackInfos.length; periodIndex++) { - DefaultTrackSelector.ParametersBuilder parametersBuilder = - DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon(); - MappedTrackInfo mappedTrackInfo = mappedTrackInfos[periodIndex]; - int rendererCount = mappedTrackInfo.getRendererCount(); - for (int rendererIndex = 0; rendererIndex < rendererCount; rendererIndex++) { - if (mappedTrackInfo.getRendererType(rendererIndex) != C.TRACK_TYPE_AUDIO) { - parametersBuilder.setRendererDisabled(rendererIndex, /* disabled= */ true); - } - } - for (String language : languages) { - parametersBuilder.setPreferredAudioLanguage(language); - addTrackSelection(periodIndex, parametersBuilder.build()); + + TrackSelectionParameters.Builder parametersBuilder = + DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon(); + // Prefer highest supported bitrate for downloads. + parametersBuilder.setForceHighestSupportedBitrate(true); + // Disable all non-audio track types supported by the renderers. + for (RendererCapabilities capabilities : rendererCapabilities) { + @C.TrackType int trackType = capabilities.getTrackType(); + parametersBuilder.setTrackTypeDisabled( + trackType, /* disabled= */ trackType != C.TRACK_TYPE_AUDIO); + } + + // Add a track selection to each period for each of the languages. + int periodCount = getPeriodCount(); + for (String language : languages) { + TrackSelectionParameters parameters = + parametersBuilder.setPreferredAudioLanguage(language).build(); + for (int periodIndex = 0; periodIndex < periodCount; periodIndex++) { + addTrackSelection(periodIndex, parameters); } } } @@ -673,20 +667,26 @@ public final class DownloadHelper { public void addTextLanguagesToSelection( boolean selectUndeterminedTextLanguage, String... languages) { assertPreparedWithMedia(); - for (int periodIndex = 0; periodIndex < mappedTrackInfos.length; periodIndex++) { - DefaultTrackSelector.ParametersBuilder parametersBuilder = - DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon(); - MappedTrackInfo mappedTrackInfo = mappedTrackInfos[periodIndex]; - int rendererCount = mappedTrackInfo.getRendererCount(); - for (int rendererIndex = 0; rendererIndex < rendererCount; rendererIndex++) { - if (mappedTrackInfo.getRendererType(rendererIndex) != C.TRACK_TYPE_TEXT) { - parametersBuilder.setRendererDisabled(rendererIndex, /* disabled= */ true); - } - } - parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage); - for (String language : languages) { - parametersBuilder.setPreferredTextLanguage(language); - addTrackSelection(periodIndex, parametersBuilder.build()); + + TrackSelectionParameters.Builder parametersBuilder = + DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon(); + parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage); + // Prefer highest supported bitrate for downloads. + parametersBuilder.setForceHighestSupportedBitrate(true); + // Disable all non-text track types supported by the renderers. + for (RendererCapabilities capabilities : rendererCapabilities) { + @C.TrackType int trackType = capabilities.getTrackType(); + parametersBuilder.setTrackTypeDisabled( + trackType, /* disabled= */ trackType != C.TRACK_TYPE_TEXT); + } + + // Add a track selection to each period for each of the languages. + int periodCount = getPeriodCount(); + for (String language : languages) { + TrackSelectionParameters parameters = + parametersBuilder.setPreferredTextLanguage(language).build(); + for (int periodIndex = 0; periodIndex < periodCount; periodIndex++) { + addTrackSelection(periodIndex, parameters); } } } diff --git a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java index 70d7a08e72..1c7e843841 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/trackselection/DefaultTrackSelector.java @@ -1516,13 +1516,17 @@ public class DefaultTrackSelector extends MappingTrackSelector { } /** - * @param parameters Initial {@link Parameters}. + * @param parameters Initial {@link TrackSelectionParameters}. * @param trackSelectionFactory A factory for {@link ExoTrackSelection}s. */ public DefaultTrackSelector( - Parameters parameters, ExoTrackSelection.Factory trackSelectionFactory) { + TrackSelectionParameters parameters, ExoTrackSelection.Factory trackSelectionFactory) { this.trackSelectionFactory = trackSelectionFactory; - parametersReference = new AtomicReference<>(parameters); + parametersReference = + new AtomicReference<>( + parameters instanceof Parameters + ? (Parameters) parameters + : Parameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().set(parameters).build()); } @Override