# MappingTrackSelector

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/MappingTrackSelector.java+class:androidx.media3.exoplayer.trackselection.MappingTrackSelector)

*** ** * ** ***


```
@UnstableApi
public abstract class MappingTrackSelector extends TrackSelector
```

<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) |

Known direct subclasses [DefaultTrackSelector](https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector)

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

Known indirect 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. |

*** ** * ** ***

Base class for `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector`s that first establish a mapping between `https://developer.android.com/reference/androidx/media3/common/TrackGroup`s and `https://developer.android.com/reference/androidx/media3/exoplayer/Renderer`s, and then from that mapping create a `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection` for each renderer.

## Summary

| ### Nested types |
|---|
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo` Provides mapped track information for each renderer. |
| `@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/androidx/annotation/IntDef(value = ) public annotation https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo.RendererSupport` Levels of renderer support. |

| ### Public fields |
|---|---|
| `@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()` |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector#MappingTrackSelector()()` |

| ### Public methods |
|---|---|
| `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. |

| ### Protected methods |
|---|---|
| `abstract https://developer.android.com/reference/android/util/Pair.html<RendererConfiguration[], ExoTrackSelection[]>` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector#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. |

| ### Inherited fields |
|---|
| 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.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. | | `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#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/TrackSelector#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/annotation/CallSuper https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#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. | | `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. | | `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#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/TrackSelector#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/annotation/CallSuper https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#release()()` Called by the player to release the selector. | | `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelector#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/TrackSelector#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. | |

## Public fields

### currentMappedTrackInfo

```
public @Nullable MappingTrackSelector.MappedTrackInfo currentMappedTrackInfo
```

## Public constructors

### MappingTrackSelector

```
public MappingTrackSelector()
```

## Public methods

### getCurrentMappedTrackInfo

```
public final @Nullable MappingTrackSelector.MappedTrackInfo getCurrentMappedTrackInfo()
```

Returns the mapping information for the currently active track selection, or null if no selection is currently active.

### onSelectionActivated

```
public final void onSelectionActivated(@Nullable Object 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.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/Object.html info` | The value of `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelectorResult#info()` in the activated selection. |

### selectTracks

```
public final TrackSelectorResult selectTracks(
    RendererCapabilities[] rendererCapabilities,
    TrackGroupArray trackGroups,
    MediaSource.MediaPeriodId periodId,
    Timeline timeline
)
```

Called by the player to perform a track selection.

| Parameters |
|---|---|
| `RendererCapabilities[] rendererCapabilities` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilities` of the renderers for which tracks are to be selected. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray trackGroups` | The available track groups. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId periodId` | 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/androidx/media3/exoplayer/trackselection/TrackSelectorResult` | A `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/TrackSelectorResult` describing the track selections. |

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

## Protected methods

### selectTracks

```
protected abstract 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. |