Merge pull request #1272 from stevemayhew:p-add-hook-for-load-error-handler

PiperOrigin-RevId: 625285300
This commit is contained in:
Copybara-Service 2024-04-16 04:48:27 -07:00
commit ea48fe579e
2 changed files with 23 additions and 3 deletions

View File

@ -19,6 +19,9 @@
* Metadata: * Metadata:
* Image: * Image:
* DRM: * DRM:
* Allow setting a `LoadErrorHandlingPolicy` on
`DefaultDrmSessionManagerProvider`
([#1271](https://github.com/androidx/media/issues/1271)).
* Effect: * Effect:
* Muxers: * Muxers:
* IMA extension: * IMA extension:

View File

@ -25,6 +25,7 @@ import androidx.media3.common.util.UnstableApi;
import androidx.media3.common.util.Util; import androidx.media3.common.util.Util;
import androidx.media3.datasource.DataSource; import androidx.media3.datasource.DataSource;
import androidx.media3.datasource.DefaultHttpDataSource; import androidx.media3.datasource.DefaultHttpDataSource;
import androidx.media3.exoplayer.upstream.LoadErrorHandlingPolicy;
import com.google.common.primitives.Ints; import com.google.common.primitives.Ints;
import java.util.Map; import java.util.Map;
import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.MonotonicNonNull;
@ -43,6 +44,7 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager
@Nullable private DataSource.Factory drmHttpDataSourceFactory; @Nullable private DataSource.Factory drmHttpDataSourceFactory;
@Nullable private String userAgent; @Nullable private String userAgent;
@Nullable private LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy;
public DefaultDrmSessionManagerProvider() { public DefaultDrmSessionManagerProvider() {
lock = new Object(); lock = new Object();
@ -69,6 +71,18 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager
this.userAgent = userAgent; this.userAgent = userAgent;
} }
/**
* Sets a load error handling policy to pass to {@link
* DefaultDrmSessionManager.Builder#setLoadErrorHandlingPolicy(LoadErrorHandlingPolicy)}.
*
* <p>If {@code null} is passed the setter is not called, so the default {@link
* LoadErrorHandlingPolicy} defined by {@link DefaultDrmSessionManager.Builder#Builder()} is used
* instead.
*/
public void setDrmLoadErrorHandlingPolicy(LoadErrorHandlingPolicy drmLoadErrorHandlingPolicy) {
this.drmLoadErrorHandlingPolicy = drmLoadErrorHandlingPolicy;
}
@Override @Override
public DrmSessionManager get(MediaItem mediaItem) { public DrmSessionManager get(MediaItem mediaItem) {
checkNotNull(mediaItem.localConfiguration); checkNotNull(mediaItem.localConfiguration);
@ -100,15 +114,18 @@ public final class DefaultDrmSessionManagerProvider implements DrmSessionManager
for (Map.Entry<String, String> entry : drmConfiguration.licenseRequestHeaders.entrySet()) { for (Map.Entry<String, String> entry : drmConfiguration.licenseRequestHeaders.entrySet()) {
httpDrmCallback.setKeyRequestProperty(entry.getKey(), entry.getValue()); httpDrmCallback.setKeyRequestProperty(entry.getKey(), entry.getValue());
} }
DefaultDrmSessionManager drmSessionManager = DefaultDrmSessionManager.Builder drmSessionManagerBuilder =
new DefaultDrmSessionManager.Builder() new DefaultDrmSessionManager.Builder()
.setUuidAndExoMediaDrmProvider( .setUuidAndExoMediaDrmProvider(
drmConfiguration.scheme, FrameworkMediaDrm.DEFAULT_PROVIDER) drmConfiguration.scheme, FrameworkMediaDrm.DEFAULT_PROVIDER)
.setMultiSession(drmConfiguration.multiSession) .setMultiSession(drmConfiguration.multiSession)
.setPlayClearSamplesWithoutKeys(drmConfiguration.playClearContentWithoutKey) .setPlayClearSamplesWithoutKeys(drmConfiguration.playClearContentWithoutKey)
.setUseDrmSessionsForClearContent( .setUseDrmSessionsForClearContent(
Ints.toArray(drmConfiguration.forcedSessionTrackTypes)) Ints.toArray(drmConfiguration.forcedSessionTrackTypes));
.build(httpDrmCallback); if (drmLoadErrorHandlingPolicy != null) {
drmSessionManagerBuilder.setLoadErrorHandlingPolicy(drmLoadErrorHandlingPolicy);
}
DefaultDrmSessionManager drmSessionManager = drmSessionManagerBuilder.build(httpDrmCallback);
drmSessionManager.setMode(MODE_PLAYBACK, drmConfiguration.getKeySetId()); drmSessionManager.setMode(MODE_PLAYBACK, drmConfiguration.getKeySetId());
return drmSessionManager; return drmSessionManager;
} }