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); + } + } } }