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
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).