# DownloadHelper

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

*** ** * ** ***


```
@UnstableApi
public final class DownloadHelper
```

<br />

*** ** * ** ***

A helper for initializing and removing downloads.

The helper extracts track information from the media, selects tracks for downloading, and creates `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` based on the selected tracks.

A typical usage of DownloadHelper follows these steps:

1. Build the helper using a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory` instance.
2. Prepare the helper using `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#prepare(androidx.media3.exoplayer.offline.DownloadHelper.Callback)` and wait for the callback.
3. Optional: Inspect the selected tracks using `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getMappedTrackInfo(int)` and `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getTrackSelections(int,int)`, and make adjustments using `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#clearTrackSelections(int)`, `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#replaceTrackSelections(int,androidx.media3.common.TrackSelectionParameters)` and `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#addTrackSelection(int,androidx.media3.common.TrackSelectionParameters)`.
4. Create a download request for the selected track using `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getDownloadRequest(byte[])`.
5. Release the helper using `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#release()`.

## Summary

| ### Nested types |
|---|
| `public interface https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback` A callback to be notified when the `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` is prepared. |
| `public final class https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory` A factory of `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper`. |
| `public class https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.LiveContentUnsupportedException extends https://developer.android.com/reference/java/io/IOException.html` Thrown at an attempt to download live content. |

