Merge pull request #1272 from stevemayhew:p-add-hook-for-load-error-handler
PiperOrigin-RevId: 625285300
This commit is contained in:
commit
ea48fe579e
@ -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:
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user