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

*** ** * ** ***

<br />

```
@UnstableApi
abstract class MappingTrackSelector : TrackSelector
```

<br />

|---|---|---|
| [kotlin.Any](https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html) |||
| ↳ | [androidx.media3.exoplayer.trackselection.TrackSelector](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector) ||
|   | ↳ | [androidx.media3.exoplayer.trackselection.MappingTrackSelector](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector) |

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

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

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

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

*** ** * ** ***

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

## Summary

| ### Nested types |
|---|
| `class https://developer.android.com/reference/kotlin/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/kotlin/androidx/annotation/IntDef(value = ) annotation https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo.RendererSupport` Levels of renderer support. |

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

| ### Public functions |
|---|---|
| `https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector#onSelectionActivated(java.lang.Object)(info: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?)` Called by the player when a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelectorResult` previously generated by `https://developer.android.com/reference/kotlin/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. |
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelectorResult!` | `https://developer.android.com/reference/kotlin/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: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities!>!, trackGroups: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray!, periodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!, timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline! )` Called by the player to perform a track selection. |

| ### Protected functions |
|---|---|
| `abstract https://developer.android.com/reference/android/util/Pair.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererConfiguration!>!, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/ExoTrackSelection!>!>!` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector#selectTracks(androidx.media3.exoplayer.trackselection.MappingTrackSelector.MappedTrackInfo,int[][][],int[],androidx.media3.exoplayer.source.MediaSource.MediaPeriodId,androidx.media3.common.Timeline)( mappedTrackInfo: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo!, @https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Capabilities rendererFormatSupports: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html>!>!>!, @https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.AdaptiveSupport rendererMixedMimeTypeAdaptationSupport: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int-array/index.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html>!, mediaPeriodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!, timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline! )` Given mapped track information, returns a track selection and configuration for each renderer. |

| ### Public properties |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo?` | `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/MappingTrackSelector#currentMappedTrackInfo()` |

### Inherited functions

From [androidx.media3.exoplayer.trackselection.TrackSelector](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector) `https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters!` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#getParameters()()`

Returns the current parameters for track selection.
`https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener?` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#getRendererCapabilitiesListener()()`

Returns the `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities.Listener` that the concrete instance uses to listen to the renderer capabilities changes.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#init(androidx.media3.exoplayer.trackselection.TrackSelector.InvalidationListener,androidx.media3.exoplayer.upstream.BandwidthMeter)(

listener: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.InvalidationListener!,

bandwidthMeter: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter!

)`

Called by the player to initialize the selector.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#invalidate(androidx.media3.common.TrackSelectionParameters)(parameters: https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters?)`

Calls `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector.InvalidationListener#onTrackSelectionsInvalidated(androidx.media3.common.TrackSelectionParameters)` to invalidate all previously generated track selections.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#invalidateForRendererCapabilitiesChange(androidx.media3.exoplayer.Renderer)(renderer: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/Renderer!)`

Calls `https://developer.android.com/reference/kotlin/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.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-boolean/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#isSetParametersSupported()()`

Returns if this `TrackSelector` supports `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#setParameters(androidx.media3.common.TrackSelectionParameters)`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#onParametersActivated(androidx.media3.common.TrackSelectionParameters)(parameters: https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters?)`

Called by the player when track selection parameters become active for subsequent track selections made by `https://developer.android.com/reference/kotlin/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)`.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `@https://developer.android.com/reference/kotlin/androidx/annotation/CallSuper
https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#release()()`

Called by the player to release the selector.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#setAudioAttributes(androidx.media3.common.AudioAttributes)(audioAttributes: https://developer.android.com/reference/kotlin/androidx/media3/common/AudioAttributes!)`

Called by the player to set the `https://developer.android.com/reference/kotlin/androidx/media3/common/AudioAttributes` that will be used for playback.
`https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#setParameters(androidx.media3.common.TrackSelectionParameters)(parameters: https://developer.android.com/reference/kotlin/androidx/media3/common/TrackSelectionParameters!)`

Called by the player to provide parameters for track selection.

### Inherited properties

From [androidx.media3.exoplayer.trackselection.TrackSelector](https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector) `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/upstream/BandwidthMeter?` `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelector#bandwidthMeter()`

## Public constructors

### MappingTrackSelector

```
MappingTrackSelector()
```

## Public functions

### onSelectionActivated

```
fun onSelectionActivated(info: Any?): Unit
```

Called by the player when a `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelectorResult` previously generated by `https://developer.android.com/reference/kotlin/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 |
|---|---|
| `info: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-any/index.html?` | The value of `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelectorResult#info()` in the activated selection. |

### selectTracks

```
fun selectTracks(
    rendererCapabilities: Array<RendererCapabilities!>!,
    trackGroups: TrackGroupArray!,
    periodId: MediaSource.MediaPeriodId!,
    timeline: Timeline!
): TrackSelectorResult!
```

Called by the player to perform a track selection.

| Parameters |
|---|---|
| `rendererCapabilities: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities!>!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererCapabilities` of the renderers for which tracks are to be selected. |
| `trackGroups: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/TrackGroupArray!` | The available track groups. |
| `periodId: https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId!` | The `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/source/MediaSource.MediaPeriodId` of the period for which tracks are to be selected. |
| `timeline: https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline!` | The `https://developer.android.com/reference/kotlin/androidx/media3/common/Timeline` holding the period for which tracks are to be selected. |

| Returns |
|---|---|
| `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelectorResult!` | A `https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/TrackSelectorResult` describing the track selections. |

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

## Protected functions

### selectTracks

```
protected abstract fun selectTracks(
    mappedTrackInfo: MappingTrackSelector.MappedTrackInfo!,
    @RendererCapabilities.Capabilities rendererFormatSupports: Array<Array<IntArray<Int>!>!>!,
    @RendererCapabilities.AdaptiveSupport rendererMixedMimeTypeAdaptationSupport: IntArray<Int>!,
    mediaPeriodId: MediaSource.MediaPeriodId!,
    timeline: Timeline!
): Pair<Array<RendererConfiguration!>!, Array<ExoTrackSelection!>!>!
```

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

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

| Returns |
|---|---|
| `https://developer.android.com/reference/android/util/Pair.html<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/RendererConfiguration!>!, https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-array/index.html<https://developer.android.com/reference/kotlin/androidx/media3/exoplayer/trackselection/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/kotlin/androidx/media3/exoplayer/RendererCapabilities#getTrackType()` is `https://developer.android.com/reference/kotlin/androidx/media3/common/C#TRACK_TYPE_NONE()`. |

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

## Public properties

### currentMappedTrackInfo

```
val currentMappedTrackInfo: MappingTrackSelector.MappedTrackInfo?
```