DownloadHelper: Accept generic TrackSelectionParameters
DownloadHelper is in the ExoPlayer module, so there's no reason why it can't use ExoPlayer specific track selections. That said, we want our UI components to operate on generic TrackSelectionParameters, and we want such UI components to be useful for selecting tracks for download. To keep this interop, it's necessary to have DownloadHelper accept generic TrackSelectionParameters, or to require application code to convert them. The first approach seems preferable! PiperOrigin-RevId: 432158846
This commit is contained in:
parent
733cd609a0
commit
2cb2f6ded4
@ -31,6 +31,11 @@
|
|||||||
instead. You can also continue to use `ExoPlayer.getCurrentTrackGroups`
|
instead. You can also continue to use `ExoPlayer.getCurrentTrackGroups`
|
||||||
and `ExoPlayer.getCurrentTrackSelections`, although these methods remain
|
and `ExoPlayer.getCurrentTrackSelections`, although these methods remain
|
||||||
deprecated.
|
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)
|
### 2.17.0 (2022-02-24)
|
||||||
|
|
||||||
|
@ -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.source.chunk.MediaChunkIterator;
|
||||||
import com.google.android.exoplayer2.trackselection.BaseTrackSelection;
|
import com.google.android.exoplayer2.trackselection.BaseTrackSelection;
|
||||||
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
|
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.DefaultTrackSelector.SelectionOverride;
|
||||||
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
|
import com.google.android.exoplayer2.trackselection.ExoTrackSelection;
|
||||||
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
|
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.trackselection.TrackSelectorResult;
|
||||||
import com.google.android.exoplayer2.upstream.Allocator;
|
import com.google.android.exoplayer2.upstream.Allocator;
|
||||||
import com.google.android.exoplayer2.upstream.BandwidthMeter;
|
import com.google.android.exoplayer2.upstream.BandwidthMeter;
|
||||||
@ -83,8 +83,8 @@ import org.checkerframework.checker.nullness.qual.RequiresNonNull;
|
|||||||
* <li>Prepare the helper using {@link #prepare(Callback)} and wait for the callback.
|
* <li>Prepare the helper using {@link #prepare(Callback)} and wait for the callback.
|
||||||
* <li>Optional: Inspect the selected tracks using {@link #getMappedTrackInfo(int)} and {@link
|
* <li>Optional: Inspect the selected tracks using {@link #getMappedTrackInfo(int)} and {@link
|
||||||
* #getTrackSelections(int, int)}, and make adjustments using {@link
|
* #getTrackSelections(int, int)}, and make adjustments using {@link
|
||||||
* #clearTrackSelections(int)}, {@link #replaceTrackSelections(int, Parameters)} and {@link
|
* #clearTrackSelections(int)}, {@link #replaceTrackSelections(int, TrackSelectionParameters)}
|
||||||
* #addTrackSelection(int, Parameters)}.
|
* and {@link #addTrackSelection(int, TrackSelectionParameters)}.
|
||||||
* <li>Create a download request for the selected track using {@link #getDownloadRequest(byte[])}.
|
* <li>Create a download request for the selected track using {@link #getDownloadRequest(byte[])}.
|
||||||
* <li>Release the helper using {@link #release()}.
|
* <li>Release the helper using {@link #release()}.
|
||||||
* </ol>
|
* </ol>
|
||||||
@ -97,30 +97,18 @@ public final class DownloadHelper {
|
|||||||
*
|
*
|
||||||
* <p>If possible, use {@link #getDefaultTrackSelectorParameters(Context)} instead.
|
* <p>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 =
|
public static final DefaultTrackSelector.Parameters
|
||||||
Parameters.DEFAULT_WITHOUT_CONTEXT.buildUpon().setForceHighestSupportedBitrate(true).build();
|
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT =
|
||||||
|
DefaultTrackSelector.Parameters.DEFAULT_WITHOUT_CONTEXT
|
||||||
/**
|
.buildUpon()
|
||||||
* @deprecated This instance does not have {@link Context} constraints. Use {@link
|
.setForceHighestSupportedBitrate(true)
|
||||||
* #getDefaultTrackSelectorParameters(Context)} instead.
|
.build();
|
||||||
*/
|
|
||||||
@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;
|
|
||||||
|
|
||||||
/** Returns the default parameters used for track selection for downloading. */
|
/** Returns the default parameters used for track selection for downloading. */
|
||||||
public static DefaultTrackSelector.Parameters getDefaultTrackSelectorParameters(Context context) {
|
public static DefaultTrackSelector.Parameters getDefaultTrackSelectorParameters(Context context) {
|
||||||
return Parameters.getDefaults(context)
|
return DefaultTrackSelector.Parameters.getDefaults(context)
|
||||||
.buildUpon()
|
.buildUpon()
|
||||||
.setForceHighestSupportedBitrate(true)
|
.setForceHighestSupportedBitrate(true)
|
||||||
.build();
|
.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.
|
* DataSource.Factory)} instead.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@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.
|
* DataSource.Factory, DrmSessionManager)} instead.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@ -216,17 +204,17 @@ public final class DownloadHelper {
|
|||||||
DataSource.Factory dataSourceFactory,
|
DataSource.Factory dataSourceFactory,
|
||||||
RenderersFactory renderersFactory,
|
RenderersFactory renderersFactory,
|
||||||
@Nullable DrmSessionManager drmSessionManager,
|
@Nullable DrmSessionManager drmSessionManager,
|
||||||
DefaultTrackSelector.Parameters trackSelectorParameters) {
|
TrackSelectionParameters trackSelectionParameters) {
|
||||||
return forMediaItem(
|
return forMediaItem(
|
||||||
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_MPD).build(),
|
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_MPD).build(),
|
||||||
trackSelectorParameters,
|
trackSelectionParameters,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
dataSourceFactory,
|
dataSourceFactory,
|
||||||
drmSessionManager);
|
drmSessionManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
|
* @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory,
|
||||||
* DataSource.Factory)} instead.
|
* DataSource.Factory)} instead.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@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.
|
* DataSource.Factory, DrmSessionManager)} instead.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@ -254,17 +242,17 @@ public final class DownloadHelper {
|
|||||||
DataSource.Factory dataSourceFactory,
|
DataSource.Factory dataSourceFactory,
|
||||||
RenderersFactory renderersFactory,
|
RenderersFactory renderersFactory,
|
||||||
@Nullable DrmSessionManager drmSessionManager,
|
@Nullable DrmSessionManager drmSessionManager,
|
||||||
DefaultTrackSelector.Parameters trackSelectorParameters) {
|
TrackSelectionParameters trackSelectionParameters) {
|
||||||
return forMediaItem(
|
return forMediaItem(
|
||||||
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_M3U8).build(),
|
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_M3U8).build(),
|
||||||
trackSelectorParameters,
|
trackSelectionParameters,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
dataSourceFactory,
|
dataSourceFactory,
|
||||||
drmSessionManager);
|
drmSessionManager);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @deprecated Use {@link #forMediaItem(MediaItem, Parameters, RenderersFactory,
|
* @deprecated Use {@link #forMediaItem(MediaItem, TrackSelectionParameters, RenderersFactory,
|
||||||
* DataSource.Factory)} instead.
|
* DataSource.Factory)} instead.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@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.
|
* DataSource.Factory)} instead.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("deprecation")
|
@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.
|
* DataSource.Factory, DrmSessionManager)} instead.
|
||||||
*/
|
*/
|
||||||
@Deprecated
|
@Deprecated
|
||||||
@ -308,10 +296,10 @@ public final class DownloadHelper {
|
|||||||
DataSource.Factory dataSourceFactory,
|
DataSource.Factory dataSourceFactory,
|
||||||
RenderersFactory renderersFactory,
|
RenderersFactory renderersFactory,
|
||||||
@Nullable DrmSessionManager drmSessionManager,
|
@Nullable DrmSessionManager drmSessionManager,
|
||||||
DefaultTrackSelector.Parameters trackSelectorParameters) {
|
TrackSelectionParameters trackSelectionParameters) {
|
||||||
return forMediaItem(
|
return forMediaItem(
|
||||||
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_SS).build(),
|
new MediaItem.Builder().setUri(uri).setMimeType(MimeTypes.APPLICATION_SS).build(),
|
||||||
trackSelectorParameters,
|
trackSelectionParameters,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
dataSourceFactory,
|
dataSourceFactory,
|
||||||
drmSessionManager);
|
drmSessionManager);
|
||||||
@ -369,7 +357,7 @@ public final class DownloadHelper {
|
|||||||
* @param mediaItem A {@link MediaItem}.
|
* @param mediaItem A {@link MediaItem}.
|
||||||
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
|
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
|
||||||
* selected.
|
* selected.
|
||||||
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
|
* @param trackSelectionParameters {@link TrackSelectionParameters} for selecting tracks for
|
||||||
* downloading.
|
* downloading.
|
||||||
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest for adaptive
|
* @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
|
* streams. This argument is required for adaptive streams and ignored for progressive
|
||||||
@ -381,12 +369,12 @@ public final class DownloadHelper {
|
|||||||
*/
|
*/
|
||||||
public static DownloadHelper forMediaItem(
|
public static DownloadHelper forMediaItem(
|
||||||
MediaItem mediaItem,
|
MediaItem mediaItem,
|
||||||
DefaultTrackSelector.Parameters trackSelectorParameters,
|
TrackSelectionParameters trackSelectionParameters,
|
||||||
@Nullable RenderersFactory renderersFactory,
|
@Nullable RenderersFactory renderersFactory,
|
||||||
@Nullable DataSource.Factory dataSourceFactory) {
|
@Nullable DataSource.Factory dataSourceFactory) {
|
||||||
return forMediaItem(
|
return forMediaItem(
|
||||||
mediaItem,
|
mediaItem,
|
||||||
trackSelectorParameters,
|
trackSelectionParameters,
|
||||||
renderersFactory,
|
renderersFactory,
|
||||||
dataSourceFactory,
|
dataSourceFactory,
|
||||||
/* drmSessionManager= */ null);
|
/* drmSessionManager= */ null);
|
||||||
@ -398,7 +386,7 @@ public final class DownloadHelper {
|
|||||||
* @param mediaItem A {@link MediaItem}.
|
* @param mediaItem A {@link MediaItem}.
|
||||||
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
|
* @param renderersFactory A {@link RenderersFactory} creating the renderers for which tracks are
|
||||||
* selected.
|
* selected.
|
||||||
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
|
* @param trackSelectionParameters {@link TrackSelectionParameters} for selecting tracks for
|
||||||
* downloading.
|
* downloading.
|
||||||
* @param dataSourceFactory A {@link DataSource.Factory} used to load the manifest for adaptive
|
* @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
|
* streams. This argument is required for adaptive streams and ignored for progressive
|
||||||
@ -412,7 +400,7 @@ public final class DownloadHelper {
|
|||||||
*/
|
*/
|
||||||
public static DownloadHelper forMediaItem(
|
public static DownloadHelper forMediaItem(
|
||||||
MediaItem mediaItem,
|
MediaItem mediaItem,
|
||||||
DefaultTrackSelector.Parameters trackSelectorParameters,
|
TrackSelectionParameters trackSelectionParameters,
|
||||||
@Nullable RenderersFactory renderersFactory,
|
@Nullable RenderersFactory renderersFactory,
|
||||||
@Nullable DataSource.Factory dataSourceFactory,
|
@Nullable DataSource.Factory dataSourceFactory,
|
||||||
@Nullable DrmSessionManager drmSessionManager) {
|
@Nullable DrmSessionManager drmSessionManager) {
|
||||||
@ -424,7 +412,7 @@ public final class DownloadHelper {
|
|||||||
? null
|
? null
|
||||||
: createMediaSourceInternal(
|
: createMediaSourceInternal(
|
||||||
mediaItem, castNonNull(dataSourceFactory), drmSessionManager),
|
mediaItem, castNonNull(dataSourceFactory), drmSessionManager),
|
||||||
trackSelectorParameters,
|
trackSelectionParameters,
|
||||||
renderersFactory != null
|
renderersFactory != null
|
||||||
? getRendererCapabilities(renderersFactory)
|
? getRendererCapabilities(renderersFactory)
|
||||||
: new RendererCapabilities[0]);
|
: new RendererCapabilities[0]);
|
||||||
@ -480,7 +468,7 @@ public final class DownloadHelper {
|
|||||||
* @param mediaItem The media item.
|
* @param mediaItem The media item.
|
||||||
* @param mediaSource A {@link MediaSource} for which tracks are selected, or null if no track
|
* @param mediaSource A {@link MediaSource} for which tracks are selected, or null if no track
|
||||||
* selection needs to be made.
|
* selection needs to be made.
|
||||||
* @param trackSelectorParameters {@link DefaultTrackSelector.Parameters} for selecting tracks for
|
* @param trackSelectionParameters {@link TrackSelectionParameters} for selecting tracks for
|
||||||
* downloading.
|
* downloading.
|
||||||
* @param rendererCapabilities The {@link RendererCapabilities} of the renderers for which tracks
|
* @param rendererCapabilities The {@link RendererCapabilities} of the renderers for which tracks
|
||||||
* are selected.
|
* are selected.
|
||||||
@ -488,12 +476,12 @@ public final class DownloadHelper {
|
|||||||
public DownloadHelper(
|
public DownloadHelper(
|
||||||
MediaItem mediaItem,
|
MediaItem mediaItem,
|
||||||
@Nullable MediaSource mediaSource,
|
@Nullable MediaSource mediaSource,
|
||||||
DefaultTrackSelector.Parameters trackSelectorParameters,
|
TrackSelectionParameters trackSelectionParameters,
|
||||||
RendererCapabilities[] rendererCapabilities) {
|
RendererCapabilities[] rendererCapabilities) {
|
||||||
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
|
this.localConfiguration = checkNotNull(mediaItem.localConfiguration);
|
||||||
this.mediaSource = mediaSource;
|
this.mediaSource = mediaSource;
|
||||||
this.trackSelector =
|
this.trackSelector =
|
||||||
new DefaultTrackSelector(trackSelectorParameters, new DownloadTrackSelection.Factory());
|
new DefaultTrackSelector(trackSelectionParameters, new DownloadTrackSelection.Factory());
|
||||||
this.rendererCapabilities = rendererCapabilities;
|
this.rendererCapabilities = rendererCapabilities;
|
||||||
this.scratchSet = new SparseIntArray();
|
this.scratchSet = new SparseIntArray();
|
||||||
trackSelector.init(/* listener= */ () -> {}, new FakeBandwidthMeter());
|
trackSelector.init(/* listener= */ () -> {}, new FakeBandwidthMeter());
|
||||||
@ -609,13 +597,13 @@ public final class DownloadHelper {
|
|||||||
* completes.
|
* completes.
|
||||||
*
|
*
|
||||||
* @param periodIndex The period index for which the track selection is replaced.
|
* @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.
|
* selection of tracks.
|
||||||
*/
|
*/
|
||||||
public void replaceTrackSelections(
|
public void replaceTrackSelections(
|
||||||
int periodIndex, DefaultTrackSelector.Parameters trackSelectorParameters) {
|
int periodIndex, TrackSelectionParameters trackSelectionParameters) {
|
||||||
clearTrackSelections(periodIndex);
|
clearTrackSelections(periodIndex);
|
||||||
addTrackSelection(periodIndex, trackSelectorParameters);
|
addTrackSelection(periodIndex, trackSelectionParameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -623,13 +611,13 @@ public final class DownloadHelper {
|
|||||||
* completes.
|
* completes.
|
||||||
*
|
*
|
||||||
* @param periodIndex The period index this track selection is added for.
|
* @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.
|
* selection of tracks.
|
||||||
*/
|
*/
|
||||||
public void addTrackSelection(
|
public void addTrackSelection(
|
||||||
int periodIndex, DefaultTrackSelector.Parameters trackSelectorParameters) {
|
int periodIndex, TrackSelectionParameters trackSelectionParameters) {
|
||||||
assertPreparedWithMedia();
|
assertPreparedWithMedia();
|
||||||
trackSelector.setParameters(trackSelectorParameters);
|
trackSelector.setParameters(trackSelectionParameters);
|
||||||
runTrackSelection(periodIndex);
|
runTrackSelection(periodIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -643,19 +631,25 @@ public final class DownloadHelper {
|
|||||||
*/
|
*/
|
||||||
public void addAudioLanguagesToSelection(String... languages) {
|
public void addAudioLanguagesToSelection(String... languages) {
|
||||||
assertPreparedWithMedia();
|
assertPreparedWithMedia();
|
||||||
for (int periodIndex = 0; periodIndex < mappedTrackInfos.length; periodIndex++) {
|
|
||||||
DefaultTrackSelector.ParametersBuilder parametersBuilder =
|
TrackSelectionParameters.Builder parametersBuilder =
|
||||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
||||||
MappedTrackInfo mappedTrackInfo = mappedTrackInfos[periodIndex];
|
// Prefer highest supported bitrate for downloads.
|
||||||
int rendererCount = mappedTrackInfo.getRendererCount();
|
parametersBuilder.setForceHighestSupportedBitrate(true);
|
||||||
for (int rendererIndex = 0; rendererIndex < rendererCount; rendererIndex++) {
|
// Disable all non-audio track types supported by the renderers.
|
||||||
if (mappedTrackInfo.getRendererType(rendererIndex) != C.TRACK_TYPE_AUDIO) {
|
for (RendererCapabilities capabilities : rendererCapabilities) {
|
||||||
parametersBuilder.setRendererDisabled(rendererIndex, /* disabled= */ true);
|
@C.TrackType int trackType = capabilities.getTrackType();
|
||||||
}
|
parametersBuilder.setTrackTypeDisabled(
|
||||||
}
|
trackType, /* disabled= */ trackType != C.TRACK_TYPE_AUDIO);
|
||||||
for (String language : languages) {
|
}
|
||||||
parametersBuilder.setPreferredAudioLanguage(language);
|
|
||||||
addTrackSelection(periodIndex, parametersBuilder.build());
|
// 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(
|
public void addTextLanguagesToSelection(
|
||||||
boolean selectUndeterminedTextLanguage, String... languages) {
|
boolean selectUndeterminedTextLanguage, String... languages) {
|
||||||
assertPreparedWithMedia();
|
assertPreparedWithMedia();
|
||||||
for (int periodIndex = 0; periodIndex < mappedTrackInfos.length; periodIndex++) {
|
|
||||||
DefaultTrackSelector.ParametersBuilder parametersBuilder =
|
TrackSelectionParameters.Builder parametersBuilder =
|
||||||
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT.buildUpon();
|
||||||
MappedTrackInfo mappedTrackInfo = mappedTrackInfos[periodIndex];
|
parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
|
||||||
int rendererCount = mappedTrackInfo.getRendererCount();
|
// Prefer highest supported bitrate for downloads.
|
||||||
for (int rendererIndex = 0; rendererIndex < rendererCount; rendererIndex++) {
|
parametersBuilder.setForceHighestSupportedBitrate(true);
|
||||||
if (mappedTrackInfo.getRendererType(rendererIndex) != C.TRACK_TYPE_TEXT) {
|
// Disable all non-text track types supported by the renderers.
|
||||||
parametersBuilder.setRendererDisabled(rendererIndex, /* disabled= */ true);
|
for (RendererCapabilities capabilities : rendererCapabilities) {
|
||||||
}
|
@C.TrackType int trackType = capabilities.getTrackType();
|
||||||
}
|
parametersBuilder.setTrackTypeDisabled(
|
||||||
parametersBuilder.setSelectUndeterminedTextLanguage(selectUndeterminedTextLanguage);
|
trackType, /* disabled= */ trackType != C.TRACK_TYPE_TEXT);
|
||||||
for (String language : languages) {
|
}
|
||||||
parametersBuilder.setPreferredTextLanguage(language);
|
|
||||||
addTrackSelection(periodIndex, parametersBuilder.build());
|
// 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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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.
|
* @param trackSelectionFactory A factory for {@link ExoTrackSelection}s.
|
||||||
*/
|
*/
|
||||||
public DefaultTrackSelector(
|
public DefaultTrackSelector(
|
||||||
Parameters parameters, ExoTrackSelection.Factory trackSelectionFactory) {
|
TrackSelectionParameters parameters, ExoTrackSelection.Factory trackSelectionFactory) {
|
||||||
this.trackSelectionFactory = 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
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user