# DefaultTrackSelector

Artifact: [androidx.media3:media3-exoplayer](https://developer.android.com/jetpack/androidx/releases/media3) [View Source](https://cs.android.com/search?q=file:androidx/media3/exoplayer/trackselection/DefaultTrackSelector.java+class:androidx.media3.exoplayer.trackselection.DefaultTrackSelector)

*** ** * ** ***


```
@UnstableApi
public class DefaultTrackSelector extends MappingTrackSelector implements RendererCapabilities.Listener
```

<br />

|---|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) ||||
| ↳ | [androidx.media3.exoplayer.trackselection.TrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector) |||
|   | ↳ | [androidx.media3.exoplayer.trackselection.MappingTrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector) ||
|   |   | ↳ | [androidx.media3.exoplayer.trackselection.DefaultTrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector) |

Known direct subclasses [FakeTrackSelector](https://developer.android.com/reference/androidx/media3/test/utils/FakeTrackSelector)

|---|---|
| `https://developer.android.com/reference/androidx/media3/test/utils/FakeTrackSelector` | A fake `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector` that returns `https://developer.android.com/reference/androidx/media3/test/utils/FakeTrackSelection`s. |

*** ** * ** ***

A default `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector` suitable for most use cases.

## Modifying parameters

Track selection parameters should be modified by obtaining a `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters.Builder` initialized with the current `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` from the player. The desired modifications can be made on the builder, and the resulting `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` can then be built and set on the player:

```
player.setTrackSelectionParameters(
    player.getTrackSelectionParameters()
        .buildUpon()
        .setMaxVideoSizeSd()
        .setPreferredAudioLanguage("de")
        .build());
```
Some specialized parameters are only available in the extended `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` class, which can be retrieved and modified in a similar way by calling methods directly on this class:

```
defaultTrackSelector.setParameters(
    defaultTrackSelector.getParameters()
        .buildUpon()
        .setTunnelingEnabled(true)
        .build());
```

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters extends https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` Extends `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` by adding fields that are specific to `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector`. |
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters.Builder extends https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters.Builder` A builder for `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters`. |
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.ParametersBuilder extends https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters.Builder` **This class is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters.Builder` instead. <br /> |
| `@https://developer.android.com/reference/java/lang/annotation/Documented.html @https://developer.android.com/reference/java/lang/annotation/Retention.html(value = https://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html#SOURCE) @https://developer.android.com/reference/java/lang/annotation/Target.html(value = https://developer.android.com/reference/java/lang/annotation/ElementType.html#TYPE_USE) @https://developer.android.com/reference/androidx/annotation/IntDef(value = ) protected annotation https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.SelectionEligibility` The extent to which tracks are eligible for selection. |
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.SelectionOverride` A track selection override. |

| ### Constants |
|---|---|
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#SELECTION_ELIGIBILITY_ADAPTIVE() = 2` Track is eligible for both a fixed selection and as part of an adaptive selection with multiple tracks. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#SELECTION_ELIGIBILITY_FIXED() = 1` Track is eligible for a fixed selection with one track. |
| `static final int` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#SELECTION_ELIGIBILITY_NO() = 0` Track is not eligible for selection. |

| ### Public fields |
|---|---|
| `final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/content/Context.html` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#context()` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(android.content.Context)(https://developer.android.com/reference/android/content/Context.html context)` |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(android.content.Context,androidx.media3.common.TrackSelectionParameters)( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters )` |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(android.content.Context,androidx.media3.exoplayer.trackselection.ExoTrackSelection.Factory)( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Factory trackSelectionFactory )` |
| `[DefaultTrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection.Factory))( https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Factory trackSelectionFactory )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(android.content.Context,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection.Factory)` <br /> |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(android.content.Context,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection.Factory)( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Factory trackSelectionFactory )` |

| ### Public methods |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters.Builder` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#buildUponParameters()()` Returns a new `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters.Builder` initialized with the current selection parameters. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#getParameters()()` Returns the current parameters for track selection. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Listener` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#getRendererCapabilitiesListener()()` Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Listener` that the concrete instance uses to listen to the renderer capabilities changes. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#init(androidx.media3.exoplayer.trackselection.TrackSelector.InvalidationListener,androidx.media3.exoplayer.upstream.BandwidthMeter)( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector.InvalidationListener listener, https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter bandwidthMeter )` Called by the player to initialize the selector. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#isSetParametersSupported()()` Returns if this `TrackSelector` supports `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#setParameters(androidx.media3.common.TrackSelectionParameters)`. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#onParametersActivated(androidx.media3.common.TrackSelectionParameters)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters)` Called by the player when track selection parameters become active for subsequent track selections made by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#selectTracks(androidx.media3.exoplayer.RendererCapabilities[],androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.Timeline)`. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#onRendererCapabilitiesChanged(androidx.media3.exoplayer.Renderer)(https://developer.android.com/reference/androidx/media3/exoplayer/Renderer renderer)` Called when the renderer capabilities are changed. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#release()()` Called by the player to release the selector. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#setAudioAttributes(androidx.media3.common.AudioAttributes)(https://developer.android.com/reference/androidx/media3/common/AudioAttributes audioAttributes)` Called by the player to set the `https://developer.android.com/reference/androidx/media3/common/AudioAttributes` that will be used for playback. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#setParameters(androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters.Builder)( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters.Builder parametersBuilder )` Atomically sets the provided parameters for track selection. |
| `void` | `[setParameters](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#setParameters(androidx.media3.exoplayer.trackselection.DefaultTrackSelector.ParametersBuilder))( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.ParametersBuilder parametersBuilder )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#setParameters(androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters.Builder)` instead. <br /> |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#setParameters(androidx.media3.common.TrackSelectionParameters)(https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters)` Called by the player to provide parameters for track selection. |

| ### Protected methods |
|---|---|
| `static int` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#getFormatLanguageScore(androidx.media3.common.Format,java.lang.String,boolean)( https://developer.android.com/reference/androidx/media3/common/Format format, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html language, boolean allowUndeterminedFormatLanguage )` Returns a score for how well a language specified in a `https://developer.android.com/reference/androidx/media3/common/Format` matches a given language. |
| `static boolean` | `[isSupported](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#isSupported(int,boolean))( @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int formatSupport, boolean allowExceedsCapabilities )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities#isFormatSupported(int,boolean)` instead. <br /> |
| `static @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#normalizeUndeterminedLanguageToNull(java.lang.String)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html language)` Normalizes the input string to null if it does not define a language, or returns it otherwise. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)( ExoTrackSelection.Definition[] definitions, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params )` Called from `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectTracks(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.Timeline)` to make a track selection for each renderer, prior to overrides and disabled flags being applied. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAudioTrack(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params )` Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for an audio track selection. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectImageTrack(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params )` Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for an image track selection. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectMetadataTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)( ExoTrackSelection.Definition[] definitions, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params )` Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` instances for metadata track selections. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectOtherTrack(int,androidx.media3.exoplayer.source.TrackGroupArray,int[][],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)( int trackType, https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray groups, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][] formatSupport, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params )` Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection` for a renderer whose type is neither video, audio or text. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectTextTrack(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters,java.lang.String)( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html selectedAudioLanguage )` Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for a text track selection. |
| `final https://developer.android.com/reference/android/util/Pair.html<RendererConfiguration[], ExoTrackSelection[]>` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectTracks(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.Timeline)( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupport, https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId, https://developer.android.com/reference/androidx/media3/common/Timeline timeline )` Given mapped track information, returns a track selection and configuration for each renderer. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectVideoTrack(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters,java.lang.String)( https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports, @https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] mixedMimeTypeSupports, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html selectedAudioLanguage )` Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for a video track selection. |

### Inherited fields

From [androidx.media3.exoplayer.trackselection.MappingTrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector) `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector#currentMappedTrackInfo()` From [androidx.media3.exoplayer.trackselection.TrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector) `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#bandwidthMeter()`

### Inherited methods

From [androidx.media3.exoplayer.trackselection.MappingTrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector) `final @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector#getCurrentMappedTrackInfo()()`

Returns the mapping information for the currently active track selection, or null if no selection is currently active.
`final void` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector#onSelectionActivated(java.lang.Object)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/Object.html info)`

Called by the player when a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelectorResult` previously generated by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#selectTracks(androidx.media3.exoplayer.RendererCapabilities[],androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.Timeline)` is activated.
`final https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelectorResult` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector#selectTracks(androidx.media3.exoplayer.RendererCapabilities[],androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.Timeline)(
RendererCapabilities[] rendererCapabilities,
https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray trackGroups,
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId periodId,
https://developer.android.com/reference/androidx/media3/common/Timeline timeline
)`

Called by the player to perform a track selection.
From [androidx.media3.exoplayer.trackselection.TrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector) `final https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#getBandwidthMeter()()`

