@UnstableApi
public final class DashDownloader extends SegmentDownloader


A downloader for DASH streams.

Example usage:

SimpleCache cache = new SimpleCache(downloadFolder, new NoOpCacheEvictor(), databaseProvider);
CacheDataSource.Factory cacheDataSourceFactory =
    new CacheDataSource.Factory()
        .setCache(cache)
        .setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory());
// Create a downloader for the first representation of the first adaptation set of the first
// period.
DashDownloader dashDownloader =
    new DashDownloader(
        new MediaItem.Builder()
            .setUri(manifestUrl)
            .setStreamKeys(Collections.singletonList(new StreamKey(0, 0, 0)))
            .build(),
        cacheDataSourceFactory);
// Perform the download.
dashDownloader.download(progressListener);
// Use the downloaded data for playback.
DashMediaSource mediaSource =
    new DashMediaSource.Factory(cacheDataSourceFactory).createMediaSource(mediaItem);

Summary

Public constructors

DashDownloader(
    MediaItem mediaItem,
    CacheDataSource.Factory cacheDataSourceFactory
)

Creates a new instance.

DashDownloader(
    MediaItem mediaItem,
    CacheDataSource.Factory cacheDataSourceFactory,
    Executor executor
)

Creates a new instance.

DashDownloader(
    MediaItem mediaItem,
    ParsingLoadable.Parser<DashManifest> manifestParser,
    CacheDataSource.Factory cacheDataSourceFactory,
    Executor executor
)

This method is deprecated.

Use DashDownloader instead.

DashDownloader(
    MediaItem mediaItem,
    ParsingLoadable.Parser<DashManifest> manifestParser,
    CacheDataSource.Factory cacheDataSourceFactory,
    Executor executor,
    long maxMergedSegmentStartTimeDiffMs
)

Creates a new instance.

Protected methods

List<SegmentDownloader.Segment>
getSegments(
    DataSource dataSource,
    DashManifest manifest,
    boolean removing
)

Returns a list of all downloadable Segments for a given manifest.

Inherited methods

From androidx.media3.exoplayer.offline.SegmentDownloader
void

Permanently cancels the downloading by this downloader.

final void

Downloads the content.

final T
<T> execute(RunnableFutureTask<T, Object> runnable, boolean removing)

Executes the provided RunnableFutureTask.

static DataSpec
final M
getManifest(DataSource dataSource, DataSpec dataSpec, boolean removing)

Loads and parses a manifest.

final void

Removes the content.

Public constructors

DashDownloader

public DashDownloader(
    MediaItem mediaItem,
    CacheDataSource.Factory cacheDataSourceFactory
)

Creates a new instance.

Parameters
MediaItem mediaItem

The MediaItem to be downloaded.

CacheDataSource.Factory cacheDataSourceFactory

A CacheDataSource.Factory for the cache into which the download will be written.

DashDownloader

public DashDownloader(
    MediaItem mediaItem,
    CacheDataSource.Factory cacheDataSourceFactory,
    Executor executor
)

Creates a new instance.

Parameters
MediaItem mediaItem

The MediaItem to be downloaded.

CacheDataSource.Factory cacheDataSourceFactory

A CacheDataSource.Factory for the cache into which the download will be written.

Executor executor

An Executor used to make requests for the media being downloaded. Providing an Executor that uses multiple threads will speed up the download by allowing parts of it to be executed in parallel.

DashDownloader

public DashDownloader(
    MediaItem mediaItem,
    ParsingLoadable.Parser<DashManifest> manifestParser,
    CacheDataSource.Factory cacheDataSourceFactory,
    Executor executor
)

DashDownloader

public DashDownloader(
    MediaItem mediaItem,
    ParsingLoadable.Parser<DashManifest> manifestParser,
    CacheDataSource.Factory cacheDataSourceFactory,
    Executor executor,
    long maxMergedSegmentStartTimeDiffMs
)

Creates a new instance.

Parameters
MediaItem mediaItem

The MediaItem to be downloaded.

ParsingLoadable.Parser<DashManifest> manifestParser

A parser for DASH manifests.

CacheDataSource.Factory cacheDataSourceFactory

A CacheDataSource.Factory for the cache into which the download will be written.

Executor executor

An Executor used to make requests for the media being downloaded. Providing an Executor that uses multiple threads will speed up the download by allowing parts of it to be executed in parallel.

long maxMergedSegmentStartTimeDiffMs

The maximum difference of the start time of two segments, up to which the segments (of the same URI) should be merged into a single download segment, in milliseconds.

Protected methods

getSegments

protected List<SegmentDownloader.SegmentgetSegments(
    DataSource dataSource,
    DashManifest manifest,
    boolean removing
)

Returns a list of all downloadable Segments for a given manifest. Any required data should be loaded using getManifest or execute.

Parameters
DataSource dataSource

The DataSource through which to load any required data.

DashManifest manifest

The manifest containing the segments.

boolean removing

Whether the segments are being obtained as part of a removal. If true then a partial segment list is returned in the case that a load error prevents all segments from being listed. If false then an IOException will be thrown in this case.

Returns
List<SegmentDownloader.Segment>

The list of downloadable Segments.

Throws
java.io.IOException

Thrown if allowPartialIndex is false and an execution error occurs, or if the media is not in a form that allows for its segments to be listed.

java.lang.InterruptedException