Class DefaultTrackSelector
- java.lang.Object
-
- com.google.android.exoplayer2.trackselection.TrackSelector
-
- com.google.android.exoplayer2.trackselection.MappingTrackSelector
-
- com.google.android.exoplayer2.trackselection.DefaultTrackSelector
-
- Direct Known Subclasses:
FakeTrackSelector
public class DefaultTrackSelector extends MappingTrackSelector
A defaultTrackSelectorsuitable for most use cases.Modifying parameters
Track selection parameters should be modified by obtaining aTrackSelectionParameters.Builderinitialized with the currentTrackSelectionParametersfrom the player. The desired modifications can be made on the builder, and the resultingTrackSelectionParameterscan then be built and set on the player:
Some specialized parameters are only available in the extendedplayer.setTrackSelectionParameters( player.getTrackSelectionParameters() .buildUpon() .setMaxVideoSizeSd() .setPreferredAudioLanguage("de") .build());DefaultTrackSelector.Parametersclass, which can be retrieved and modified in a similar way in this track selector:defaultTrackSelector.setParameters( defaultTrackSelector.getParameters() .buildUpon() .setTunnelingEnabled(true) .build());
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classDefaultTrackSelector.ParametersExtendsDefaultTrackSelector.Parametersby adding fields that are specific toDefaultTrackSelector.static classDefaultTrackSelector.ParametersBuilderA builder forDefaultTrackSelector.Parameters.protected static interfaceDefaultTrackSelector.SelectionEligibilityThe extent to which tracks are eligible for selection.static classDefaultTrackSelector.SelectionOverrideA track selection override.-
Nested classes/interfaces inherited from class com.google.android.exoplayer2.trackselection.MappingTrackSelector
MappingTrackSelector.MappedTrackInfo
-
Nested classes/interfaces inherited from class com.google.android.exoplayer2.trackselection.TrackSelector
TrackSelector.InvalidationListener
-
-
Field Summary
Fields Modifier and Type Field Description protected static intSELECTION_ELIGIBILITY_ADAPTIVETrack is eligible for both a fixed selection and as part of an adaptive selection with multiple tracks.protected static intSELECTION_ELIGIBILITY_FIXEDTrack is eligible for a fixed selection with one track.protected static intSELECTION_ELIGIBILITY_NOTrack is not eligible for selection.
-
Constructor Summary
Constructors Constructor Description DefaultTrackSelector()Deprecated.UseDefaultTrackSelector(Context)instead.DefaultTrackSelector(Context context)DefaultTrackSelector(Context context, ExoTrackSelection.Factory trackSelectionFactory)DefaultTrackSelector(DefaultTrackSelector.Parameters parameters, ExoTrackSelection.Factory trackSelectionFactory)DefaultTrackSelector(ExoTrackSelection.Factory trackSelectionFactory)Deprecated.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description DefaultTrackSelector.ParametersBuilderbuildUponParameters()Returns a newDefaultTrackSelector.ParametersBuilderinitialized with the current selection parameters.protected static intgetFormatLanguageScore(Format format, String language, boolean allowUndeterminedFormatLanguage)Returns a score for how well a language specified in aFormatmatches a given language.DefaultTrackSelector.ParametersgetParameters()Returns the current parameters for track selection.booleanisSetParametersSupported()Returns if thisTrackSelectorsupportsTrackSelector.setParameters(TrackSelectionParameters).protected static booleanisSupported(@com.google.android.exoplayer2.RendererCapabilities.Capabilities int formatSupport, boolean allowExceedsCapabilities)Returns true if theC.FormatSupportin the givenRendererCapabilities.CapabilitiesisC.FORMAT_HANDLEDor ifallowExceedsCapabilitiesis set and the format support isC.FORMAT_EXCEEDS_CAPABILITIES.protected static StringnormalizeUndeterminedLanguageToNull(String language)Normalizes the input string to null if it does not define a language, or returns it otherwise.protected @NullableType ExoTrackSelection.Definition[]selectAllTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params)Called fromselectTracks(MappedTrackInfo, int[][][], int[], MediaPeriodId, Timeline)to make a track selection for each renderer, prior to overrides and disabled flags being applied.protected Pair<ExoTrackSelection.Definition,Integer>selectAudioTrack(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params)Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelection.Definitionfor an audio track selection.protected ExoTrackSelection.DefinitionselectOtherTrack(int trackType, TrackGroupArray groups, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][] formatSupport, DefaultTrackSelector.Parameters params)Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelectionfor a renderer whose type is neither video, audio or text.protected Pair<ExoTrackSelection.Definition,Integer>selectTextTrack(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, DefaultTrackSelector.Parameters params, String selectedAudioLanguage)Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelection.Definitionfor a text track selection.protected Pair<@NullableType RendererConfiguration[],@NullableType ExoTrackSelection[]>selectTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, MediaSource.MediaPeriodId mediaPeriodId, Timeline timeline)Given mapped track information, returns a track selection and configuration for each renderer.protected Pair<ExoTrackSelection.Definition,Integer>selectVideoTrack(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] mixedMimeTypeSupports, DefaultTrackSelector.Parameters params)Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelection.Definitionfor a video track selection.voidsetParameters(DefaultTrackSelector.ParametersBuilder parametersBuilder)Atomically sets the provided parameters for track selection.voidsetParameters(TrackSelectionParameters parameters)Called by the player to provide parameters for track selection.-
Methods inherited from class com.google.android.exoplayer2.trackselection.MappingTrackSelector
getCurrentMappedTrackInfo, onSelectionActivated, selectTracks
-
Methods inherited from class com.google.android.exoplayer2.trackselection.TrackSelector
getBandwidthMeter, init, invalidate
-
-
-
-
Field Detail
-
SELECTION_ELIGIBILITY_NO
protected static final int SELECTION_ELIGIBILITY_NO
Track is not eligible for selection.- See Also:
- Constant Field Values
-
SELECTION_ELIGIBILITY_FIXED
protected static final int SELECTION_ELIGIBILITY_FIXED
Track is eligible for a fixed selection with one track.- See Also:
- Constant Field Values
-
SELECTION_ELIGIBILITY_ADAPTIVE
protected static final int SELECTION_ELIGIBILITY_ADAPTIVE
Track is eligible for both a fixed selection and as part of an adaptive selection with multiple tracks.- See Also:
- Constant Field Values
-
-
Constructor Detail
-
DefaultTrackSelector
@Deprecated public DefaultTrackSelector()
Deprecated.UseDefaultTrackSelector(Context)instead.
-
DefaultTrackSelector
@Deprecated public DefaultTrackSelector(ExoTrackSelection.Factory trackSelectionFactory)
Deprecated.
-
DefaultTrackSelector
public DefaultTrackSelector(Context context)
- Parameters:
context- AnyContext.
-
DefaultTrackSelector
public DefaultTrackSelector(Context context, ExoTrackSelection.Factory trackSelectionFactory)
- Parameters:
context- AnyContext.trackSelectionFactory- A factory forExoTrackSelections.
-
DefaultTrackSelector
public DefaultTrackSelector(DefaultTrackSelector.Parameters parameters, ExoTrackSelection.Factory trackSelectionFactory)
- Parameters:
parameters- InitialDefaultTrackSelector.Parameters.trackSelectionFactory- A factory forExoTrackSelections.
-
-
Method Detail
-
getParameters
public DefaultTrackSelector.Parameters getParameters()
Description copied from class:TrackSelectorReturns the current parameters for track selection.- Overrides:
getParametersin classTrackSelector
-
isSetParametersSupported
public boolean isSetParametersSupported()
Description copied from class:TrackSelectorReturns if thisTrackSelectorsupportsTrackSelector.setParameters(TrackSelectionParameters).The same value is always returned for a given
TrackSelectorinstance.- Overrides:
isSetParametersSupportedin classTrackSelector
-
setParameters
public void setParameters(TrackSelectionParameters parameters)
Description copied from class:TrackSelectorCalled by the player to provide parameters for track selection.Only supported if
TrackSelector.isSetParametersSupported()returns true.- Overrides:
setParametersin classTrackSelector- Parameters:
parameters- The parameters for track selection.
-
setParameters
public void setParameters(DefaultTrackSelector.ParametersBuilder parametersBuilder)
Atomically sets the provided parameters for track selection.- Parameters:
parametersBuilder- A builder from which to obtain the parameters for track selection.
-
buildUponParameters
public DefaultTrackSelector.ParametersBuilder buildUponParameters()
Returns a newDefaultTrackSelector.ParametersBuilderinitialized with the current selection parameters.
-
selectTracks
protected final Pair<@NullableType RendererConfiguration[],@NullableType ExoTrackSelection[]> selectTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, MediaSource.MediaPeriodId mediaPeriodId, Timeline timeline) throws ExoPlaybackException
Description copied from class:MappingTrackSelectorGiven mapped track information, returns a track selection and configuration for each renderer.- Specified by:
selectTracksin classMappingTrackSelector- Parameters:
mappedTrackInfo- Mapped track information.rendererFormatSupports- TheRendererCapabilities.Capabilitiesfor ach mapped track, indexed by renderer, track group and track (in that order).rendererMixedMimeTypeAdaptationSupports- TheRendererCapabilities.AdaptiveSupportfor mixed MIME type adaptation for the renderer.mediaPeriodId- TheMediaSource.MediaPeriodIdof the period for which tracks are to be selected.timeline- TheTimelineholding the period for which tracks are to be selected.- Returns:
- A pair consisting of the track selections and configurations for each renderer. A null
configuration indicates the renderer should be disabled, in which case the track selection
will also be null. A track selection may also be null for a non-disabled renderer if
RendererCapabilities.getTrackType()isC.TRACK_TYPE_NONE. - Throws:
ExoPlaybackException- If an error occurs while selecting the tracks.
-
selectAllTracks
protected @NullableType ExoTrackSelection.Definition[] selectAllTracks(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params) throws ExoPlaybackException
Called fromselectTracks(MappedTrackInfo, int[][][], int[], MediaPeriodId, Timeline)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.
- Parameters:
mappedTrackInfo- Mapped track information.rendererFormatSupports- TheRendererCapabilities.Capabilitiesfor each mapped track, indexed by renderer, track group and track (in that order).rendererMixedMimeTypeAdaptationSupports- TheRendererCapabilities.AdaptiveSupportfor mixed MIME type adaptation for the renderer.- Returns:
- The
ExoTrackSelection.Definitions for the renderers. A null entry indicates no selection was made. - Throws:
ExoPlaybackException- If an error occurs while selecting the tracks.
-
selectVideoTrack
@Nullable protected Pair<ExoTrackSelection.Definition,Integer> selectVideoTrack(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] mixedMimeTypeSupports, DefaultTrackSelector.Parameters params) throws ExoPlaybackException
Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelection.Definitionfor a video track selection.- Parameters:
mappedTrackInfo- Mapped track information.rendererFormatSupports- TheRendererCapabilities.Capabilitiesfor each mapped track, indexed by renderer, track group and track (in that order).mixedMimeTypeSupports- TheRendererCapabilities.AdaptiveSupportfor mixed MIME type adaptation for the renderer.params- The selector's current constraint parameters.- Returns:
- A pair of the selected
ExoTrackSelection.Definitionand the corresponding renderer index, or null if no selection was made. - Throws:
ExoPlaybackException- If an error occurs while selecting the tracks.
-
selectAudioTrack
@Nullable protected Pair<ExoTrackSelection.Definition,Integer> selectAudioTrack(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @com.google.android.exoplayer2.RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, DefaultTrackSelector.Parameters params) throws ExoPlaybackException
Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelection.Definitionfor an audio track selection.- Parameters:
mappedTrackInfo- Mapped track information.rendererFormatSupports- TheRendererCapabilities.Capabilitiesfor each mapped track, indexed by renderer, track group and track (in that order).rendererMixedMimeTypeAdaptationSupports- TheRendererCapabilities.AdaptiveSupportfor mixed MIME type adaptation for the renderer.params- The selector's current constraint parameters.- Returns:
- A pair of the selected
ExoTrackSelection.Definitionand the corresponding renderer index, or null if no selection was made. - Throws:
ExoPlaybackException- If an error occurs while selecting the tracks.
-
selectTextTrack
@Nullable protected Pair<ExoTrackSelection.Definition,Integer> selectTextTrack(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][][] rendererFormatSupports, DefaultTrackSelector.Parameters params, @Nullable String selectedAudioLanguage) throws ExoPlaybackException
Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelection.Definitionfor a text track selection.- Parameters:
mappedTrackInfo- Mapped track information.rendererFormatSupports- TheRendererCapabilities.Capabilitiesfor each mapped track, indexed by renderer, track group and track (in that order).params- The selector's current constraint parameters.selectedAudioLanguage- The language of the selected audio track. May be null if the selected audio track declares no language or no audio track was selected.- Returns:
- A pair of the selected
ExoTrackSelection.Definitionand the corresponding renderer index, or null if no selection was made. - Throws:
ExoPlaybackException- If an error occurs while selecting the tracks.
-
selectOtherTrack
@Nullable protected ExoTrackSelection.Definition selectOtherTrack(int trackType, TrackGroupArray groups, @com.google.android.exoplayer2.RendererCapabilities.Capabilities int[][] formatSupport, DefaultTrackSelector.Parameters params) throws ExoPlaybackException
Called byselectAllTracks(MappedTrackInfo, int[][][], int[], Parameters)to create aExoTrackSelectionfor a renderer whose type is neither video, audio or text.- Parameters:
trackType- The type of the renderer.groups- TheTrackGroupArraymapped to the renderer.formatSupport- TheRendererCapabilities.Capabilitiesfor each mapped track, indexed by track group and track (in that order).params- The selector's current constraint parameters.- Returns:
- The
ExoTrackSelectionfor the renderer, or null if no selection was made. - Throws:
ExoPlaybackException- If an error occurs while selecting the tracks.
-
isSupported
protected static boolean isSupported(@com.google.android.exoplayer2.RendererCapabilities.Capabilities int formatSupport, boolean allowExceedsCapabilities)Returns true if theC.FormatSupportin the givenRendererCapabilities.CapabilitiesisC.FORMAT_HANDLEDor ifallowExceedsCapabilitiesis set and the format support isC.FORMAT_EXCEEDS_CAPABILITIES.- Parameters:
formatSupport-RendererCapabilities.Capabilities.allowExceedsCapabilities- Whether to return true ifC.FormatSupportisC.FORMAT_EXCEEDS_CAPABILITIES.- Returns:
- True if
C.FormatSupportisC.FORMAT_HANDLED, or ifallowExceedsCapabilitiesis set and the format support isC.FORMAT_EXCEEDS_CAPABILITIES.
-
normalizeUndeterminedLanguageToNull
@Nullable protected static String normalizeUndeterminedLanguageToNull(@Nullable String language)
Normalizes the input string to null if it does not define a language, or returns it otherwise.- Parameters:
language- The string.- Returns:
- The string, optionally normalized to null if it does not define a language.
-
getFormatLanguageScore
protected static int getFormatLanguageScore(Format format, @Nullable String language, boolean allowUndeterminedFormatLanguage)
Returns a score for how well a language specified in aFormatmatches a given language.- Parameters:
format- TheFormat.language- The language, or null.allowUndeterminedFormatLanguage- Whether matches with an empty or undetermined format language tag are allowed.- Returns:
- A score of 4 if the languages match fully, a score of 3 if the languages match partly, a score of 2 if the languages don't match but belong to the same main language, a score of 1 if the format language is undetermined and such a match is allowed, and a score of 0 if the languages don't match at all.
-
-