Returns a bandwidth meter which can be used by track selections to select tracks.
`final void` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#invalidate(androidx.media3.common.TrackSelectionParameters)(@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters)`

Calls `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector.InvalidationListener#onTrackSelectionsInvalidated(androidx.media3.common.TrackSelectionParameters)` to invalidate all previously generated track selections.
`final void` `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#invalidateForRendererCapabilitiesChange(androidx.media3.exoplayer.Renderer)(https://developer.android.com/reference/androidx/media3/exoplayer/Renderer renderer)`

Calls `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector.InvalidationListener#onRendererCapabilitiesChanged(androidx.media3.exoplayer.Renderer)` to invalidate all previously generated track selections because a renderer's capabilities have changed.

## Constants

### SELECTION_ELIGIBILITY_ADAPTIVE

```
protected static final int SELECTION_ELIGIBILITY_ADAPTIVE = 2
```

Track is eligible for both a fixed selection and as part of an adaptive selection with multiple tracks.

### SELECTION_ELIGIBILITY_FIXED

```
protected static final int SELECTION_ELIGIBILITY_FIXED = 1
```

Track is eligible for a fixed selection with one track.

### SELECTION_ELIGIBILITY_NO

```
protected static final int SELECTION_ELIGIBILITY_NO = 0
```

