From 566c0b3eea21c5cc002ac449af17c4b673e54803 Mon Sep 17 00:00:00 2001 From: Steve Mayhew Date: Thu, 11 Apr 2024 09:25:25 -0700 Subject: [PATCH 1/4] 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; } From 001ebb68f30e328039ca57cec0770d0cc82443e8 Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Tue, 16 Apr 2024 11:42:15 +0100 Subject: [PATCH 2/4] Formatting, nullness and javadoc rewording --- .../exoplayer/drm/DefaultDrmSessionManagerProvider.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 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 3df5a2f204..8607649843 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 @@ -44,7 +44,7 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager @Nullable private DataSource.Factory drmHttpDataSourceFactory; @Nullable private String userAgent; - private LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy; + @Nullable private LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy; public DefaultDrmSessionManagerProvider() { lock = new Object(); @@ -72,10 +72,11 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager } /** - * Set a load error handling policy to user for the {@link DefaultDrmSessionManager}'s created - * by this provider + * Sets a load error handling policy to pass to {@link + * DefaultDrmSessionManager.Builder#setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)}. * - * @param drmLoadErrorHandlingPolicy - LoadErrorHandlingPolicy for DRM session management + *

If {@code null} is passed the setter is not called, so the default {@link + * LoadErrorHandlingPolicy} defined by {@link DefaultDrmSessionManager.Builder()} is used instead. */ public void setDrmLoadErrorHandlingPolicy(LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy) { this.drmLoadErrorHandlingPolicy = drmLoadErrorHandlingPolicy; From 5fd1dc2e4efbbf75a52a6f3f8b168c815fca458d Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Tue, 16 Apr 2024 11:44:07 +0100 Subject: [PATCH 3/4] Add release note --- RELEASENOTES.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 95557fec2f..718bb35eb0 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -19,6 +19,9 @@ * Metadata: * Image: * DRM: + * Allow setting a `LoadErrorHandlingPolicy` on + `DefaultDrmSessionManagerProvider` + ([#1271](https://github.com/androidx/media/issues/1271)). * Effect: * Muxers: * IMA extension: From e13d7e632ee5812c934206f3075075ea6a28b952 Mon Sep 17 00:00:00 2001 From: Ian Baker Date: Tue, 16 Apr 2024 11:49:06 +0100 Subject: [PATCH 4/4] Fix javadoc link reference --- .../media3/exoplayer/drm/DefaultDrmSessionManagerProvider.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) 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 8607649843..ad6ad520b3 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 @@ -76,7 +76,8 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager * DefaultDrmSessionManager.Builder#setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)}. * *

If {@code null} is passed the setter is not called, so the default {@link - * LoadErrorHandlingPolicy} defined by {@link DefaultDrmSessionManager.Builder()} is used instead. + * LoadErrorHandlingPolicy} defined by {@link DefaultDrmSessionManager.Builder#Builder()} is used + * instead. */ public void setDrmLoadErrorHandlingPolicy(LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy) { this.drmLoadErrorHandlingPolicy = drmLoadErrorHandlingPolicy;