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 prefer German audio tracks:
// 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));
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.
trackSelector.setParameters(
trackSelector
.buildUponParameters()
.setMaxVideoSizeSd()
.setPreferredAudioLanguage("deu"));
There are several benefits to using constraint based track selection instead of specific track
overrides:
DefaultTrackSelector.ParametersBuilder.setTunnelingAudioSessionId(int).| Modifier and Type | Class and Description |
|---|---|
static class |
DefaultTrackSelector.Parameters
Constraint parameters for
DefaultTrackSelector. |
static class |
DefaultTrackSelector.ParametersBuilder
A builder for
DefaultTrackSelector.Parameters. |
static class |
DefaultTrackSelector.SelectionOverride
A track selection override.
|
MappingTrackSelector.MappedTrackInfoTrackSelector.InvalidationListener| Constructor and Description |
|---|
DefaultTrackSelector()
Constructs an instance that does not support adaptive track selection.
|
DefaultTrackSelector(BandwidthMeter bandwidthMeter)
Constructs an instance that supports adaptive track selection.
|
DefaultTrackSelector(TrackSelection.Factory adaptiveTrackSelectionFactory)
Constructs an instance that uses a factory to create adaptive track selections.
|
| 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.
|
protected static boolean |
formatHasLanguage(Format format,
java.lang.String language)
|
protected static boolean |
formatHasNoLanguage(Format format)
Returns whether a
Format does not define a 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 TrackSelection[] |
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 TrackSelection |
selectAudioTrack(TrackGroupArray groups,
int[][] formatSupports,
int mixedMimeTypeAdaptationSupports,
DefaultTrackSelector.Parameters params,
TrackSelection.Factory adaptiveTrackSelectionFactory)
Called by
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters) to create a
TrackSelection for an audio renderer. |
protected TrackSelection |
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 TrackSelection |
selectTextTrack(TrackGroupArray groups,
int[][] formatSupport,
DefaultTrackSelector.Parameters params)
Called by
#selectAllTracks(MappedTrackInfo, int[][][], int[], Parameters) to create a
TrackSelection for a text renderer. |
protected android.util.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 |
selectVideoTrack(TrackGroupArray groups,
int[][] formatSupports,
int mixedMimeTypeAdaptationSupports,
DefaultTrackSelector.Parameters params,
TrackSelection.Factory adaptiveTrackSelectionFactory)
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, selectTracksinit, invalidatepublic DefaultTrackSelector()
public DefaultTrackSelector(BandwidthMeter bandwidthMeter)
BandwidthMeter to determine which individual track should be used during
playback.bandwidthMeter - The BandwidthMeter.public DefaultTrackSelector(@Nullable
TrackSelection.Factory adaptiveTrackSelectionFactory)
adaptiveTrackSelectionFactory - A factory for adaptive TrackSelections, or null if
the selector should not support adaptive tracks.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)
protected final android.util.Pair<RendererConfiguration[],TrackSelection[]> selectTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, int[][][] rendererFormatSupports, int[] rendererMixedMimeTypeAdaptationSupports) throws ExoPlaybackException
MappingTrackSelectorselectTracks in class MappingTrackSelectormappedTrackInfo - 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[] 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.C.TRACK_TYPE_NONE.ExoPlaybackException - If an error occurs while selecting the tracks.@Nullable protected TrackSelection selectVideoTrack(TrackGroupArray groups, int[][] formatSupports, int mixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params, @Nullable TrackSelection.Factory adaptiveTrackSelectionFactory) 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.adaptiveTrackSelectionFactory - A factory for generating adaptive track selections, or
null if a fixed track selection is required.TrackSelection for the renderer, or null if no selection was made.ExoPlaybackException - If an error occurs while selecting the tracks.@Nullable protected TrackSelection selectAudioTrack(TrackGroupArray groups, int[][] formatSupports, int mixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params, @Nullable TrackSelection.Factory adaptiveTrackSelectionFactory) 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.adaptiveTrackSelectionFactory - A factory for generating adaptive track selections, or
null if a fixed track selection is required.TrackSelection for the renderer, or null if no selection was made.ExoPlaybackException - If an error occurs while selecting the tracks.@Nullable protected TrackSelection selectTextTrack(TrackGroupArray groups, int[][] formatSupport, DefaultTrackSelector.Parameters params) 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.TrackSelection for the renderer, or null if no selection was made.ExoPlaybackException - If an error occurs while selecting the tracks.@Nullable protected TrackSelection 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.protected static boolean formatHasNoLanguage(Format format)
Format does not define a language.