mirror of
https://github.com/samsonjs/media.git
synced 2026-03-27 09:45:47 +00:00
Make defaultLicenseUrl optional
Some content types always provide the license URL in the media. The PlayReady example in the demo app doesn't provide a default license URL for this reason, as an example. #minor-release PiperOrigin-RevId: 340125784
This commit is contained in:
parent
32b710712e
commit
c1dc802050
3 changed files with 35 additions and 19 deletions
|
|
@ -231,7 +231,7 @@ public final class MediaItem {
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets the optional DRM license server URI. If this URI is set, the {@link
|
||||
* Sets the optional default DRM license server URI. If this URI is set, the {@link
|
||||
* DrmConfiguration#uuid} needs to be specified as well.
|
||||
*
|
||||
* <p>If {@link #setUri} is passed a non-null {@code uri}, the DRM license server URI is used to
|
||||
|
|
@ -243,7 +243,7 @@ public final class MediaItem {
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets the optional DRM license server URI. If this URI is set, the {@link
|
||||
* Sets the optional default DRM license server URI. If this URI is set, the {@link
|
||||
* DrmConfiguration#uuid} needs to be specified as well.
|
||||
*
|
||||
* <p>If {@link #setUri} is passed a non-null {@code uri}, the DRM license server URI is used to
|
||||
|
|
@ -294,8 +294,8 @@ public final class MediaItem {
|
|||
}
|
||||
|
||||
/**
|
||||
* Sets whether to use the DRM license server URI of the media item for key requests that
|
||||
* include their own DRM license server URI.
|
||||
* Sets whether to force use the default DRM license server URI even if the media specifies its
|
||||
* own DRM license server URI.
|
||||
*
|
||||
* <p>If {@link #setUri} is passed a non-null {@code uri}, the DRM force default license flag is
|
||||
* used to create a {@link PlaybackProperties} object. Otherwise it will be ignored.
|
||||
|
|
@ -568,8 +568,8 @@ public final class MediaItem {
|
|||
public final UUID uuid;
|
||||
|
||||
/**
|
||||
* Optional DRM license server {@link Uri}. If {@code null} then the DRM license server must be
|
||||
* specified by the media.
|
||||
* Optional default DRM license server {@link Uri}. If {@code null} then the DRM license server
|
||||
* must be specified by the media.
|
||||
*/
|
||||
@Nullable public final Uri licenseUri;
|
||||
|
||||
|
|
@ -586,8 +586,8 @@ public final class MediaItem {
|
|||
public final boolean playClearContentWithoutKey;
|
||||
|
||||
/**
|
||||
* Sets whether to use the DRM license server URI of the media item for key requests that
|
||||
* include their own DRM license server URI.
|
||||
* Whether to force use of {@link #licenseUri} even if the media specifies its own DRM license
|
||||
* server URI.
|
||||
*/
|
||||
public final boolean forceDefaultLicenseUri;
|
||||
|
||||
|
|
@ -605,6 +605,7 @@ public final class MediaItem {
|
|||
boolean playClearContentWithoutKey,
|
||||
List<Integer> drmSessionForClearTypes,
|
||||
@Nullable byte[] keySetId) {
|
||||
Assertions.checkArgument(!(forceDefaultLicenseUri && licenseUri == null));
|
||||
this.uuid = uuid;
|
||||
this.licenseUri = licenseUri;
|
||||
this.requestHeaders = requestHeaders;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@
|
|||
*/
|
||||
package com.google.android.exoplayer2.drm;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.C;
|
||||
|
|
@ -27,6 +28,7 @@ import com.google.android.exoplayer2.upstream.HttpDataSource.InvalidResponseCode
|
|||
import com.google.android.exoplayer2.upstream.StatsDataSource;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
|
|
@ -39,29 +41,35 @@ public final class HttpMediaDrmCallback implements MediaDrmCallback {
|
|||
private static final int MAX_MANUAL_REDIRECTS = 5;
|
||||
|
||||
private final HttpDataSource.Factory dataSourceFactory;
|
||||
private final String defaultLicenseUrl;
|
||||
@Nullable private final String defaultLicenseUrl;
|
||||
private final boolean forceDefaultLicenseUrl;
|
||||
private final Map<String, String> keyRequestProperties;
|
||||
|
||||
/**
|
||||
* @param defaultLicenseUrl The default license URL. Used for key requests that do not specify
|
||||
* their own license URL.
|
||||
* their own license URL. May be {@code null} if it's known that all key requests will specify
|
||||
* their own URLs.
|
||||
* @param dataSourceFactory A factory from which to obtain {@link HttpDataSource} instances.
|
||||
*/
|
||||
public HttpMediaDrmCallback(String defaultLicenseUrl, HttpDataSource.Factory dataSourceFactory) {
|
||||
public HttpMediaDrmCallback(
|
||||
@Nullable String defaultLicenseUrl, HttpDataSource.Factory dataSourceFactory) {
|
||||
this(defaultLicenseUrl, /* forceDefaultLicenseUrl= */ false, dataSourceFactory);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param defaultLicenseUrl The default license URL. Used for key requests that do not specify
|
||||
* their own license URL, or for all key requests if {@code forceDefaultLicenseUrl} is
|
||||
* set to true.
|
||||
* @param forceDefaultLicenseUrl Whether to use {@code defaultLicenseUrl} for key requests that
|
||||
* include their own license URL.
|
||||
* their own license URL, or for all key requests if {@code forceDefaultLicenseUrl} is set to
|
||||
* true. May be {@code null} if {@code forceDefaultLicenseUrl} is {@code false} and if it's
|
||||
* known that all key requests will specify their own URLs.
|
||||
* @param forceDefaultLicenseUrl Whether to force use of {@code defaultLicenseUrl} for key
|
||||
* requests that include their own license URL.
|
||||
* @param dataSourceFactory A factory from which to obtain {@link HttpDataSource} instances.
|
||||
*/
|
||||
public HttpMediaDrmCallback(String defaultLicenseUrl, boolean forceDefaultLicenseUrl,
|
||||
public HttpMediaDrmCallback(
|
||||
@Nullable String defaultLicenseUrl,
|
||||
boolean forceDefaultLicenseUrl,
|
||||
HttpDataSource.Factory dataSourceFactory) {
|
||||
Assertions.checkArgument(!(forceDefaultLicenseUrl && TextUtils.isEmpty(defaultLicenseUrl)));
|
||||
this.dataSourceFactory = dataSourceFactory;
|
||||
this.defaultLicenseUrl = defaultLicenseUrl;
|
||||
this.forceDefaultLicenseUrl = forceDefaultLicenseUrl;
|
||||
|
|
@ -121,6 +129,14 @@ public final class HttpMediaDrmCallback implements MediaDrmCallback {
|
|||
if (forceDefaultLicenseUrl || TextUtils.isEmpty(url)) {
|
||||
url = defaultLicenseUrl;
|
||||
}
|
||||
if (TextUtils.isEmpty(url)) {
|
||||
throw new MediaDrmCallbackException(
|
||||
new DataSpec.Builder().setUri(Uri.EMPTY).build(),
|
||||
Uri.EMPTY,
|
||||
/* responseHeaders= */ ImmutableMap.of(),
|
||||
/* bytesLoaded= */ 0,
|
||||
/* cause= */ new IllegalStateException("No license URL"));
|
||||
}
|
||||
Map<String, String> requestProperties = new HashMap<>();
|
||||
// Add standard request properties for supported schemes.
|
||||
String contentType = C.PLAYREADY_UUID.equals(uuid) ? "text/xml"
|
||||
|
|
|
|||
|
|
@ -17,7 +17,6 @@ package com.google.android.exoplayer2.source;
|
|||
|
||||
import static com.google.android.exoplayer2.ExoPlayerLibraryInfo.DEFAULT_USER_AGENT;
|
||||
import static com.google.android.exoplayer2.drm.DefaultDrmSessionManager.MODE_PLAYBACK;
|
||||
import static com.google.android.exoplayer2.util.Util.castNonNull;
|
||||
|
||||
import androidx.annotation.Nullable;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
|
|
@ -68,7 +67,7 @@ public final class MediaSourceDrmHelper {
|
|||
Assertions.checkNotNull(mediaItem.playbackProperties);
|
||||
@Nullable
|
||||
MediaItem.DrmConfiguration drmConfiguration = mediaItem.playbackProperties.drmConfiguration;
|
||||
if (drmConfiguration == null || drmConfiguration.licenseUri == null || Util.SDK_INT < 18) {
|
||||
if (drmConfiguration == null || Util.SDK_INT < 18) {
|
||||
return DrmSessionManager.getDummyDrmSessionManager();
|
||||
}
|
||||
HttpDataSource.Factory dataSourceFactory =
|
||||
|
|
@ -77,7 +76,7 @@ public final class MediaSourceDrmHelper {
|
|||
: new DefaultHttpDataSourceFactory(userAgent != null ? userAgent : DEFAULT_USER_AGENT);
|
||||
HttpMediaDrmCallback httpDrmCallback =
|
||||
new HttpMediaDrmCallback(
|
||||
castNonNull(drmConfiguration.licenseUri).toString(),
|
||||
drmConfiguration.licenseUri == null ? null : drmConfiguration.licenseUri.toString(),
|
||||
drmConfiguration.forceDefaultLicenseUri,
|
||||
dataSourceFactory);
|
||||
for (Map.Entry<String, String> entry : drmConfiguration.requestHeaders.entrySet()) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue