Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

VMAP Midrolls raise a decoder exception on some devices (more details below) when main content is Widevine protected #9855

Closed
4 tasks done
antoniovm opened this issue Jan 12, 2022 · 2 comments
Assignees

Comments

@antoniovm
Copy link

Description

VMAP Midrolls raise a decoder exception on some devices (more details below) when main content is Widevine protected. Simulators and other devices seems to work fine.

Steps to reproduce

  1. Clone ExoPlayer repo
  2. git checkout r2.16.0 (detected on this version)
  3. Add this node to demos/main/src/main/assets/media.exolist.json "IMA sample ad tags"
{
  "name": "Widevine DASH + VMAP pre-roll single ad, mid-roll standard pods with 5 ads every 10 seconds for 1:40, post-roll single ad",
  "uri": "https://storage.googleapis.com/wvmedia/cenc/h264/tears/tears_sd.mpd",
  "drm_scheme": "widevine",
  "drm_license_uri": "https://proxy.uat.widevine.com/proxy?provider=widevine_test",
  "ad_tag_uri": "https://pubads.g.doubleclick.net/gampad/ads?sz=640x480&iu=/124319096/external/ad_rule_samples&ciu_szs=300x250&ad_rule=1&impl=s&gdfp_req=1&env=vp&output=vmap&unviewed_position_start=1&cust_params=deployment%3Ddevsite%26sample_ar%3Dpremidpostlongpod&cmsid=496&vid=short_tencue&correlator="
},
  1. Run the "demo" app into an affected device in Android Studio
  2. Start the playback of the new added node
  3. Seek into or wait for a midroll during playback

Result: Unable to instantiate decoder OMX.qcom.video.decoder.avc

Output of running "adb bugreport"

Output logs

Logcat output
2022-01-12 12:21:18.917 30548-31798/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7bc4be7110, reason connectToSurface
2022-01-12 12:21:18.917 30548-31798/com.google.android.exoplayer2.demo I/MediaCodec: [OMX.qcom.video.decoder.avc.secure] setting surface generation to 31281180
2022-01-12 12:21:18.917 30548-31798/com.google.android.exoplayer2.demo D/SurfaceUtils: disconnecting from surface 0x7bc4be7110, reason connectToSurface(reconnect)
2022-01-12 12:21:18.917 30548-31798/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7bc4be7110, reason connectToSurface(reconnect)
2022-01-12 12:21:18.919 30548-31799/com.google.android.exoplayer2.demo E/SurfaceUtils: native window cannot handle protected buffers: the consumer should either be a hardware composer or support hardware protection
2022-01-12 12:21:18.919 30548-31798/com.google.android.exoplayer2.demo W/MediaCodec: error setting release surface: err = -1
2022-01-12 12:21:18.922 30548-30548/com.google.android.exoplayer2.demo D/EventLogger: videoDecoderReleased [eventTime=21.25, mediaPos=0.00, window=0, period=0, adGroup=1, ad=0, OMX.qcom.video.decoder.avc.secure]
2022-01-12 12:21:18.927 30548-31823/com.google.android.exoplayer2.demo I/OMXClient: IOmx service obtained
2022-01-12 12:21:18.944 30548-31822/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7bc4c02be0, reason connectToSurface
2022-01-12 12:21:18.945 30548-31822/com.google.android.exoplayer2.demo E/SurfaceUtils: Failed to connect to surface 0x7bc4c02be0, err -22
2022-01-12 12:21:18.945 30548-31822/com.google.android.exoplayer2.demo E/MediaCodec: nativeWindowConnect returned an error: Invalid argument (-22)
2022-01-12 12:21:18.946 30548-31723/com.google.android.exoplayer2.demo E/MediaCodec: configure failed with err 0xffffffea, resetting...
2022-01-12 12:21:18.952 30548-31823/com.google.android.exoplayer2.demo I/OMXClient: IOmx service obtained
2022-01-12 12:21:18.969 30548-31723/com.google.android.exoplayer2.demo W/MediaCodecRenderer: Failed to initialize decoder: OMX.qcom.video.decoder.avc
      java.lang.IllegalArgumentException
        at android.media.MediaCodec.native_configure(Native Method)
        at android.media.MediaCodec.configure(MediaCodec.java:2127)
        at android.media.MediaCodec.configure(MediaCodec.java:2043)
        at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:52)
        at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:103)
        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.reinitializeCodec(MediaCodecRenderer.java:2062)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.processEndOfStream(MediaCodecRenderer.java:1957)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1788)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:778)
        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:102)
        at android.os.Looper.loop(Looper.java:223)
        at android.os.HandlerThread.run(HandlerThread.java:67)