Track is not eligible for selection.

## Public fields

### context

```
public final @Nullable Context context
```

## Public constructors

### DefaultTrackSelector

```
public DefaultTrackSelector(Context context)
```

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | Any `https://developer.android.com/reference/android/content/Context.html`. |

### DefaultTrackSelector

```
public DefaultTrackSelector(
    Context context,
    TrackSelectionParameters parameters
)
```

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | Any `https://developer.android.com/reference/android/content/Context.html`. |
| `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters` | Initial `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters`. |

### DefaultTrackSelector

```
public DefaultTrackSelector(
    Context context,
    ExoTrackSelection.Factory trackSelectionFactory
)
```

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | Any `https://developer.android.com/reference/android/content/Context.html`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Factory trackSelectionFactory` | A factory for `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection`s. |

### DefaultTrackSelector

```
public [DefaultTrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection.Factory))(
    TrackSelectionParameters parameters,
    ExoTrackSelection.Factory trackSelectionFactory
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#DefaultTrackSelector(android.content.Context,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.trackselection.ExoTrackSelection.Factory)`

### DefaultTrackSelector

```
public DefaultTrackSelector(
    Context context,
    TrackSelectionParameters parameters,
    ExoTrackSelection.Factory trackSelectionFactory
)
```

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/content/Context.html context` | Any `https://developer.android.com/reference/android/content/Context.html`. |
| `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters` | Initial `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Factory trackSelectionFactory` | A factory for `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection`s. |

## Public methods

### buildUponParameters

```
public DefaultTrackSelector.Parameters.Builder buildUponParameters()
```

Returns a new `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters.Builder` initialized with the current selection parameters.

### getParameters

```
public DefaultTrackSelector.Parameters getParameters()
```

Returns the current parameters for track selection.

This method must be called from the application thread.

### getRendererCapabilitiesListener

```
public @Nullable RendererCapabilities.Listener getRendererCapabilitiesListener()
```

Returns the `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Listener` that the concrete instance uses to listen to the renderer capabilities changes. May be `null` if the implementation does not listen to the renderer capabilities changes.

### init

```
public void init(
    TrackSelector.InvalidationListener listener,
    BandwidthMeter bandwidthMeter
)
```

Called by the player to initialize the selector.

This method must be called from the application thread.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector.InvalidationListener listener` | An invalidation listener that the selector can call to indicate that selections it has previously made are no longer valid. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/BandwidthMeter bandwidthMeter` | A bandwidth meter which can be used by track selections to select tracks. |

### isSetParametersSupported

```
public boolean isSetParametersSupported()
```

Returns if this `TrackSelector` supports `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#setParameters(androidx.media3.common.TrackSelectionParameters)`.

The same value is always returned for a given `TrackSelector` instance.

This method must be called from the application thread.

### onParametersActivated

```
public void onParametersActivated(@Nullable TrackSelectionParameters parameters)
```

Called by the player when track selection parameters become active for subsequent track selections made by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#selectTracks(androidx.media3.exoplayer.RendererCapabilities[],androidx.media3.exoplayer.source.TrackGroupArray,androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.Timeline)`.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters` | The activated track selection parameters, or `null` if no new parameters need to be activated. |

### onRendererCapabilitiesChanged

```
public void onRendererCapabilitiesChanged(Renderer renderer)
```

Called when the renderer capabilities are changed.

This method will be called on the playback thread.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer renderer` | The renderer that has its capabilities changed. |

### release

```
public void release()
```

Called by the player to release the selector. The selector cannot be used until `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#init(androidx.media3.exoplayer.trackselection.TrackSelector.InvalidationListener,androidx.media3.exoplayer.upstream.BandwidthMeter)` is called again.

### setAudioAttributes

```
public void setAudioAttributes(AudioAttributes audioAttributes)
```

Called by the player to set the `https://developer.android.com/reference/androidx/media3/common/AudioAttributes` that will be used for playback.

### setParameters

```
public void setParameters(
    DefaultTrackSelector.Parameters.Builder parametersBuilder
)
```

Atomically sets the provided parameters for track selection.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters.Builder parametersBuilder` | A builder from which to obtain the parameters for track selection. |

### setParameters

```
public void [setParameters](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#setParameters(androidx.media3.exoplayer.trackselection.DefaultTrackSelector.ParametersBuilder))(
    DefaultTrackSelector.ParametersBuilder parametersBuilder
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#setParameters(androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters.Builder)` instead.

### setParameters

```
public void setParameters(TrackSelectionParameters parameters)
```

Called by the player to provide parameters for track selection.

Only supported if `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#isSetParametersSupported()` returns true.

This method must be called from the application thread.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters parameters` | The parameters for track selection. |

## Protected methods

### getFormatLanguageScore

```
protected static int getFormatLanguageScore(
    Format format,
    @Nullable String language,
    boolean allowUndeterminedFormatLanguage
)
```

Returns a score for how well a language specified in a `https://developer.android.com/reference/androidx/media3/common/Format` matches a given language.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Format format` | The `https://developer.android.com/reference/androidx/media3/common/Format`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html language` | The language, or null. |
| `boolean allowUndeterminedFormatLanguage` | Whether matches with an empty or undetermined format language tag are allowed. |

| Returns |
|---|---|
| `int` | 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. |

### isSupported

```
protected static boolean [isSupported](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#isSupported(int,boolean))(
    @RendererCapabilities.Capabilities int formatSupport,
    boolean allowExceedsCapabilities
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities#isFormatSupported(int,boolean)` instead.

### normalizeUndeterminedLanguageToNull

```
protected static @Nullable String normalizeUndeterminedLanguageToNull(@Nullable String language)
```

Normalizes the input string to null if it does not define a language, or returns it otherwise.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html language` | The string. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html` | The string, optionally normalized to null if it does not define a language. |

### selectAllTracks

```
protected void selectAllTracks(
    ExoTrackSelection.Definition[] definitions,
    MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
    @RendererCapabilities.Capabilities int[][][] rendererFormatSupports,
    @RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports,
    DefaultTrackSelector.Parameters params
)
```

Called from `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectTracks(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.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.

If selection parameters include `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters#audioOffloadPreferences()` with `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters.AudioOffloadPreferences#audioOffloadMode()` set to `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters.AudioOffloadPreferences#AUDIO_OFFLOAD_MODE_REQUIRED()` then only audio tracks will be selected. If no audio track is supported in offload, then no track will be selected.

| Parameters |
|---|---|
| `ExoTrackSelection.Definition[] definitions` | The `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition`s for the renderers to be filled in. A null entry indicates no selection was made. The array may contain existing prepopulated entries from overrides. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo` | Mapped track information. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by renderer, track group and track (in that order). |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` for mixed MIME type adaptation for the renderer. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params` | The parameters to use for the track selection. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |

### selectAudioTrack

```
protected @Nullable Pair<ExoTrackSelection.Definition, Integer> selectAudioTrack(
    MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
    @RendererCapabilities.Capabilities int[][][] rendererFormatSupports,
    @RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports,
    DefaultTrackSelector.Parameters params
)
```

Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for an audio track selection.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo` | Mapped track information. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by renderer, track group and track (in that order). |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` for mixed MIME type adaptation for the renderer. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params` | The selector's current constraint parameters. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | A pair of the selected `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` and the corresponding renderer index, or null if no selection was made. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |

### selectImageTrack

```
protected @Nullable Pair<ExoTrackSelection.Definition, Integer> selectImageTrack(
    MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
    @RendererCapabilities.Capabilities int[][][] rendererFormatSupports,
    DefaultTrackSelector.Parameters params
)
```

Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for an image track selection.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo` | Mapped track information. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by renderer, track group and track (in that order). |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params` | The selector's current constraint parameters. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | A pair of the selected `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` and the corresponding renderer index, or null if no selection was made. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |

### selectMetadataTracks

```
protected void selectMetadataTracks(
    ExoTrackSelection.Definition[] definitions,
    MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
    @RendererCapabilities.Capabilities int[][][] rendererFormatSupports,
    DefaultTrackSelector.Parameters params
)
```

Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` instances for metadata track selections.

| Parameters |
|---|---|
| `ExoTrackSelection.Definition[] definitions` | The full list of selected tracks and output array to mark metadata track selections. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo` | Mapped track information. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by renderer, track group and track (in that order). |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params` | The selector's current constraint parameters. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |

### selectOtherTrack

```
protected @Nullable ExoTrackSelection.Definition selectOtherTrack(
    int trackType,
    TrackGroupArray groups,
    @RendererCapabilities.Capabilities int[][] formatSupport,
    DefaultTrackSelector.Parameters params
)
```

Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection` for a renderer whose type is neither video, audio or text.

| Parameters |
|---|---|
| `int trackType` | The type of the renderer. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray groups` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray` mapped to the renderer. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][] formatSupport` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by track group and track (in that order). |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params` | The selector's current constraint parameters. |

| Returns |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` | The `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection` for the renderer, or null if no selection was made. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |

### selectTextTrack

```
protected @Nullable Pair<ExoTrackSelection.Definition, Integer> selectTextTrack(
    MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
    @RendererCapabilities.Capabilities int[][][] rendererFormatSupports,
    DefaultTrackSelector.Parameters params,
    @Nullable String selectedAudioLanguage
)
```

Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for a text track selection.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo` | Mapped track information. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by renderer, track group and track (in that order). |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params` | The selector's current constraint parameters. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html 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 |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | A pair of the selected `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` and the corresponding renderer index, or null if no selection was made. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |

### selectTracks

```
protected final Pair<RendererConfiguration[], ExoTrackSelection[]> selectTracks(
    MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
    @RendererCapabilities.Capabilities int[][][] rendererFormatSupports,
    @RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupport,
    MediaSource.MediaPeriodId mediaPeriodId,
    Timeline timeline
)
```

Given mapped track information, returns a track selection and configuration for each renderer.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo` | Mapped track information. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by renderer, track group and track (in that order). |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] rendererMixedMimeTypeAdaptationSupport` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` for mixed MIME type adaptation for the renderer. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId mediaPeriodId` | The `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the period for which tracks are to be selected. |
| `https://developer.android.com/reference/androidx/media3/common/Timeline timeline` | The `https://developer.android.com/reference/androidx/media3/common/Timeline` holding the period for which tracks are to be selected. |

