Use the new MediaItem.Builder#setDrmConfiguration method
PiperOrigin-RevId: 397290953
This commit is contained in:
parent
73aece6356
commit
13827186aa
@ -65,8 +65,10 @@ import java.util.List;
|
||||
.setMediaMetadata(
|
||||
new MediaMetadata.Builder().setTitle("Widevine DASH cenc: Tears").build())
|
||||
.setMimeType(MIME_TYPE_DASH)
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmLicenseUri("https://proxy.uat.widevine.com/proxy?provider=widevine_test")
|
||||
.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||
.setLicenseUri("https://proxy.uat.widevine.com/proxy?provider=widevine_test")
|
||||
.build())
|
||||
.build());
|
||||
samples.add(
|
||||
new MediaItem.Builder()
|
||||
@ -74,8 +76,10 @@ import java.util.List;
|
||||
.setMediaMetadata(
|
||||
new MediaMetadata.Builder().setTitle("Widevine DASH cbc1: Tears").build())
|
||||
.setMimeType(MIME_TYPE_DASH)
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmLicenseUri("https://proxy.uat.widevine.com/proxy?provider=widevine_test")
|
||||
.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||
.setLicenseUri("https://proxy.uat.widevine.com/proxy?provider=widevine_test")
|
||||
.build())
|
||||
.build());
|
||||
samples.add(
|
||||
new MediaItem.Builder()
|
||||
@ -83,8 +87,10 @@ import java.util.List;
|
||||
.setMediaMetadata(
|
||||
new MediaMetadata.Builder().setTitle("Widevine DASH cbcs: Tears").build())
|
||||
.setMimeType(MIME_TYPE_DASH)
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmLicenseUri("https://proxy.uat.widevine.com/proxy?provider=widevine_test")
|
||||
.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||
.setLicenseUri("https://proxy.uat.widevine.com/proxy?provider=widevine_test")
|
||||
.build())
|
||||
.build());
|
||||
|
||||
SAMPLES = Collections.unmodifiableList(samples);
|
||||
|
@ -26,12 +26,12 @@ import com.google.android.exoplayer2.MediaItem;
|
||||
import com.google.android.exoplayer2.MediaMetadata;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/** Util to read from and populate an intent. */
|
||||
public class IntentUtil {
|
||||
@ -162,16 +162,20 @@ public class IntentUtil {
|
||||
headers.put(keyRequestPropertiesArray[i], keyRequestPropertiesArray[i + 1]);
|
||||
}
|
||||
}
|
||||
builder
|
||||
.setDrmUuid(Util.getDrmUuid(Util.castNonNull(drmSchemeExtra)))
|
||||
.setDrmLicenseUri(intent.getStringExtra(DRM_LICENSE_URI_EXTRA + extrasKeySuffix))
|
||||
.setDrmMultiSession(
|
||||
intent.getBooleanExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, false))
|
||||
.setDrmForceDefaultLicenseUri(
|
||||
intent.getBooleanExtra(DRM_FORCE_DEFAULT_LICENSE_URI_EXTRA + extrasKeySuffix, false))
|
||||
.setDrmLicenseRequestHeaders(headers);
|
||||
if (intent.getBooleanExtra(DRM_SESSION_FOR_CLEAR_CONTENT + extrasKeySuffix, false)) {
|
||||
builder.setDrmSessionForClearTypes(ImmutableList.of(C.TRACK_TYPE_VIDEO, C.TRACK_TYPE_AUDIO));
|
||||
@Nullable UUID drmUuid = Util.getDrmUuid(Util.castNonNull(drmSchemeExtra));
|
||||
if (drmUuid != null) {
|
||||
builder.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(drmUuid)
|
||||
.setLicenseUri(intent.getStringExtra(DRM_LICENSE_URI_EXTRA + extrasKeySuffix))
|
||||
.setMultiSession(
|
||||
intent.getBooleanExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, false))
|
||||
.setForceDefaultLicenseUri(
|
||||
intent.getBooleanExtra(
|
||||
DRM_FORCE_DEFAULT_LICENSE_URI_EXTRA + extrasKeySuffix, false))
|
||||
.setLicenseRequestHeaders(headers)
|
||||
.setSessionForClearPeriods(
|
||||
intent.getBooleanExtra(DRM_SESSION_FOR_CLEAR_CONTENT + extrasKeySuffix, false))
|
||||
.build());
|
||||
}
|
||||
return builder;
|
||||
}
|
||||
|
@ -504,9 +504,17 @@ public class PlayerActivity extends AppCompatActivity
|
||||
.setUri(downloadRequest.uri)
|
||||
.setCustomCacheKey(downloadRequest.customCacheKey)
|
||||
.setMimeType(downloadRequest.mimeType)
|
||||
.setStreamKeys(downloadRequest.streamKeys)
|
||||
.setDrmKeySetId(downloadRequest.keySetId)
|
||||
.setDrmLicenseRequestHeaders(getDrmRequestHeaders(item));
|
||||
.setStreamKeys(downloadRequest.streamKeys);
|
||||
@Nullable
|
||||
MediaItem.DrmConfiguration drmConfiguration = item.playbackProperties.drmConfiguration;
|
||||
if (drmConfiguration != null) {
|
||||
builder.setDrmConfiguration(
|
||||
drmConfiguration
|
||||
.buildUpon()
|
||||
.setKeySetId(downloadRequest.keySetId)
|
||||
.setLicenseRequestHeaders(getDrmRequestHeaders(item))
|
||||
.build());
|
||||
}
|
||||
|
||||
mediaItems.add(builder.build());
|
||||
} else {
|
||||
|
@ -43,7 +43,6 @@ import android.widget.Toast;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.MediaItem;
|
||||
import com.google.android.exoplayer2.MediaMetadata;
|
||||
import com.google.android.exoplayer2.ParserException;
|
||||
@ -54,7 +53,7 @@ import com.google.android.exoplayer2.upstream.DataSourceInputStream;
|
||||
import com.google.android.exoplayer2.upstream.DataSpec;
|
||||
import com.google.android.exoplayer2.util.Log;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
import com.google.common.collect.ImmutableList;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import java.io.IOException;
|
||||
import java.io.InputStream;
|
||||
import java.io.InputStreamReader;
|
||||
@ -64,6 +63,7 @@ import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.UUID;
|
||||
|
||||
/** An activity for selecting from a list of media samples. */
|
||||
public class SampleChooserActivity extends AppCompatActivity
|
||||
@ -345,6 +345,12 @@ public class SampleChooserActivity extends AppCompatActivity
|
||||
Uri subtitleUri = null;
|
||||
String subtitleMimeType = null;
|
||||
String subtitleLanguage = null;
|
||||
UUID drmUuid = null;
|
||||
String drmLicenseUri = null;
|
||||
ImmutableMap<String, String> drmLicenseRequestHeaders = null;
|
||||
boolean drmSessionForClearContent = false;
|
||||
boolean drmMultiSession = false;
|
||||
boolean drmForceDefaultLicenseUri = false;
|
||||
|
||||
MediaItem.Builder mediaItem = new MediaItem.Builder();
|
||||
reader.beginObject();
|
||||
@ -370,11 +376,11 @@ public class SampleChooserActivity extends AppCompatActivity
|
||||
mediaItem.setAdTagUri(reader.nextString());
|
||||
break;
|
||||
case "drm_scheme":
|
||||
mediaItem.setDrmUuid(Util.getDrmUuid(reader.nextString()));
|
||||
drmUuid = Util.getDrmUuid(reader.nextString());
|
||||
break;
|
||||
case "drm_license_uri":
|
||||
case "drm_license_url": // For backward compatibility only.
|
||||
mediaItem.setDrmLicenseUri(reader.nextString());
|
||||
drmLicenseUri = reader.nextString();
|
||||
break;
|
||||
case "drm_key_request_properties":
|
||||
Map<String, String> requestHeaders = new HashMap<>();
|
||||
@ -383,19 +389,16 @@ public class SampleChooserActivity extends AppCompatActivity
|
||||
requestHeaders.put(reader.nextName(), reader.nextString());
|
||||
}
|
||||
reader.endObject();
|
||||
mediaItem.setDrmLicenseRequestHeaders(requestHeaders);
|
||||
drmLicenseRequestHeaders = ImmutableMap.copyOf(requestHeaders);
|
||||
break;
|
||||
case "drm_session_for_clear_content":
|
||||
if (reader.nextBoolean()) {
|
||||
mediaItem.setDrmSessionForClearTypes(
|
||||
ImmutableList.of(C.TRACK_TYPE_VIDEO, C.TRACK_TYPE_AUDIO));
|
||||
}
|
||||
drmSessionForClearContent = reader.nextBoolean();
|
||||
break;
|
||||
case "drm_multi_session":
|
||||
mediaItem.setDrmMultiSession(reader.nextBoolean());
|
||||
drmMultiSession = reader.nextBoolean();
|
||||
break;
|
||||
case "drm_force_default_license_uri":
|
||||
mediaItem.setDrmForceDefaultLicenseUri(reader.nextBoolean());
|
||||
drmForceDefaultLicenseUri = reader.nextBoolean();
|
||||
break;
|
||||
case "subtitle_uri":
|
||||
subtitleUri = Uri.parse(reader.nextString());
|
||||
@ -436,6 +439,16 @@ public class SampleChooserActivity extends AppCompatActivity
|
||||
.setUri(uri)
|
||||
.setMediaMetadata(new MediaMetadata.Builder().setTitle(title).build())
|
||||
.setMimeType(adaptiveMimeType);
|
||||
if (drmUuid != null) {
|
||||
mediaItem.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(drmUuid)
|
||||
.setLicenseUri(drmLicenseUri)
|
||||
.setLicenseRequestHeaders(drmLicenseRequestHeaders)
|
||||
.setSessionForClearPeriods(drmSessionForClearContent)
|
||||
.setMultiSession(drmMultiSession)
|
||||
.setForceDefaultLicenseUri(drmForceDefaultLicenseUri)
|
||||
.build());
|
||||
}
|
||||
if (subtitleUri != null) {
|
||||
MediaItem.Subtitle subtitle =
|
||||
new MediaItem.Subtitle(
|
||||
|
@ -63,10 +63,12 @@ For protected content, the media item's DRM properties should be set:
|
||||
~~~
|
||||
MediaItem mediaItem = new MediaItem.Builder()
|
||||
.setUri(videoUri)
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmLicenseUri(licenseUri)
|
||||
.setDrmLicenseRequestHeaders(httpRequestHeaders)
|
||||
.setDrmMultiSession(true)
|
||||
.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||
.setLicenseUri(licenseUri)
|
||||
.setMultiSession(true)
|
||||
.setLicenseRequestHeaders(httpRequestHeaders)
|
||||
.build())
|
||||
.build();
|
||||
~~~
|
||||
{: .language-java}
|
||||
|
@ -96,17 +96,19 @@ public final class DefaultMediaItemConverter implements MediaItemConverter {
|
||||
}
|
||||
}
|
||||
|
||||
private static void populateDrmConfiguration(JSONObject json, MediaItem.Builder builder)
|
||||
private static void populateDrmConfiguration(JSONObject json, MediaItem.Builder mediaItem)
|
||||
throws JSONException {
|
||||
builder.setDrmUuid(UUID.fromString(json.getString(KEY_UUID)));
|
||||
builder.setDrmLicenseUri(json.getString(KEY_LICENSE_URI));
|
||||
MediaItem.DrmConfiguration.Builder drmConfiguration =
|
||||
new MediaItem.DrmConfiguration.Builder(UUID.fromString(json.getString(KEY_UUID)))
|
||||
.setLicenseUri(json.getString(KEY_LICENSE_URI));
|
||||
JSONObject requestHeadersJson = json.getJSONObject(KEY_REQUEST_HEADERS);
|
||||
HashMap<String, String> requestHeaders = new HashMap<>();
|
||||
for (Iterator<String> iterator = requestHeadersJson.keys(); iterator.hasNext(); ) {
|
||||
String key = iterator.next();
|
||||
requestHeaders.put(key, requestHeadersJson.getString(key));
|
||||
}
|
||||
builder.setDrmLicenseRequestHeaders(requestHeaders);
|
||||
drmConfiguration.setLicenseRequestHeaders(requestHeaders);
|
||||
mediaItem.setDrmConfiguration(drmConfiguration.build());
|
||||
}
|
||||
|
||||
// Serialization.
|
||||
|
@ -24,7 +24,7 @@ import com.google.android.exoplayer2.MediaItem;
|
||||
import com.google.android.exoplayer2.MediaMetadata;
|
||||
import com.google.android.exoplayer2.util.MimeTypes;
|
||||
import com.google.android.gms.cast.MediaQueueItem;
|
||||
import java.util.Collections;
|
||||
import com.google.common.collect.ImmutableMap;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
@ -53,9 +53,11 @@ public class DefaultMediaItemConverterTest {
|
||||
.setUri(Uri.parse("http://example.com"))
|
||||
.setMediaMetadata(MediaMetadata.EMPTY)
|
||||
.setMimeType(MimeTypes.APPLICATION_MPD)
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmLicenseUri("http://license.com")
|
||||
.setDrmLicenseRequestHeaders(Collections.singletonMap("key", "value"))
|
||||
.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||
.setLicenseUri("http://license.com")
|
||||
.setLicenseRequestHeaders(ImmutableMap.of("key", "value"))
|
||||
.build())
|
||||
.build();
|
||||
|
||||
DefaultMediaItemConverter converter = new DefaultMediaItemConverter();
|
||||
|
@ -316,21 +316,8 @@ public final class AdsMediaSource extends CompositeMediaSource<MediaPeriodId> {
|
||||
@Nullable
|
||||
MediaItem.PlaybackProperties contentPlaybackProperties =
|
||||
contentMediaSource.getMediaItem().playbackProperties;
|
||||
if (contentPlaybackProperties != null
|
||||
&& contentPlaybackProperties.drmConfiguration != null) {
|
||||
MediaItem.DrmConfiguration drmConfiguration =
|
||||
contentPlaybackProperties.drmConfiguration;
|
||||
// TODO(internal b/179984779): Use MediaItem.Builder#setDrmConfiguration() when it's
|
||||
// available.
|
||||
adMediaItem.setDrmUuid(drmConfiguration.uuid);
|
||||
adMediaItem.setDrmKeySetId(drmConfiguration.getKeySetId());
|
||||
adMediaItem.setDrmLicenseUri(drmConfiguration.licenseUri);
|
||||
adMediaItem.setDrmForceDefaultLicenseUri(drmConfiguration.forceDefaultLicenseUri);
|
||||
adMediaItem.setDrmLicenseRequestHeaders(drmConfiguration.requestHeaders);
|
||||
adMediaItem.setDrmMultiSession(drmConfiguration.multiSession);
|
||||
adMediaItem.setDrmPlayClearContentWithoutKey(
|
||||
drmConfiguration.playClearContentWithoutKey);
|
||||
adMediaItem.setDrmSessionForClearTypes(drmConfiguration.sessionForClearTypes);
|
||||
if (contentPlaybackProperties != null) {
|
||||
adMediaItem.setDrmConfiguration(contentPlaybackProperties.drmConfiguration);
|
||||
}
|
||||
MediaSource adMediaSource = adMediaSourceFactory.createMediaSource(adMediaItem.build());
|
||||
adMediaSourceHolder.initializeWithMediaSource(adMediaSource, adUri);
|
||||
|
@ -43,8 +43,10 @@ public class DefaultDrmSessionManagerProviderTest {
|
||||
MediaItem mediaItem =
|
||||
new MediaItem.Builder()
|
||||
.setUri(Uri.EMPTY)
|
||||
.setDrmLicenseUri(Uri.EMPTY)
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||
.setLicenseUri(Uri.EMPTY)
|
||||
.build())
|
||||
.build();
|
||||
|
||||
DrmSessionManager drmSessionManager = new DefaultDrmSessionManagerProvider().get(mediaItem);
|
||||
@ -57,20 +59,22 @@ public class DefaultDrmSessionManagerProviderTest {
|
||||
MediaItem mediaItem1 =
|
||||
new MediaItem.Builder()
|
||||
.setUri("https://example.test/content-1")
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmConfiguration(new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID).build())
|
||||
.build();
|
||||
// Same DRM info as item1, but different URL to check it doesn't prevent re-using a manager.
|
||||
MediaItem mediaItem2 =
|
||||
new MediaItem.Builder()
|
||||
.setUri("https://example.test/content-2")
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmConfiguration(new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID).build())
|
||||
.build();
|
||||
// Different DRM info to 1 and 2, needs a different manager instance.
|
||||
MediaItem mediaItem3 =
|
||||
new MediaItem.Builder()
|
||||
.setUri("https://example.test/content-3")
|
||||
.setDrmUuid(C.WIDEVINE_UUID)
|
||||
.setDrmLicenseUri("https://example.test/license")
|
||||
.setDrmConfiguration(
|
||||
new MediaItem.DrmConfiguration.Builder(C.WIDEVINE_UUID)
|
||||
.setLicenseUri("https://example.test/license")
|
||||
.build())
|
||||
.build();
|
||||
|
||||
DefaultDrmSessionManagerProvider provider = new DefaultDrmSessionManagerProvider();
|
||||
|
Loading…
x
Reference in New Issue
Block a user