# DashContentSteeringTracker

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

*** ** * ** ***


```
@UnstableApi
public final class DashContentSteeringTracker extends BaseContentSteeringTracker
```

<br />

|---|---|---|
| [java.lang.Object](https://developer.android.com/reference/java/lang/Object.html) |||
| ↳ | [androidx.media3.exoplayer.upstream.contentsteering.BaseContentSteeringTracker](https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker) ||
|   | ↳ | [androidx.media3.exoplayer.dash.DashContentSteeringTracker](https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker) |

*** ** * ** ***

Tracks the content steering states for a DASH stream.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.Callback` A callback to be notified of `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker` events. |
| `public interface https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.SteeringQueryParamsProvider` Provides the information for the query parameters to request the steering manifests. |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#DashContentSteeringTracker(androidx.media3.datasource.DataSource.Factory,com.google.common.base.Supplier<androidx.media3.exoplayer.util.ReleasableExecutor>,androidx.media3.exoplayer.dash.DashContentSteeringTracker.Callback,androidx.media3.datasource.TransferListener,androidx.media3.exoplayer.dash.manifest.DashManifest)( https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor> downloadExecutorSupplier, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.Callback callback, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/TransferListener mediaTransferListener, https://developer.android.com/reference/androidx/media3/exoplayer/dash/manifest/DashManifest manifest )` Creates a `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker`. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#addSteeringQueryParamsProvider(androidx.media3.exoplayer.dash.DashContentSteeringTracker.SteeringQueryParamsProvider)( https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.SteeringQueryParamsProvider provider )` Adds a `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.SteeringQueryParamsProvider` to the tracker. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#getCurrentServiceLocationPriority()()` Returns the current service location priority, or `null` if the tracker is inactive or no priority has been established. |
| `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#getMediaTransferListener()()` Returns the `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` that should be used by the `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for media loading. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#removeSteeringQueryParamsProvider(androidx.media3.exoplayer.dash.DashContentSteeringTracker.SteeringQueryParamsProvider)( https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.SteeringQueryParamsProvider provider )` Removes a `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.SteeringQueryParamsProvider` from the tracker. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#updateManifest(androidx.media3.exoplayer.dash.manifest.DashManifest)(https://developer.android.com/reference/androidx/media3/exoplayer/dash/manifest/DashManifest manifest)` Updates the `https://developer.android.com/reference/androidx/media3/exoplayer/dash/manifest/DashManifest` for the stream. |

| ### Protected methods |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableMap.html<https://developer.android.com/reference/java/lang/String.html, https://developer.android.com/reference/java/lang/String.html>` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#getSteeringQueryParameters()()` Returns the query parameters to include in the steering manifest request. |
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#isPathwayAvailable(java.lang.String)(https://developer.android.com/reference/java/lang/String.html pathwayId)` Returns whether the given pathway is currently available. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#onStart(com.google.common.collect.ImmutableList<java.lang.String>)(https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html> initialPathwayIds)` Called when the tracker is started. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#onStop()()` Called when tracking is stopped. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#performPathwayClone(androidx.media3.exoplayer.upstream.contentsteering.SteeringManifest.PathwayClone)(https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.PathwayClone pathwayClone)` Performs a pathway clone defined in the steering manifest. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker#performPathwayEvaluation(com.google.common.collect.ImmutableList<java.lang.String>)(https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html> pathwayPriority)` Performs a pathway evaluation based on the passed pathway priority. |

### Inherited fields

From [androidx.media3.exoplayer.upstream.contentsteering.BaseContentSteeringTracker](https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker) `@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html>` `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#currentPathwayPriority()` `boolean` `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#isActive()`

### Inherited methods

From [androidx.media3.exoplayer.upstream.contentsteering.BaseContentSteeringTracker](https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker) `static https://developer.android.com/reference/android/net/Uri.html` `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#applyUriReplacement(android.net.Uri,androidx.media3.exoplayer.upstream.contentsteering.SteeringManifest.UriReplacement)(
https://developer.android.com/reference/android/net/Uri.html baseUri,
https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.UriReplacement uriReplacement
)`

Applies a `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.UriReplacement` to a base URI.
`final @https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html>` `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#getCurrentPathwayPriority()()`

Returns the current pathway priority.
`final boolean` `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#isActive()()`

Returns whether the Content Steering tracker is active.
`final void` `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#release()()`

Releases the Content Steering tracker.
`final void` `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#start(android.net.Uri,com.google.common.collect.ImmutableList<java.lang.String>,androidx.media3.exoplayer.source.MediaSourceEventListener.EventDispatcher)(
https://developer.android.com/reference/android/net/Uri.html initialSteeringManifestUri,
https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html> initialPathwayIds,
https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher eventDispatcher
)`

Starts the Content Steering tracker.

## Public constructors

### DashContentSteeringTracker

```
public DashContentSteeringTracker(
    DataSource.Factory dataSourceFactory,
    @Nullable Supplier<ReleasableExecutor> downloadExecutorSupplier,
    @Nullable DashContentSteeringTracker.Callback callback,
    @Nullable TransferListener mediaTransferListener,
    DashManifest manifest
)
```

Creates a `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | The `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://guava.dev/releases/snapshot-android/api/docs/com/google/common/base/Supplier.html<https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor> downloadExecutorSupplier` | A supplier for a `https://developer.android.com/reference/androidx/media3/exoplayer/util/ReleasableExecutor`, or `null`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.Callback callback` | A `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.Callback`. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/TransferListener mediaTransferListener` | The `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` to be used by the `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for media loading, which should be the `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` passed to the `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashMediaSource` when the source is prepared. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/dash/manifest/DashManifest manifest` | The `https://developer.android.com/reference/androidx/media3/exoplayer/dash/manifest/DashManifest`. |

## Public methods

### addSteeringQueryParamsProvider

```
public void addSteeringQueryParamsProvider(
    DashContentSteeringTracker.SteeringQueryParamsProvider provider
)
```

Adds a `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.SteeringQueryParamsProvider` to the tracker.

### getCurrentServiceLocationPriority

```
public @Nullable ImmutableList<String> getCurrentServiceLocationPriority()
```

Returns the current service location priority, or `null` if the tracker is inactive or no priority has been established.

### getMediaTransferListener

```
public TransferListener getMediaTransferListener()
```

Returns the `https://developer.android.com/reference/androidx/media3/datasource/TransferListener` that should be used by the `https://developer.android.com/reference/androidx/media3/datasource/DataSource` for media loading.

### removeSteeringQueryParamsProvider

```
public void removeSteeringQueryParamsProvider(
    DashContentSteeringTracker.SteeringQueryParamsProvider provider
)
```

Removes a `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker.SteeringQueryParamsProvider` from the tracker.

### updateManifest

```
public void updateManifest(DashManifest manifest)
```

Updates the `https://developer.android.com/reference/androidx/media3/exoplayer/dash/manifest/DashManifest` for the stream.

## Protected methods

### getSteeringQueryParameters

```
protected ImmutableMap<String, String> getSteeringQueryParameters()
```

Returns the query parameters to include in the steering manifest request.

### isPathwayAvailable

```
protected boolean isPathwayAvailable(String pathwayId)
```

Returns whether the given pathway is currently available.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html pathwayId` | The ID of the pathway to check. |

| Returns |
|---|---|
| `boolean` | Whether the given pathway is available. |

### onStart

```
protected void onStart(ImmutableList<String> initialPathwayIds)
```

Called when the tracker is started.

| Parameters |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html> initialPathwayIds` | The IDs of the initial pathways to be used before the first steering manifest is loaded. |

### onStop

```
protected void onStop()
```

Called when tracking is stopped.

This can be either externally called by `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#release()` or internally due to an unrecoverable error.

### performPathwayClone

```
protected void performPathwayClone(SteeringManifest.PathwayClone pathwayClone)
```

Performs a pathway clone defined in the steering manifest.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.PathwayClone pathwayClone` | The `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.PathwayClone` to perform. |

### performPathwayEvaluation

```
protected void performPathwayEvaluation(ImmutableList<String> pathwayPriority)
```

Performs a pathway evaluation based on the passed pathway priority.

| Parameters |
|---|---|
| `https://guava.dev/releases/snapshot-android/api/docs/com/google/common/collect/ImmutableList.html<https://developer.android.com/reference/java/lang/String.html> pathwayPriority` | The `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest#pathwayPriority()` to use for evaluation. |