From 566c0b3eea21c5cc002ac449af17c4b673e54803 Mon Sep 17 00:00:00 2001 From: Steve Mayhew Date: Thu, 11 Apr 2024 09:25:25 -0700 Subject: [PATCH] Allows setting LoadErrorHandlingPolicy for DRM The `DefaultDrmSessionManager` allows setting this policy. This change simply plumbs the setting up to the `DefaultDrmSessionManagerProvider` --- .../drm/DefaultDrmSessionManagerProvider.java | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSessionManagerProvider.java b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSessionManagerProvider.java index e015f93a50..3df5a2f204 100644 --- a/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSessionManagerProvider.java +++ b/libraries/exoplayer/src/main/java/androidx/media3/exoplayer/drm/DefaultDrmSessionManagerProvider.java @@ -25,6 +25,7 @@ import androidx.media3.common.util.UnstableApi; import androidx.media3.common.util.Util; import androidx.media3.datasource.DataSource; import androidx.media3.datasource.DefaultHttpDataSource; +import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy; import com.google.common.primitives.Ints; import java.util.Map; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; @@ -43,6 +44,7 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager @Nullable private DataSource.Factory drmHttpDataSourceFactory; @Nullable private String userAgent; + private LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy; public DefaultDrmSessionManagerProvider() { lock = new Object(); @@ -69,6 +71,16 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager this.userAgent = userAgent; } + /** + * Set a load error handling policy to user for the {@link DefaultDrmSessionManager}'s created + * by this provider + * + * @param drmLoadErrorHandlingPolicy - LoadErrorHandlingPolicy for DRM session management + */ + public void setDrmLoadErrorHandlingPolicy(LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy) { + this.drmLoadErrorHandlingPolicy = drmLoadErrorHandlingPolicy; + } + @Override public DrmSessionManager get(MediaItem mediaItem) { checkNotNull(mediaItem.localConfiguration); @@ -100,15 +112,18 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager for (Map.Entry entry : drmConfiguration.licenseRequestHeaders.entrySet()) { httpDrmCallback.setKeyRequestProperty(entry.getKey(), entry.getValue()); } - DefaultDrmSessionManager drmSessionManager = + DefaultDrmSessionManager.Builder drmSessionManagerBuilder = new DefaultDrmSessionManager.Builder() .setUuidAndExoMediaDrmProvider( drmConfiguration.scheme, FrameworkMediaDrm.DEFAULT_PROVIDER) .setMultiSession(drmConfiguration.multiSession) .setPlayClearSamplesWithoutKeys(drmConfiguration.playClearContentWithoutKey) .setUseDrmSessionsForClearContent( - Ints.toArray(drmConfiguration.forcedSessionTrackTypes)) - .build(httpDrmCallback); + Ints.toArray(drmConfiguration.forcedSessionTrackTypes)); + if (drmLoadErrorHandlingPolicy != null) { + drmSessionManagerBuilder.setLoadErrorHandlingPolicy(drmLoadErrorHandlingPolicy); + } + DefaultDrmSessionManager drmSessionManager = drmSessionManagerBuilder.build(httpDrmCallback); drmSessionManager.setMode(MODE_PLAYBACK, drmConfiguration.getKeySetId()); return drmSessionManager; }