Increase in MediaCodec TYPE_RENDERER errors in 2.16.1, only on Android 10
After upgrading from Exoplayer 2.13.3 to 2.16.1, we are seeing a much higher incidence of various renderer errors, similar to the form pasted below.
2022-03-17 14:06:47.830 22039-26467 E/MediaCodecVideoRenderer: Video codec error
com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: c2.imx.vp9.decoder, Format(1, null, null, video/x-vnd.on2.vp9, null, -1, und, [110, 110, -1.0], [-1, -1])
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:989)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:540)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1395)
at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:764)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:936)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:765)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:982)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:486)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: java.lang.IllegalArgumentException: Error configuring codec, error 0xffffffea
at android.media.MediaCodec.native_configure(Native Method)
at android.media.MediaCodec.configure(MediaCodec.java:2024)
at android.media.MediaCodec.configure(MediaCodec.java:1952)
at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:52)
at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:124)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.initCodec(MediaCodecRenderer.java:1063)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecWithFallback(MediaCodecRenderer.java:982)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.maybeInitCodecOrBypass(MediaCodecRenderer.java:540)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1395)
at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:764)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readSourceOmittingSampleData(MediaCodecRenderer.java:936)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:765)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:982)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:486)
at android.os.Handler.dispatchMessage(Handler.java:103)
at android.os.Looper.loop(Looper.java:214)
at android.os.HandlerThread.run(HandlerThread.java:67)
Our devices are one of either:
- Android API 23, Qualcomm chipset
- Android API 29, NXP i.MX chipset
The increase in these errors only occurs on the API 29 devices, as seen in the chart below:

The majority of the videos that we play are H264 encoded in a DASH or HLS format, with the following being representative of our general encoding breakdown:
Track group 0:
id=VIDEO-1, mimeType=video/avc, bitrate=132471, codecs=avc1.4d401f, res=480x854, fps=24.0
id=VIDEO-2, mimeType=video/avc, bitrate=224597, codecs=avc1.4d401f, res=720x1280, fps=24.0
id=VIDEO-3, mimeType=video/avc, bitrate=91546, codecs=avc1.4d401e, res=360x640, fps=24.0
id=VIDEO-4, mimeType=video/avc, bitrate=83935, codecs=avc1.4d401e, res=360x640, fps=24.0
id=VIDEO-5, mimeType=video/avc, bitrate=54827, codecs=avc1.4d401e, res=240x426, fps=24.0
id=VIDEO-6, mimeType=video/avc, bitrate=416762, codecs=avc1.4d4028, res=1080x1920, fps=24.0
Track group 1:
id=AUDIO-1, mimeType=audio/mp4a-latm, bitrate=97799, codecs=mp4a.40.2, channels=2, sample_rate=44100
We also play VP9 encoded videos.
It doesn't seem codec-specific - we get similar errors for both the H264 sources and the VP9 sources.
So far, the errors that we've seen are thrown by various android.media.MediaCodec methods, including:
-
MediaCodec.native_start -
MediaCodec.native_configure -
MediaCodec.native_dequeueInputBuffer -
MediaCodec.native_dequeueOutputBuffer -
MediaCodec.native_queueInputBuffer -
MediaCodec.releaseOutputBuffer -
MediaCodec.native_flush
The issue is not readily reproducible. It happens seemingly randomly on development devices and is temporarily resolved with a reboot of the affected device. For some of our users, it happens again very soon after rebooting, and for others the reboot resolves the issue for an extended period of time. Attempting to play the a video that caused the issue on different API 29 devices doesn't reproduce the issue.
The renderer issues are also relatively rare - with Exoplayer 2.16.1, they're occurring in about 0.7% of all our devices. However, before the upgrade (still on Exoplayer 2.13.3), the incidence was only about 0.1% of our devices.
I've emailed logcat output from various occurrences of these issues to [email protected].
Is there any reason that the interaction of Exoplayer 2.16.1 would interact with Android 10's media layer to produce this problem more frequently than the other combinations of variables?