From 50efd86619474bca335c3eaf6917ca5e155befcc Mon Sep 17 00:00:00 2001 From: ibaker Date: Thu, 10 Mar 2022 11:45:54 +0000 Subject: [PATCH] Rollback of https://github.com/androidx/media/commit/d5482fe3432f0a2e034d4a8579cc05a5e229ea4d *** Original commit *** Don't call MediaDrm.setLogSessionId in FrameworkMediaDrm This method throws an UnsupportedOperationException on some Android 12 devices. *** PiperOrigin-RevId: 433708582 --- .../exoplayer/drm/FrameworkMediaDrm.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java index cce784d0f5..9489014fea 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/FrameworkMediaDrm.java @@ -15,6 +15,8 @@ */ package androidx.media3.exoplayer.drm; +import static androidx.media3.common.util.Assertions.checkNotNull; + import android.annotation.SuppressLint; import android.media.DeniedByServerException; import android.media.MediaCrypto; @@ -23,6 +25,7 @@ import android.media.MediaDrm; import android.media.MediaDrmException; import android.media.NotProvisionedException; import android.media.UnsupportedSchemeException; +import android.media.metrics.LogSessionId; import android.os.PersistableBundle; import android.text.TextUtils; import androidx.annotation.DoNotInline; @@ -188,7 +191,13 @@ public final class FrameworkMediaDrm implements ExoMediaDrm { @Override public void setPlayerIdForSession(byte[] sessionId, PlayerId playerId) { - // TODO(b/221032172): Implement this when CDM compatibility issues are resolved. + if (Util.SDK_INT >= 31) { + try { + Api31.setLogSessionIdOnMediaDrmSession(mediaDrm, sessionId, playerId); + } catch (UnsupportedOperationException e) { + Log.w(TAG, "setLogSessionId failed."); + } + } } // Return values of MediaDrm.KeyRequest.getRequestType are equal to KeyRequest.RequestType. @@ -518,5 +527,16 @@ public final class FrameworkMediaDrm implements ExoMediaDrm { public static boolean requiresSecureDecoder(MediaDrm mediaDrm, String mimeType) { return mediaDrm.requiresSecureDecoder(mimeType); } + + @DoNotInline + public static void setLogSessionIdOnMediaDrmSession( + MediaDrm mediaDrm, byte[] drmSessionId, PlayerId playerId) { + LogSessionId logSessionId = playerId.getLogSessionId(); + if (!logSessionId.equals(LogSessionId.LOG_SESSION_ID_NONE)) { + MediaDrm.PlaybackComponent playbackComponent = + checkNotNull(mediaDrm.getPlaybackComponent(drmSessionId)); + playbackComponent.setLogSessionId(logSessionId); + } + } } }