ExoPlayer NPE on playing DRM content

Created on 6 Feb 2020  路  5Comments  路  Source: google/ExoPlayer

Getting stacktrace below when trying to play DRM video on Android TV api ver 28

Version of ExoPlayer being used: 2.11.1

Stacktrace:

E/ExoPlayerImplInternal: Internal runtime error.
    java.lang.NullPointerException
        at com.google.android.exoplayer2.util.Assertions.checkNotNull(Assertions.java:147)
        at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.createNewDefaultSession(DefaultDrmSessionManager.java:563)
        at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.acquireSession(DefaultDrmSessionManager.java:530)
        at com.google.android.exoplayer2.BaseRenderer.getUpdatedSourceDrmSession(BaseRenderer.java:322)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1235)
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:755)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:801)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:700)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:193)
        at android.os.HandlerThread.run(HandlerThread.java:65)`

`E/EventLogger: playerFailed [eventTime=1.15, mediaPos=0.00, window=0, period=0]
    com.google.android.exoplayer2.ExoPlaybackException: java.lang.NullPointerException
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:401)
        at android.os.Handler.dispatchMessage(Handler.java:102)
        at android.os.Looper.loop(Looper.java:193)
        at android.os.HandlerThread.run(HandlerThread.java:65)
     Caused by: java.lang.NullPointerException
        at com.google.android.exoplayer2.util.Assertions.checkNotNull(Assertions.java:147)
        at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.createNewDefaultSession(DefaultDrmSessionManager.java:563)
        at com.google.android.exoplayer2.drm.DefaultDrmSessionManager.acquireSession(DefaultDrmSessionManager.java:530)
        at com.google.android.exoplayer2.BaseRenderer.getUpdatedSourceDrmSession(BaseRenderer.java:322)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.onInputFormatChanged(MediaCodecRenderer.java:1235)
        at com.google.android.exoplayer2.video.MediaCodecVideoRenderer.onInputFormatChanged(MediaCodecVideoRenderer.java:755)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.readToFlagsOnlyBuffer(MediaCodecRenderer.java:801)
        at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:700)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:599)
        at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:329)
        at android.os.Handler.dispatchMessage(Handler.java:102)聽
        at android.os.Looper.loop(Looper.java:193)聽
        at android.os.HandlerThread.run(HandlerThread.java:65)

Seems like some parameter excepted as not-null in Kotlin is null, but i can't see which exactly

bug

All 5 comments

Can you provide repro steps for this in the demo app?

I encountered this issue as well today after upgrading from 2.9.6 to 2.11.1. It looks like this is the check that's causing an issue.
https://github.com/google/ExoPlayer/blob/76962d50f1d80941d6768e4e765fa4ff010705e7/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java#L563
exoMediaDrm is initialized and uninitialized here
https://github.com/google/ExoPlayer/blob/76962d50f1d80941d6768e4e765fa4ff010705e7/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java#L424-L439
So I was able to get around it by calling prepare when my stream is prepared, and release when my stream is stopped, on my instance of DrmSessionManager, both calls that I didn't have to make before the upgrade.
Hope this helps you find a workaround, or resolve the cause of the issue.

You can fix this without waiting for an update by migrating off APIs that inject DRM Session Manager into the renderers. In your case, I suspect you are using a DefaultRenderersFactory that takes a DrmSessionManager as parameter. You should inject that DrmSessionManager into the MediaSources instead. Please let me know if that works for you.

Hi, I have the same issue. Is there fix available for this? If this has been addressed in 2.11.2, where can I find the .aar files?

@harini113 - A way to fix this is described in the post directly above your question. A fix will also be included in 2.11.2 (it's not available yet; it will be available later this week).

Was this page helpful?
0 / 5 - 0 ratings