| Returns |
|---|---|
| `https://developer.android.com/reference/android/util/Pair.html<RendererConfiguration[], ExoTrackSelection[]>` | 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 must also be null. A track selection may also be null for a non-disabled renderer if `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities#getTrackType()` is `https://developer.android.com/reference/androidx/media3/common/C#TRACK_TYPE_NONE()`. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |

### selectVideoTrack

```
protected @Nullable Pair<ExoTrackSelection.Definition, Integer> selectVideoTrack(
    MappingTrackSelector.MappedTrackInfo mappedTrackInfo,
    @RendererCapabilities.Capabilities int[][][] rendererFormatSupports,
    @RendererCapabilities.AdaptiveSupport int[] mixedMimeTypeSupports,
    DefaultTrackSelector.Parameters params,
    @Nullable String selectedAudioLanguage
)
```

Called by `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector#selectAllTracks(androidx.media3.exoplayer.trackselection.ExoTrackSelection.Definition[],androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters)` to create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` for a video track selection.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo mappedTrackInfo` | Mapped track information. |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities int[][][] rendererFormatSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.Capabilities` for each mapped track, indexed by renderer, track group and track (in that order). |
| `@https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport int[] mixedMimeTypeSupports` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport` for mixed MIME type adaptation for the renderer. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters params` | The selector's current constraint parameters. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/String.html 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 |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/android/util/Pair.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition, https://developer.android.com/reference/java/lang/Integer.html>` | A pair of the selected `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection.Definition` and the corresponding renderer index, or null if no selection was made. |

| Throws |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/ExoPlaybackException` | If an error occurs while selecting the tracks. |