# BaseContentSteeringTracker

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/upstream/contentsteering/BaseContentSteeringTracker.java+class:androidx.media3.exoplayer.upstream.contentsteering.BaseContentSteeringTracker)

*** ** * ** ***


```
@UnstableApi
public abstract class BaseContentSteeringTracker
```

<br />

Known direct subclasses [DashContentSteeringTracker](https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker), [HlsContentSteeringTracker](https://developer.android.com/reference/androidx/media3/exoplayer/hls/HlsContentSteeringTracker)

|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/dash/DashContentSteeringTracker` | Tracks the content steering states for a DASH stream. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/hls/HlsContentSteeringTracker` | Tracks the content steering states for an HLS stream. |

*** ** * ** ***

Abstract base class for Content Steering tracker implementations.

It provides common state management for steering manifest tracking, pathway evaluation, and pathway cloning.

## Summary

| ### Public fields |
|---|---|
| `boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#isActive()` |

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

| ### Protected constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#BaseContentSteeringTracker(androidx.media3.datasource.DataSource.Factory,com.google.common.base.Supplier<androidx.media3.exoplayer.util.ReleasableExecutor>)( 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 )` Creates a `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker`. |

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

| ### Protected methods |
|---|---|
| `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. |
| `abstract 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/upstream/contentsteering/BaseContentSteeringTracker#getSteeringQueryParameters()()` Returns the query parameters to include in the steering manifest request. |
| `abstract boolean` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#isPathwayAvailable(java.lang.String)(https://developer.android.com/reference/java/lang/String.html pathwayId)` Returns whether the given pathway is currently available. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#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. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#onStop()()` Called when tracking is stopped. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#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. |
| `abstract void` | `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker#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. |

## Public fields

### isActive

```
public boolean isActive
```

## Protected fields

### currentPathwayPriority

```
protected @Nullable ImmutableList<String> currentPathwayPriority
```

## Protected constructors

### BaseContentSteeringTracker

```
protected BaseContentSteeringTracker(
    DataSource.Factory dataSourceFactory,
    @Nullable Supplier<ReleasableExecutor> downloadExecutorSupplier
)
```

Creates a `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/BaseContentSteeringTracker`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | The `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory` to load steering manifests. |
| `@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` to download steering manifests. |

## Public methods

### isActive

```
public final boolean isActive()
```

Returns whether the Content Steering tracker is active.

If this method returns `false`, the caller of the tracker should behave as if content steering is absent.

### release

```
public final void release()
```

Releases the Content Steering tracker.

Once released, the tracker cannot be used again.

### start

```
public final void start(
    Uri initialSteeringManifestUri,
    ImmutableList<String> initialPathwayIds,
    MediaSourceEventListener.EventDispatcher eventDispatcher
)
```

Starts the Content Steering tracker.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/net/Uri.html initialSteeringManifestUri` | The initial `https://developer.android.com/reference/android/net/Uri.html` of the steering manifest. |
| `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 use before the first steering manifest is loaded. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher eventDispatcher` | A `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSourceEventListener.EventDispatcher` for reporting load events. |

## Protected methods

### applyUriReplacement

```
protected static Uri applyUriReplacement(
    Uri baseUri,
    SteeringManifest.UriReplacement uriReplacement
)
```

Applies a `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.UriReplacement` to a base URI.

| Parameters |
|---|---|
| `https://developer.android.com/reference/android/net/Uri.html baseUri` | The base `https://developer.android.com/reference/android/net/Uri.html`. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.UriReplacement uriReplacement` | The `https://developer.android.com/reference/androidx/media3/exoplayer/upstream/contentsteering/SteeringManifest.UriReplacement`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/android/net/Uri.html` | The updated `https://developer.android.com/reference/android/net/Uri.html`. |

### getCurrentPathwayPriority

```
protected final @Nullable ImmutableList<String> getCurrentPathwayPriority()
```

Returns the current pathway priority.

| Returns |
|---|---|
| `@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>` | The current pathway priority, or `null` if the tracker is not active. |

### getSteeringQueryParameters

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

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

### isPathwayAvailable

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