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

ExoPlayer NPE on playing DRM content #6951

Closed
Proxwian opened this issue Feb 6, 2020 · 5 comments
Closed

ExoPlayer NPE on playing DRM content #6951

Proxwian opened this issue Feb 6, 2020 · 5 comments
Assignees
Labels

Comments

@Proxwian
Copy link

Proxwian commented Feb 6, 2020

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

@AquilesCanta
Copy link
Contributor

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

@JoeyPapeYoui
Copy link

JoeyPapeYoui commented Feb 6, 2020

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.


exoMediaDrm is initialized and uninitialized here
@Override
public final void prepare() {
if (prepareCallsCount++ == 0) {
Assertions.checkState(exoMediaDrm == null);
exoMediaDrm = exoMediaDrmProvider.acquireExoMediaDrm(uuid);
exoMediaDrm.setOnEventListener(new MediaDrmEventListener());
}
}
@Override
public final void release() {
if (--prepareCallsCount == 0) {
Assertions.checkNotNull(exoMediaDrm).release();
exoMediaDrm = null;
}
}

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.

@AquilesCanta
Copy link
Contributor

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.

@harini113
Copy link

harini113 commented Feb 10, 2020

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?

kim-vde pushed a commit that referenced this issue Feb 11, 2020
@ojw28
Copy link
Contributor

ojw28 commented Feb 11, 2020

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

@ojw28 ojw28 closed this as completed Feb 11, 2020
ojw28 pushed a commit that referenced this issue Feb 13, 2020
@google google locked and limited conversation to collaborators Apr 12, 2020
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

5 participants