diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java index 029b41fde8..cff9f9da0f 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java @@ -98,21 +98,22 @@ public class DefaultDrmSessionManager implements DrmSe /** Releases an existing offline license. */ public static final int MODE_RELEASE = 3; + private final UUID uuid; + private final ExoMediaDrm mediaDrm; + private final MediaDrmCallback callback; + private final HashMap optionalKeyRequestParameters; private final Handler eventHandler; private final EventListener eventListener; - private final ExoMediaDrm mediaDrm; - private final HashMap optionalKeyRequestParameters; - private final MediaDrmCallback callback; - private final UUID uuid; private final boolean multiSession; + private final List> sessions; + private final AtomicBoolean provisioningInProgress; + private Looper playbackLooper; private int mode; private byte[] offlineLicenseKeySetId; - private final List> sessions; - private final AtomicBoolean provisioningInProgress; - /* package */ MediaDrmHandler mediaDrmHandler; + /* package */ volatile MediaDrmHandler mediaDrmHandler; /** * Instantiates a new instance using the Widevine scheme. @@ -226,6 +227,7 @@ public class DefaultDrmSessionManager implements DrmSe if (multiSession) { mediaDrm.setPropertyString("sessionSharing", "enable"); } + mediaDrm.setOnEventListener(new MediaDrmEventListener()); } /** @@ -334,8 +336,9 @@ public class DefaultDrmSessionManager implements DrmSe Assertions.checkState(this.playbackLooper == null || this.playbackLooper == playbackLooper); if (sessions.isEmpty()) { this.playbackLooper = playbackLooper; - mediaDrmHandler = new MediaDrmHandler(playbackLooper); - mediaDrm.setOnEventListener(new MediaDrmEventListener()); + if (mediaDrmHandler == null) { + mediaDrmHandler = new MediaDrmHandler(playbackLooper); + } } DefaultDrmSession session = null; @@ -383,13 +386,6 @@ public class DefaultDrmSessionManager implements DrmSe if (drmSession.release()) { sessions.remove(drmSession); } - - if (sessions.isEmpty()) { - mediaDrm.setOnEventListener(null); - mediaDrmHandler.removeCallbacksAndMessages(null); - mediaDrmHandler = null; - playbackLooper = null; - } } @Override