| ### Constants |
|---|---|
| `static final https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DEFAULT_TRACK_SELECTOR_PARAMETERS()` Default track selection parameters for downloading. |
| `static final https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT()` **This field is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DEFAULT_TRACK_SELECTOR_PARAMETERS()` instead. <br /> |

| ### Public constructors |
|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DownloadHelper(androidx.media3.common.MediaItem,androidx.media3.exoplayer.source.MediaSource,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RendererCapabilitiesList)( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters, https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilitiesList rendererCapabilities )` Creates download helper. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DownloadHelper(androidx.media3.common.MediaItem,androidx.media3.exoplayer.source.MediaSource,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RendererCapabilitiesList,boolean)( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters, https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilitiesList rendererCapabilities, boolean debugLoggingEnabled )` Creates download helper. |

| ### Public methods |
|---|---|
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#addAudioLanguagesToSelection(java.lang.String...)(String[] languages)` Convenience method to add selections of tracks for all specified audio languages. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#addTextLanguagesToSelection(boolean,java.lang.String...)( boolean selectUndeterminedTextLanguage, String[] languages )` Convenience method to add selections of tracks for all specified text languages. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#addTrackSelection(int,androidx.media3.common.TrackSelectionParameters)( int periodIndex, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters )` Adds a selection of tracks to be downloaded. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#addTrackSelectionForSingleRenderer(int,int,androidx.media3.exoplayer.trackselection.DefaultTrackSelector.Parameters,java.util.List<androidx.media3.exoplayer.trackselection.DefaultTrackSelector.SelectionOverride>)( int periodIndex, int rendererIndex, https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters trackSelectorParameters, https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.SelectionOverride> overrides )` Convenience method to add a selection of tracks to be downloaded for a single renderer. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#clearTrackSelections(int)(int periodIndex)` Clears the selection of tracks for a period. |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#createMediaSource(androidx.media3.exoplayer.offline.DownloadRequest,androidx.media3.datasource.DataSource.Factory)( https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest downloadRequest, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory )` Equivalent to `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#createMediaSource(androidx.media3.exoplayer.offline.DownloadRequest,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionManager)`. |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#createMediaSource(androidx.media3.exoplayer.offline.DownloadRequest,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionManager)( https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest downloadRequest, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager drmSessionManager )` Utility method to create a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` that only exposes the tracks defined in ` downloadRequest`. |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem))(https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.datasource.DataSource.Factory))( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.datasource.DataSource.Factory,boolean))( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, boolean debugLoggingEnabled )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory))( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/RenderersFactory renderersFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory))( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/RenderersFactory renderersFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,boolean))( https://developer.android.com/reference/android/content/Context.html context, https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/RenderersFactory renderersFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, boolean debugLoggingEnabled )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,boolean))( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/RenderersFactory renderersFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, boolean debugLoggingEnabled )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionManager))( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/RenderersFactory renderersFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager drmSessionManager )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper` | `[forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionManager,boolean))( https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/RenderersFactory renderersFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory, @https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager drmSessionManager, boolean debugLoggingEnabled )` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead. <br /> |
| `static https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` | `[getDefaultTrackSelectorParameters](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getDefaultTrackSelectorParameters(android.content.Context))(https://developer.android.com/reference/android/content/Context.html context)` **This method is deprecated.** Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DEFAULT_TRACK_SELECTOR_PARAMETERS()` instead. <br /> |
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getDownloadRequest(byte[])(@https://developer.android.com/reference/androidx/annotation/Nullable byte[] data)` Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getDownloadRequest(java.lang.String,byte[])(https://developer.android.com/reference/java/lang/String.html id, @https://developer.android.com/reference/androidx/annotation/Nullable byte[] data)` Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getDownloadRequest(byte[],long,long)( @https://developer.android.com/reference/androidx/annotation/Nullable byte[] data, long startPositionMs, long durationMs )` Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks and time range. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getDownloadRequest(java.lang.String,byte[],long,long)( https://developer.android.com/reference/java/lang/String.html id, @https://developer.android.com/reference/androidx/annotation/Nullable byte[] data, long startPositionMs, long durationMs )` Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks and time range. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/java/lang/Object.html` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getManifest()()` Returns the manifest, or null if no manifest is loaded. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getMappedTrackInfo(int)(int periodIndex)` Returns the mapped track info for the given period. |
| `int` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getPeriodCount()()` Returns the number of periods for which media is available. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getTrackGroups(int)(int periodIndex)` Returns the track groups for the given period. |
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection>` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getTrackSelections(int,int)(int periodIndex, int rendererIndex)` Returns all `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection` for a period and renderer. |
| `https://developer.android.com/reference/androidx/media3/common/Tracks` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getTracks(int)(int periodIndex)` Returns `https://developer.android.com/reference/androidx/media3/common/Tracks` for the given period. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#prepare(androidx.media3.exoplayer.offline.DownloadHelper.Callback)(https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback callback)` Initializes the helper for starting a download. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#release()()` Releases the helper and all resources it is holding. |
| `void` | `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#replaceTrackSelections(int,androidx.media3.common.TrackSelectionParameters)( int periodIndex, https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters )` Replaces a selection of tracks to be downloaded. |

## Constants

### DEFAULT_TRACK_SELECTOR_PARAMETERS

```
public static final DefaultTrackSelector.Parameters DEFAULT_TRACK_SELECTOR_PARAMETERS
```

Default track selection parameters for downloading.

### DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT

```
public static final DefaultTrackSelector.Parameters DEFAULT_TRACK_SELECTOR_PARAMETERS_WITHOUT_CONTEXT
```

> [!CAUTION]
> **This field is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DEFAULT_TRACK_SELECTOR_PARAMETERS()` instead.

## Public constructors

### DownloadHelper

```
public DownloadHelper(
    MediaItem mediaItem,
    @Nullable MediaSource mediaSource,
    TrackSelectionParameters trackSelectionParameters,
    RendererCapabilitiesList rendererCapabilities
)
```

Creates download helper.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The media item. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource` | A `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` for which tracks are selected, or null if no track selection needs to be made. |
| `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters` | `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` for selecting tracks for downloading. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilitiesList rendererCapabilities` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilitiesList` of the renderers for which tracks are selected. |

### DownloadHelper

```
public DownloadHelper(
    MediaItem mediaItem,
    @Nullable MediaSource mediaSource,
    TrackSelectionParameters trackSelectionParameters,
    RendererCapabilitiesList rendererCapabilities,
    boolean debugLoggingEnabled
)
```

Creates download helper.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/MediaItem mediaItem` | The media item. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource mediaSource` | A `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` to be prepared, or null if no preparation needs to be done. |
| `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters` | `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` for selecting tracks for downloading. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilitiesList rendererCapabilities` | The `https://developer.android.com/reference/androidx/media3/exoplayer/RendererCapabilitiesList` of the renderers for which tracks are selected. |
| `boolean debugLoggingEnabled` | Whether to log debug information. |

## Public methods

### addAudioLanguagesToSelection

```
public void addAudioLanguagesToSelection(String[] languages)
```

Convenience method to add selections of tracks for all specified audio languages. If an audio track in one of the specified languages is not available, the default fallback audio track is used instead. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `String[] languages` | A list of audio languages for which tracks should be added to the download selection, as IETF BCP 47 conformant tags. |

### addTextLanguagesToSelection

```
public void addTextLanguagesToSelection(
    boolean selectUndeterminedTextLanguage,
    String[] languages
)
```

Convenience method to add selections of tracks for all specified text languages. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `boolean selectUndeterminedTextLanguage` | Whether a text track with undetermined language should be selected for downloading if no track with one of the specified `languages` is available. |
| `String[] languages` | A list of text languages for which tracks should be added to the download selection, as IETF BCP 47 conformant tags. |

### addTrackSelection

```
public void addTrackSelection(
    int periodIndex,
    TrackSelectionParameters trackSelectionParameters
)
```

Adds a selection of tracks to be downloaded. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `
tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `int periodIndex` | The period index this track selection is added for. |
| `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters` | The `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` to obtain the new selection of tracks. |

### addTrackSelectionForSingleRenderer

```
public void addTrackSelectionForSingleRenderer(
    int periodIndex,
    int rendererIndex,
    DefaultTrackSelector.Parameters trackSelectorParameters,
    List<DefaultTrackSelector.SelectionOverride> overrides
)
```

Convenience method to add a selection of tracks to be downloaded for a single renderer. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `int periodIndex` | The period index the track selection is added for. |
| `int rendererIndex` | The renderer index the track selection is added for. |
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters trackSelectorParameters` | The `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.Parameters` to obtain the new selection of tracks. |
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.SelectionOverride> overrides` | A list of `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/DefaultTrackSelector.SelectionOverride` to apply to the ` trackSelectorParameters`. If empty, `trackSelectorParameters` are used as they are. |

### clearTrackSelections

```
public void clearTrackSelections(int periodIndex)
```

Clears the selection of tracks for a period. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `
tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `int periodIndex` | The period index for which track selections are cleared. |

### createMediaSource

```
public static MediaSource createMediaSource(
    DownloadRequest downloadRequest,
    DataSource.Factory dataSourceFactory
)
```

Equivalent to `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#createMediaSource(androidx.media3.exoplayer.offline.DownloadRequest,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionManager)`.

### createMediaSource

```
public static MediaSource createMediaSource(
    DownloadRequest downloadRequest,
    DataSource.Factory dataSourceFactory,
    @Nullable DrmSessionManager drmSessionManager
)
```

Utility method to create a `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` that only exposes the tracks defined in `
downloadRequest`.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest downloadRequest` | A `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest`. |
| `https://developer.android.com/reference/androidx/media3/datasource/DataSource.Factory dataSourceFactory` | A factory for `https://developer.android.com/reference/androidx/media3/datasource/DataSource`s to read the media. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager drmSessionManager` | An optional `https://developer.android.com/reference/androidx/media3/exoplayer/drm/DrmSessionManager` to be passed to the `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource`. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` | A `https://developer.android.com/reference/androidx/media3/exoplayer/source/MediaSource` that only exposes the tracks defined in `downloadRequest`. |

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem))(Context context, MediaItem mediaItem)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.datasource.DataSource.Factory))(
    Context context,
    MediaItem mediaItem,
    DataSource.Factory dataSourceFactory
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.datasource.DataSource.Factory,boolean))(
    Context context,
    MediaItem mediaItem,
    DataSource.Factory dataSourceFactory,
    boolean debugLoggingEnabled
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory))(
    Context context,
    MediaItem mediaItem,
    @Nullable RenderersFactory renderersFactory,
    @Nullable DataSource.Factory dataSourceFactory
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory))(
    MediaItem mediaItem,
    TrackSelectionParameters trackSelectionParameters,
    @Nullable RenderersFactory renderersFactory,
    @Nullable DataSource.Factory dataSourceFactory
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(android.content.Context,androidx.media3.common.MediaItem,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,boolean))(
    Context context,
    MediaItem mediaItem,
    @Nullable RenderersFactory renderersFactory,
    @Nullable DataSource.Factory dataSourceFactory,
    boolean debugLoggingEnabled
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,boolean))(
    MediaItem mediaItem,
    TrackSelectionParameters trackSelectionParameters,
    @Nullable RenderersFactory renderersFactory,
    @Nullable DataSource.Factory dataSourceFactory,
    boolean debugLoggingEnabled
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionManager))(
    MediaItem mediaItem,
    TrackSelectionParameters trackSelectionParameters,
    @Nullable RenderersFactory renderersFactory,
    @Nullable DataSource.Factory dataSourceFactory,
    @Nullable DrmSessionManager drmSessionManager
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### forMediaItem

```
public static DownloadHelper [forMediaItem](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#forMediaItem(androidx.media3.common.MediaItem,androidx.media3.common.TrackSelectionParameters,androidx.media3.exoplayer.RenderersFactory,androidx.media3.datasource.DataSource.Factory,androidx.media3.exoplayer.drm.DrmSessionManager,boolean))(
    MediaItem mediaItem,
    TrackSelectionParameters trackSelectionParameters,
    @Nullable RenderersFactory renderersFactory,
    @Nullable DataSource.Factory dataSourceFactory,
    @Nullable DrmSessionManager drmSessionManager,
    boolean debugLoggingEnabled
)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Factory#create(androidx.media3.common.MediaItem)` instead.

### getDefaultTrackSelectorParameters

```
public static DefaultTrackSelector.Parameters [getDefaultTrackSelectorParameters](https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getDefaultTrackSelectorParameters(android.content.Context))(Context context)
```

> [!CAUTION]
> **This method is deprecated.**   
>
> Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#DEFAULT_TRACK_SELECTOR_PARAMETERS()` instead.

### getDownloadRequest

```
public DownloadRequest getDownloadRequest(@Nullable byte[] data)
```

Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks. Must not be called until after preparation completes. The uri of the `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` will be used as content id.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable byte[] data` | Application provided data to store in `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest#data()`. |

### getDownloadRequest

```
public DownloadRequest getDownloadRequest(String id, @Nullable byte[] data)
```

Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks. Must not be called until after preparation completes.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html id` | The unique content id. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable byte[] data` | Application provided data to store in `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest#data()`. |

### getDownloadRequest

```
public DownloadRequest getDownloadRequest(
    @Nullable byte[] data,
    long startPositionMs,
    long durationMs
)
```

Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks and time range. Must not be called until preparation completes.

This method is only supported for progressive streams.

| Parameters |
|---|---|
| `@https://developer.android.com/reference/androidx/annotation/Nullable byte[] data` | Application provided data to store in `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest#data()`. |
| `long startPositionMs` | The start position (in milliseconds) of the media that download should cover from, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if the download should cover from the default start position. |
| `long durationMs` | The end position (in milliseconds) of the media that download should cover to, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if the download should cover to the end of the media. If the `endPositionMs` is larger than the duration of the media, then the download will cover to the end of the media. |

### getDownloadRequest

```
public DownloadRequest getDownloadRequest(
    String id,
    @Nullable byte[] data,
    long startPositionMs,
    long durationMs
)
```

Builds a `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest` for downloading the selected tracks and time range. Must not be called until preparation completes.

This method is only supported for progressive streams.

| Parameters |
|---|---|
| `https://developer.android.com/reference/java/lang/String.html id` | The unique content id. |
| `@https://developer.android.com/reference/androidx/annotation/Nullable byte[] data` | Application provided data to store in `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadRequest#data()`. |
| `long startPositionMs` | The start position (in milliseconds) of the media that download should cover from, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if the download should cover from the default start position. |
| `long durationMs` | The duration (in milliseconds) of the media that download should cover, or `https://developer.android.com/reference/androidx/media3/common/C#TIME_UNSET()` if the download should cover to the end of the media. If the end position resolved from `startPositionMs` and `durationMs` is beyond the duration of the media, then the download will just cover to the end of the media. |

### getManifest

```
public @Nullable Object getManifest()
```

Returns the manifest, or null if no manifest is loaded. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered.

### getMappedTrackInfo

```
public MappingTrackSelector.MappedTrackInfo getMappedTrackInfo(int periodIndex)
```

Returns the mapped track info for the given period. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `
tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `int periodIndex` | The period index. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo` | The `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/MappingTrackSelector.MappedTrackInfo` for the period. |

### getPeriodCount

```
public int getPeriodCount()
```

Returns the number of periods for which media is available. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered.

### getTrackGroups

```
public TrackGroupArray getTrackGroups(int periodIndex)
```

Returns the track groups for the given period. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `
tracksInfoAvailable` is `true`.

Use `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper#getMappedTrackInfo(int)` to get the track groups mapped to renderers.

| Parameters |
|---|---|
| `int periodIndex` | The period index. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray` | The track groups for the period. May be `https://developer.android.com/reference/androidx/media3/exoplayer/source/TrackGroupArray#EMPTY()` for single stream content. |

### getTrackSelections

```
public List<ExoTrackSelection> getTrackSelections(int periodIndex, int rendererIndex)
```

Returns all `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection` for a period and renderer. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `int periodIndex` | The period index. |
| `int rendererIndex` | The renderer index. |

| Returns |
|---|---|
| `https://developer.android.com/reference/java/util/List.html<https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection>` | A list of selected `https://developer.android.com/reference/androidx/media3/exoplayer/trackselection/ExoTrackSelection`. |

### getTracks

```
public Tracks getTracks(int periodIndex)
```

Returns `https://developer.android.com/reference/androidx/media3/common/Tracks` for the given period. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `
tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `int periodIndex` | The period index. |

| Returns |
|---|---|
| `https://developer.android.com/reference/androidx/media3/common/Tracks` | The `https://developer.android.com/reference/androidx/media3/common/Tracks` for the period. May be `https://developer.android.com/reference/androidx/media3/common/Tracks#EMPTY()` for single stream content. |

### prepare

```
public void prepare(DownloadHelper.Callback callback)
```

Initializes the helper for starting a download.

| Parameters |
|---|---|
| `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback callback` | A callback to be notified when preparation completes or fails. |

| Throws |
|---|---|
| `https://developer.android.com/reference/java/lang/IllegalStateException.html` | If the download helper has already been prepared. |

### release

```
public void release()
```

Releases the helper and all resources it is holding.

### replaceTrackSelections

```
public void replaceTrackSelections(
    int periodIndex,
    TrackSelectionParameters trackSelectionParameters
)
```

Replaces a selection of tracks to be downloaded. Must not be called until `https://developer.android.com/reference/androidx/media3/exoplayer/offline/DownloadHelper.Callback#onPrepared(androidx.media3.exoplayer.offline.DownloadHelper,boolean)` is triggered and the passed `
tracksInfoAvailable` is `true`.

| Parameters |
|---|---|
| `int periodIndex` | The period index for which the track selection is replaced. |
| `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters trackSelectionParameters` | The `https://developer.android.com/reference/androidx/media3/common/TrackSelectionParameters` to obtain the new selection of tracks. |