
DASH periods can have a duration that is less than the end of the last chunk in the period. In these cases, the sample data needs to be clipped to the declared period duration. This already happens IF the period duration is known at the point where we start loading the media chunk. However, if the duration becomes known later or is reduced (e.g. in a live stream), the existing media chunks are not clipped. This causes unclean transitions across periods where the player tries to transition to the next period, but renderers struggle to output all the remaining surplus samples that should have been clipped. This can be fixed by asking ChunkSampleStream to discard surplus samples that were loaded beyond a clipped duration when evaluating the sample queue between chunk loads. Issue: androidx/media#1698 PiperOrigin-RevId: 713288221
ExoPlayer DASH module
Provides support for Dynamic Adaptive Streaming over HTTP (DASH) content in ExoPlayer.
Getting the module
The easiest way to get the module is to add it as a gradle dependency:
implementation 'androidx.media3:media3-exoplayer-dash:1.X.X'
where 1.X.X
is the version, which must match the version of the other media
modules being used.
Alternatively, you can clone this GitHub project and depend on the module locally. Instructions for doing this can be found in the top level README.
Using the module
Adding a dependency to this module is all that's required to enable playback of
DASH media items added to ExoPlayer
in its default configuration. Internally,
DefaultMediaSourceFactory
will automatically detect the presence of the module
and convert a DASH MediaItem
into a DashMediaSource
for playback.
Similarly, a DownloadManager
in its default configuration will use
DefaultDownloaderFactory
, which will automatically detect the presence of
the module and build DashDownloader
instances to download DASH content.
For advanced playback use cases, applications can build DashMediaSource
instances and pass them directly to the player. For advanced download use cases,
DashDownloader
can be used directly.