public class DefaultTrackSelector extends MappingTrackSelector
TrackSelector
suitable for most use cases. Track selections are made according
to configurable DefaultTrackSelector.Parameters
, which can be set by calling setParameters(Parameters)
.
DefaultTrackSelector.ParametersBuilder
initialized with the current DefaultTrackSelector.Parameters
. The desired
modifications can be made on the builder, and the resulting DefaultTrackSelector.Parameters
can then be built
and set on the selector. For example the following code modifies the parameters to restrict video
track selections to SD, and to select a German audio track if there is one:
// Build on the current parameters.
Parameters currentParameters = trackSelector.getParameters();
// Build the resulting parameters.
Parameters newParameters = currentParameters
.buildUpon()
.setMaxVideoSizeSd()
.setPreferredAudioLanguage("deu")
.build();
// Set the new parameters.
trackSelector.setParameters(newParameters);
Convenience methods and chaining allow this to be written more concisely as:
trackSelector.setParameters(
trackSelector
.buildUponParameters()
.setMaxVideoSizeSd()
.setPreferredAudioLanguage("deu"));
Selection DefaultTrackSelector.Parameters
support many different options, some of which are described below.
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
TrackGroupArray rendererTrackGroups = mappedTrackInfo == null ? null
: mappedTrackInfo.getTrackGroups(rendererIndex);
If rendererTrackGroups
is null then there aren't any currently mapped tracks, and so
setting an override isn't possible. Note that a Player.EventListener
registered on the
player can be used to determine when the current tracks (and therefore the mapping) changes. If
rendererTrackGroups
is non-null then an override can be set. The next step is to query
the properties of the available tracks to determine the groupIndex
and the trackIndices
within the group it that should be selected. The override can then be specified
using DefaultTrackSelector.ParametersBuilder.setSelectionOverride(int, com.google.android.exoplayer2.source.TrackGroupArray, com.google.android.exoplayer2.trackselection.DefaultTrackSelector.SelectionOverride)
:
SelectionOverride selectionOverride = new SelectionOverride(groupIndex, trackIndices);
trackSelector.setParameters(
trackSelector
.buildUponParameters()
.setSelectionOverride(rendererIndex, rendererTrackGroups, selectionOverride));
trackSelector.setParameters(
trackSelector
.buildUponParameters()
.setMaxVideoSizeSd()
.setPreferredAudioLanguage("deu"));
There are several benefits to using constraint based track selection instead of specific track
overrides:
DefaultTrackSelector.ParametersBuilder.setRendererDisabled(int, boolean)
. Disabling a
renderer differs from setting a null
override because the renderer is disabled
unconditionally, whereas a null
override is applied only when the track groups available
to the renderer match the TrackGroupArray
for which it was specified.
DefaultTrackSelector.ParametersBuilder.setTunnelingAudioSessionId(int)
.Modifier and Type | Class and Description |
---|---|
protected static class |
DefaultTrackSelector.AudioTrackScore
Represents how well an audio track matches the selection
DefaultTrackSelector.Parameters . |
static class |
DefaultTrackSelector.Parameters
Extends
TrackSelectionParameters by adding fields that are specific to DefaultTrackSelector . |
static class |
DefaultTrackSelector.ParametersBuilder
A builder for
DefaultTrackSelector.Parameters . |
static class |
DefaultTrackSelector.SelectionOverride
A track selection override.
|
protected static class |
DefaultTrackSelector.TextTrackScore
Represents how well a text track matches the selection
DefaultTrackSelector.Parameters . |
MappingTrackSelector.MappedTrackInfo
TrackSelector.InvalidationListener
Constructor and Description |
---|
DefaultTrackSelector() |
DefaultTrackSelector(BandwidthMeter bandwidthMeter)
Deprecated.
Use
DefaultTrackSelector() instead. Custom bandwidth meter should be
directly passed to the player in ExoPlayerFactory . |
DefaultTrackSelector(TrackSelection.Factory trackSelectionFactory) |
Modifier and Type | Method and Description |
---|---|
DefaultTrackSelector.ParametersBuilder |
buildUponParameters()
Returns a new
DefaultTrackSelector.ParametersBuilder initialized with the current selection parameters. |
void |
clearSelectionOverride(int rendererIndex,
TrackGroupArray groups)
|
void |
clearSelectionOverrides()
Deprecated.
|
void |
clearSelectionOverrides(int rendererIndex)
Deprecated.
|
void |
experimental_allowMultipleAdaptiveSelections()
Allows the creation of multiple adaptive track selections.
|
protected static int |
getFormatLanguageScore(Format format,
String language,
boolean allowUndeterminedFormatLanguage)
Returns a score for how well a language specified in a
Format matches a given language. |
DefaultTrackSelector.Parameters |
getParameters()
Gets the current selection parameters.
|
boolean |
getRendererDisabled(int rendererIndex)
Deprecated.
|
DefaultTrackSelector.SelectionOverride |
getSelectionOverride(int rendererIndex,
TrackGroupArray groups)
|
boolean |
hasSelectionOverride(int rendererIndex,
TrackGroupArray groups)
Deprecated.
|
protected static boolean |
isSupported(int formatSupport,
boolean allowExceedsCapabilities)
Applies the
RendererCapabilities.FORMAT_SUPPORT_MASK to a value obtained from
RendererCapabilities.supportsFormat(Format) , returning true if the result is
RendererCapabilities.FORMAT_HANDLED or if allowExceedsCapabilities is set
and the result is RendererCapabilities.FORMAT_EXCEEDS_CAPABILITIES . |
protected static String |
normalizeUndeterminedLanguageToNull(String language)
Normalizes the input string to null if it does not define a language, or returns it otherwise.
|
protected TrackSelection.Definition[] |
selectAllTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
int[][][] rendererFormatSupports,
int[] rendererMixedMimeTypeAdaptationSupports,
DefaultTrackSelector.Parameters params)
Called from
MappingTrackSelector.selectTracks(MappedTrackInfo, int[][][], int[]) to make a track selection
for each renderer, prior to overrides and disabled flags being applied. |
protected Pair<TrackSelection.Definition,DefaultTrackSelector.AudioTrackScore> |
selectAudioTrack(TrackGroupArray groups,
int[][] formatSupports,
int mixedMimeTypeAdaptationSupports,
DefaultTrackSelector.Parameters params,
boolean enableAdaptiveTrackSelection)
Called by
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters) to create a
TrackSelection for an audio renderer. |
protected TrackSelection.Definition |
selectOtherTrack(int trackType,
TrackGroupArray groups,
int[][] formatSupport,
DefaultTrackSelector.Parameters params)
Called by
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters) to create a
TrackSelection for a renderer whose type is neither video, audio or text. |
protected Pair<TrackSelection.Definition,DefaultTrackSelector.TextTrackScore> |
selectTextTrack(TrackGroupArray groups,
int[][] formatSupport,
DefaultTrackSelector.Parameters params,
String selectedAudioLanguage)
Called by
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters) to create a
TrackSelection for a text renderer. |
protected Pair<RendererConfiguration[],TrackSelection[]> |
selectTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
int[][][] rendererFormatSupports,
int[] rendererMixedMimeTypeAdaptationSupports)
Given mapped track information, returns a track selection and configuration for each renderer.
|
protected TrackSelection.Definition |
selectVideoTrack(TrackGroupArray groups,
int[][] formatSupports,
int mixedMimeTypeAdaptationSupports,
DefaultTrackSelector.Parameters params,
boolean enableAdaptiveTrackSelection)
Called by
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters) to create a
TrackSelection for a video renderer. |
void |
setParameters(DefaultTrackSelector.Parameters parameters)
Atomically sets the provided parameters for track selection.
|
void |
setParameters(DefaultTrackSelector.ParametersBuilder parametersBuilder)
Atomically sets the provided parameters for track selection.
|
void |
setRendererDisabled(int rendererIndex,
boolean disabled)
|
void |
setSelectionOverride(int rendererIndex,
TrackGroupArray groups,
DefaultTrackSelector.SelectionOverride override)
Deprecated.
|
void |
setTunnelingAudioSessionId(int tunnelingAudioSessionId)
|
getCurrentMappedTrackInfo, onSelectionActivated, selectTracks
getBandwidthMeter, init, invalidate
public DefaultTrackSelector()
@Deprecated public DefaultTrackSelector(BandwidthMeter bandwidthMeter)
DefaultTrackSelector()
instead. Custom bandwidth meter should be
directly passed to the player in ExoPlayerFactory
.public DefaultTrackSelector(TrackSelection.Factory trackSelectionFactory)
trackSelectionFactory
- A factory for TrackSelection
s.public void setParameters(DefaultTrackSelector.Parameters parameters)
parameters
- The parameters for track selection.public void setParameters(DefaultTrackSelector.ParametersBuilder parametersBuilder)
parametersBuilder
- A builder from which to obtain the parameters for track selection.public DefaultTrackSelector.Parameters getParameters()
public DefaultTrackSelector.ParametersBuilder buildUponParameters()
DefaultTrackSelector.ParametersBuilder
initialized with the current selection parameters.@Deprecated public final void setRendererDisabled(int rendererIndex, boolean disabled)
@Deprecated public final boolean getRendererDisabled(int rendererIndex)
DefaultTrackSelector.Parameters.getRendererDisabled(int)
. *@Deprecated public final void setSelectionOverride(int rendererIndex, TrackGroupArray groups, DefaultTrackSelector.SelectionOverride override)
setSelectionOverride(int, TrackGroupArray,
SelectionOverride)
.@Deprecated public final boolean hasSelectionOverride(int rendererIndex, TrackGroupArray groups)
DefaultTrackSelector.Parameters.hasSelectionOverride(int, TrackGroupArray)
. *@Deprecated @Nullable public final DefaultTrackSelector.SelectionOverride getSelectionOverride(int rendererIndex, TrackGroupArray groups)
@Deprecated public final void clearSelectionOverride(int rendererIndex, TrackGroupArray groups)
@Deprecated public final void clearSelectionOverrides(int rendererIndex)
DefaultTrackSelector.ParametersBuilder.clearSelectionOverrides(int)
.@Deprecated public final void clearSelectionOverrides()
DefaultTrackSelector.ParametersBuilder.clearSelectionOverrides()
.@Deprecated public void setTunnelingAudioSessionId(int tunnelingAudioSessionId)
public void experimental_allowMultipleAdaptiveSelections()
This method is experimental, and will be renamed or removed in a future release.
protected final Pair<RendererConfiguration[],TrackSelection[]> selectTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, int[][][] rendererFormatSupports, int[] rendererMixedMimeTypeAdaptationSupports) throws ExoPlaybackException
MappingTrackSelector
selectTracks
in class MappingTrackSelector
mappedTrackInfo
- Mapped track information.rendererFormatSupports
- The result of RendererCapabilities.supportsFormat(com.google.android.exoplayer2.Format)
for
each mapped track, indexed by renderer, track group and track (in that order).rendererMixedMimeTypeAdaptationSupports
- The result of RendererCapabilities.supportsMixedMimeTypeAdaptation()
for each renderer.RendererCapabilities.getTrackType()
is C.TRACK_TYPE_NONE
.ExoPlaybackException
- If an error occurs while selecting the tracks.protected TrackSelection.Definition[] selectAllTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, int[][][] rendererFormatSupports, int[] rendererMixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params) throws ExoPlaybackException
MappingTrackSelector.selectTracks(MappedTrackInfo, int[][][], int[])
to make a track selection
for each renderer, prior to overrides and disabled flags being applied.
The implementation should not account for overrides and disabled flags. Track selections generated by this method will be overridden to account for these properties.
mappedTrackInfo
- Mapped track information.rendererFormatSupports
- The result of RendererCapabilities.supportsFormat(com.google.android.exoplayer2.Format)
for
each mapped track, indexed by renderer, track group and track (in that order).rendererMixedMimeTypeAdaptationSupports
- The result of RendererCapabilities.supportsMixedMimeTypeAdaptation()
for each renderer.TrackSelection.Definition
s for the renderers. A null entry indicates no
selection was made.ExoPlaybackException
- If an error occurs while selecting the tracks.@Nullable protected TrackSelection.Definition selectVideoTrack(TrackGroupArray groups, int[][] formatSupports, int mixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params, boolean enableAdaptiveTrackSelection) throws ExoPlaybackException
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)
to create a
TrackSelection
for a video renderer.groups
- The TrackGroupArray
mapped to the renderer.formatSupports
- The result of RendererCapabilities.supportsFormat(com.google.android.exoplayer2.Format)
for each mapped
track, indexed by track group index and track index (in that order).mixedMimeTypeAdaptationSupports
- The result of RendererCapabilities.supportsMixedMimeTypeAdaptation()
for the renderer.params
- The selector's current constraint parameters.enableAdaptiveTrackSelection
- Whether adaptive track selection is allowed.TrackSelection.Definition
for the renderer, or null if no selection was
made.ExoPlaybackException
- If an error occurs while selecting the tracks.@Nullable protected Pair<TrackSelection.Definition,DefaultTrackSelector.AudioTrackScore> selectAudioTrack(TrackGroupArray groups, int[][] formatSupports, int mixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params, boolean enableAdaptiveTrackSelection) throws ExoPlaybackException
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)
to create a
TrackSelection
for an audio renderer.groups
- The TrackGroupArray
mapped to the renderer.formatSupports
- The result of RendererCapabilities.supportsFormat(com.google.android.exoplayer2.Format)
for each mapped
track, indexed by track group index and track index (in that order).mixedMimeTypeAdaptationSupports
- The result of RendererCapabilities.supportsMixedMimeTypeAdaptation()
for the renderer.params
- The selector's current constraint parameters.enableAdaptiveTrackSelection
- Whether adaptive track selection is allowed.TrackSelection.Definition
and corresponding DefaultTrackSelector.AudioTrackScore
, or
null if no selection was made.ExoPlaybackException
- If an error occurs while selecting the tracks.@Nullable protected Pair<TrackSelection.Definition,DefaultTrackSelector.TextTrackScore> selectTextTrack(TrackGroupArray groups, int[][] formatSupport, DefaultTrackSelector.Parameters params, @Nullable String selectedAudioLanguage) throws ExoPlaybackException
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)
to create a
TrackSelection
for a text renderer.groups
- The TrackGroupArray
mapped to the renderer.formatSupport
- The result of RendererCapabilities.supportsFormat(com.google.android.exoplayer2.Format)
for each mapped
track, indexed by track group index and track index (in that order).params
- The selector's current constraint parameters.selectedAudioLanguage
- The language of the selected audio track. May be null if the
selected text track declares no language or no text track was selected.TrackSelection.Definition
and corresponding DefaultTrackSelector.TextTrackScore
, or null
if no selection was made.ExoPlaybackException
- If an error occurs while selecting the tracks.@Nullable protected TrackSelection.Definition selectOtherTrack(int trackType, TrackGroupArray groups, int[][] formatSupport, DefaultTrackSelector.Parameters params) throws ExoPlaybackException
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)
to create a
TrackSelection
for a renderer whose type is neither video, audio or text.trackType
- The type of the renderer.groups
- The TrackGroupArray
mapped to the renderer.formatSupport
- The result of RendererCapabilities.supportsFormat(com.google.android.exoplayer2.Format)
for each mapped
track, indexed by track group index and track index (in that order).params
- The selector's current constraint parameters.TrackSelection
for the renderer, or null if no selection was made.ExoPlaybackException
- If an error occurs while selecting the tracks.protected static boolean isSupported(int formatSupport, boolean allowExceedsCapabilities)
RendererCapabilities.FORMAT_SUPPORT_MASK
to a value obtained from
RendererCapabilities.supportsFormat(Format)
, returning true if the result is
RendererCapabilities.FORMAT_HANDLED
or if allowExceedsCapabilities
is set
and the result is RendererCapabilities.FORMAT_EXCEEDS_CAPABILITIES
.formatSupport
- A value obtained from RendererCapabilities.supportsFormat(Format)
.allowExceedsCapabilities
- Whether to return true if the format support component of the
value is RendererCapabilities.FORMAT_EXCEEDS_CAPABILITIES
.RendererCapabilities.FORMAT_HANDLED
, or
if allowExceedsCapabilities
is set and the format support component is
RendererCapabilities.FORMAT_EXCEEDS_CAPABILITIES
.@Nullable protected static String normalizeUndeterminedLanguageToNull(@Nullable String language)
language
- The string.protected static int getFormatLanguageScore(Format format, @Nullable String language, boolean allowUndeterminedFormatLanguage)
Format
matches a given language.format
- The Format
.language
- The language, or null.allowUndeterminedFormatLanguage
- Whether matches with an empty or undetermined format
language tag are allowed.