media/libraries/exoplayer_dash
tonihei b321c8d3bd Discard already written sample data for clipped DASH periods
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
2025-01-08 07:47:54 -08:00
..

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.