
ExoPlayer used to call `stop()` before `release()`. This was removed in <unknown commit>. A framework bug introduced in Android 11 (API 30) resulted in some DRM -> clear transitions failing during `MediaCodec.configure()`. An investigation in Issue: google/ExoPlayer#8696 and b/191966399 identified that this was due to `release()` returning 'too early' and the subsequent `configure()` call was then trying to re-use a `Surface` that hadn't been fully detached from the previous codec. This was fixed in Android 13 (API 33) with http://r.android.com/2094347. ExoPlayer worked around the framework bug by adding an arbitrary 50ms sleep after a failed codec initialization, followed by retrying. This was enough to resolve the problem in the test scenario on a OnePlus AC2003. Issue: androidx/media#1497 points out that 50ms might not be the appropriate delay for all devices, so it's an incomplete fix. They suggested re-adding the `MediaCodec.stop()` call instead. This also reliably resolves the issue on the OnePlus AC2003 (with neither workaround in place, the problem repros almost immediately). PiperOrigin-RevId: 646461943
ExoPlayer module
This module provides ExoPlayer
, the Player
implementation for local media
playback on Android.
Getting the module
The easiest way to get the module is to add it as a gradle dependency:
implementation 'androidx.media3:media3-exoplayer: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.