Crash due to prewarming - flush() is valid only at Executing states; currently at Released state
Version
Media3 pre-release (alpha, beta or RC not in this list)
More version details
1.6.0-beta01
Devices that reproduce the issue
OS version: android15 Model:Galaxy S25 Ultra
OS version: android14 Model:Pixel 4a (5G)
Devices that do not reproduce the issue
No response
Reproducible in the demo app?
Yes
Reproduction steps
I think this happens when the user leaves a screen that had an exoplayer playing with prewarming renderers enabled. This crash shows up in crashlytics for me with high frequency but I can't reproduce it on my device.
Expected result
no crash
Actual result
Fatal Exception: java.lang.IllegalStateException: flush() is valid only at Executing states; currently at Released state
at android.media.MediaCodec.native_flush(MediaCodec.java)
at android.media.MediaCodec.flush(MediaCodec.java:2504)
at androidx.media3.exoplayer.mediacodec.AsynchronousMediaCodecAdapter.flush(AsynchronousMediaCodecAdapter.java:272)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushCodec(MediaCodecRenderer.java:968)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.flushOrReleaseCodec(MediaCodecRenderer.java:961)
at androidx.media3.exoplayer.mediacodec.MediaCodecRenderer.onDisabled(MediaCodecRenderer.java:784)
at androidx.media3.exoplayer.video.MediaCodecVideoRenderer.onDisabled(MediaCodecVideoRenderer.java:1026)
at androidx.media3.exoplayer.BaseRenderer.disable(BaseRenderer.java:244)
at androidx.media3.exoplayer.RendererHolder.disableRenderer(RendererHolder.java:645)
at androidx.media3.exoplayer.RendererHolder.disablePrewarming(RendererHolder.java:586)
at androidx.media3.exoplayer.ExoPlayerImplInternal.disableAndResetPrewarmingRenderers(ExoPlayerImplInternal.java:1984)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:731)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loopOnce(Looper.java:205)
at android.os.Looper.loop(Looper.java:294)
at android.os.HandlerThread.run(HandlerThread.java:67)
at androidx.media3.exoplayer.RendererHolder.disableRenderer(RendererHolder.java:645)
at androidx.media3.exoplayer.RendererHolder.disablePrewarming(RendererHolder.java:586)
at androidx.media3.exoplayer.ExoPlayerImplInternal.disableAndResetPrewarmingRenderers(ExoPlayerImplInternal.java:1984)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:731)
☝ this part makes me suspect that the issue relates to prewarming
Media
unknown - stack trace should provide enough information to figure out what's going wrong
Bug Report
- [ ] You will email the zip file produced by
adb bugreportto [email protected] after filing this issue.
@AradiPatrik
Thank you for reporting your issue. Based on the trace, it appears that the error is thrown in the logical path that is disabling pre-warming due to some other thrown error while pre-warming. For instance, if ExoPlayer received an decoder initalization error while setting up for pre-warming, it would disable pre-warming and fallback to original paths for playback.
Therefore, it would be helpful to identify the original issue that caused ExoPlayer to start disabling pre-warming.
Can you provide additional details of your setup? Are you just running a generic ExoPlayer with pre-warming enabled? Are you trying to use Effects? Could you supply a full bug-report of the reproduced issue?
@microkatz Thanks for checking. I'm not using any effects. I only use a pre-warming exoplayer with a single media item inside it. So far I only see the stacktrace in crashlytics and couldn't find out how to reproduce it locally, I'll let you know when I find out more.
facing same issue