2022-01-12 12:21:18.973 30548-31723/com.google.android.exoplayer2.demo E/MediaCodecVideoRenderer: Video codec error
      com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(2, null, null, video/avc, avc1.42801F, -1, null, [1280, 720, 30.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.reinitializeCodec(MediaCodecRenderer.java:2062)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.processEndOfStream(MediaCodecRenderer.java:1957)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1788)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:778)
        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:102)
        at android.os.Looper.loop(Looper.java:223)
        at android.os.HandlerThread.run(HandlerThread.java:67)
     Caused by: java.lang.IllegalArgumentException
        at android.media.MediaCodec.native_configure(Native Method)
        at android.media.MediaCodec.configure(MediaCodec.java:2127)
        at android.media.MediaCodec.configure(MediaCodec.java:2043)
        at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:52)
        at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:103)
        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.reinitializeCodec(MediaCodecRenderer.java:2062) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.processEndOfStream(MediaCodecRenderer.java:1957) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1788) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:778) 
        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:102) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.os.HandlerThread.run(HandlerThread.java:67) 
2022-01-12 12:21:18.978 30548-31723/com.google.android.exoplayer2.demo E/ExoPlayerImplInternal: Playback error
      com.google.android.exoplayer2.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(2, null, null, video/avc, avc1.42801F, -1, null, [1280, 720, 30.0], [-1, -1]), format_supported=YES
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:562)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:223)
        at android.os.HandlerThread.run(HandlerThread.java:67)
     Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(2, null, null, video/avc, avc1.42801F, -1, null, [1280, 720, 30.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.reinitializeCodec(MediaCodecRenderer.java:2062)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.processEndOfStream(MediaCodecRenderer.java:1957)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1788)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:778)
        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:102) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.os.HandlerThread.run(HandlerThread.java:67) 
     Caused by: java.lang.IllegalArgumentException
        at android.media.MediaCodec.native_configure(Native Method)
        at android.media.MediaCodec.configure(MediaCodec.java:2127)
        at android.media.MediaCodec.configure(MediaCodec.java:2043)
        at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:52)
        at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:103)
        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.reinitializeCodec(MediaCodecRenderer.java:2062) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.processEndOfStream(MediaCodecRenderer.java:1957) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1788) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:778) 
        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:102) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.os.HandlerThread.run(HandlerThread.java:67) 
