Commit 13827186 by ibaker Committed by Christos Tsilopoulos

Use the new MediaItem.Builder#setDrmConfiguration method

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