2022-01-12 12:21:18.983 30548-31820/com.google.android.exoplayer2.demo D/CCodecBuffers: [c2.android.aac.decoder#323:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 0
2022-01-12 12:21:18.983 30548-31820/com.google.android.exoplayer2.demo D/CCodecBuffers: [c2.android.aac.decoder#323:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 1
2022-01-12 12:21:18.983 30548-31820/com.google.android.exoplayer2.demo D/CCodecBuffers: [c2.android.aac.decoder#323:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 2
2022-01-12 12:21:18.983 30548-31820/com.google.android.exoplayer2.demo D/CCodecBuffers: [c2.android.aac.decoder#323:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 3
2022-01-12 12:21:18.983 30548-31820/com.google.android.exoplayer2.demo D/CCodecBuffers: [c2.android.aac.decoder#323:1D-Output.Impl[N]] Client returned a buffer it does not own according to our record: 4
2022-01-12 12:21:18.984 30548-31820/com.google.android.exoplayer2.demo I/CCodecConfig: query failed after returning 19 values (BAD_INDEX)
2022-01-12 12:21:18.984 30548-31820/com.google.android.exoplayer2.demo D/CCodecConfig: c2 config diff is   c2::i32 coding.drc.compression-mode.value = 3
2022-01-12 12:21:18.985 30548-31820/com.google.android.exoplayer2.demo W/Codec2Client: query -- param skipped: index = 1342179345.
2022-01-12 12:21:18.985 30548-31820/com.google.android.exoplayer2.demo W/Codec2Client: query -- param skipped: index = 2415921170.
2022-01-12 12:21:18.985 30548-31820/com.google.android.exoplayer2.demo W/Codec2Client: query -- param skipped: index = 1610614798.
2022-01-12 12:21:18.987 30548-31820/com.google.android.exoplayer2.demo D/CCodecBufferChannel: [c2.android.aac.decoder#323] MediaCodec discarded an unknown buffer
2022-01-12 12:21:18.987 30548-31820/com.google.android.exoplayer2.demo I/chatty: uid=10337(com.google.android.exoplayer2.demo) MediaCodec_loop identical 2 lines
2022-01-12 12:21:18.987 30548-31820/com.google.android.exoplayer2.demo D/CCodecBufferChannel: [c2.android.aac.decoder#323] MediaCodec discarded an unknown buffer
2022-01-12 12:21:18.987 30548-31820/com.google.android.exoplayer2.demo I/hw-BpHwBinder: onLastStrongRef automatically unlinking death recipients
2022-01-12 12:21:18.991 30548-31799/com.google.android.exoplayer2.demo D/SurfaceUtils: disconnecting from surface 0x7bc4bf1b60, reason pushBlankBuffersToNativeWindow
2022-01-12 12:21:18.992 30548-31799/com.google.android.exoplayer2.demo D/SurfaceUtils: set up nativeWindow 0x7bc4bf1b60 for 1x1, color 0x2, rotation 0, usage 0x930
2022-01-12 12:21:18.995 30548-31799/com.google.android.exoplayer2.demo D/SurfaceUtils: connecting to surface 0x7bc4bf1b60, reason pushBlankBuffersToNativeWindow(err2)
2022-01-12 12:21:18.996 30548-30548/com.google.android.exoplayer2.demo D/EventLogger: videoDisabled [eventTime=21.32, mediaPos=9.85, window=0, period=0]
2022-01-12 12:21:18.996 30548-30548/com.google.android.exoplayer2.demo D/EventLogger: audioDisabled [eventTime=21.32, mediaPos=9.85, window=0, period=0]
2022-01-12 12:21:18.996 30548-30548/com.google.android.exoplayer2.demo D/EventLogger: audioDecoderReleased [eventTime=21.32, mediaPos=0.00, window=0, period=0, adGroup=1, ad=0, c2.android.aac.decoder]
2022-01-12 12:21:18.998 30548-30548/com.google.android.exoplayer2.demo E/EventLogger: playerFailed [eventTime=21.32, mediaPos=0.00, window=0, period=0, adGroup=1, ad=0, errorCode=ERROR_CODE_DECODER_INIT_FAILED
      com.google.android.exoplayer2.ExoPlaybackException: MediaCodecVideoRenderer error, index=0, format=Format(2, null, null, video/avc, avc1.42801F, -1, null, [1280, 720, 30.0], [-1, -1]), format_supported=YES
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:562)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:223)
        at android.os.HandlerThread.run(HandlerThread.java:67)
     Caused by: com.google.android.exoplayer2.mediacodec.MediaCodecRenderer$DecoderInitializationException: Decoder init failed: OMX.qcom.video.decoder.avc, Format(2, null, null, video/avc, avc1.42801F, -1, null, [1280, 720, 30.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.reinitializeCodec(MediaCodecRenderer.java:2062)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.processEndOfStream(MediaCodecRenderer.java:1957)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1788)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:778)
        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:102) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.os.HandlerThread.run(HandlerThread.java:67) 
     Caused by: java.lang.IllegalArgumentException
        at android.media.MediaCodec.native_configure(Native Method)
        at android.media.MediaCodec.configure(MediaCodec.java:2127)
        at android.media.MediaCodec.configure(MediaCodec.java:2043)
        at com.google.android.exoplayer2.mediacodec.SynchronousMediaCodecAdapter$Factory.createAdapter(SynchronousMediaCodecAdapter.java:52)
        at com.google.android.exoplayer2.mediacodec.DefaultMediaCodecAdapterFactory.createAdapter(DefaultMediaCodecAdapterFactory.java:103)
        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.reinitializeCodec(MediaCodecRenderer.java:2062) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.processEndOfStream(MediaCodecRenderer.java:1957) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.drainOutputBuffer(MediaCodecRenderer.java:1788) 
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:778) 
        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:102) 
        at android.os.Looper.loop(Looper.java:223) 
        at android.os.HandlerThread.run(HandlerThread.java:67) 
    ]
2022-01-12 12:21:18.999 30548-30548/com.google.android.exoplayer2.demo D/EventLogger: loading [eventTime=21.32, mediaPos=9.85, window=0, period=0, false]
2022-01-12 12:21:18.999 30548-30548/com.google.android.exoplayer2.demo D/EventLogger: state [eventTime=21.32, mediaPos=9.85, window=0, period=0, IDLE]

ExoPlayer version number

  • 2.16.0

Android version

  • Android 11

Android device

  • Google Pixel 2 XL, Android 11
  • Xiaomi Redmi Note 10S, Android 11, MIUI 12.5.14
@icbaker
Copy link
Collaborator

icbaker commented Jan 12, 2022

This is a duplicate of #8696 (see snippet from bug report below). The root cause is device-specific (and it only started occurring on Android 11), but we've submitted a workaround to the library (linked at the bottom of that issue) that mitigates the issue. The workaround is available on the dev-v2 branch but not yet part of a maven-distributed release.

01-12 11:21:18.945 10337 30548 31822 E SurfaceUtils: Failed to connect to surface 0x7bc4c02be0, err -22
01-12 11:21:18.945 10337 30548 31822 E MediaCodec: nativeWindowConnect returned an error: Invalid argument (-22)

@antoniovm
Copy link
Author

Thank you very much @icbaker. May I ask you an estimation on when could it be released?

@google google locked and limited conversation to collaborators Mar 14, 2022
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Projects
None yet
Development

No branches or pull requests

2 participants