From 433526e0343c109cab18a3433e8d7505962a6ee3 Mon Sep 17 00:00:00 2001 From: aquilescanta Date: Thu, 3 Oct 2019 13:54:18 +0100 Subject: [PATCH] Deprecate DefaultDrmSessionManager factory methods and migrate main demo app PiperOrigin-RevId: 272643202 --- .../exoplayer2/demo/PlayerActivity.java | 85 ++++++------------- demos/main/src/main/res/values/strings.xml | 2 +- .../drm/DefaultDrmSessionManager.java | 8 +- 3 files changed, 36 insertions(+), 59 deletions(-) diff --git a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java index 347f49e27c..1dc56bfbc9 100644 --- a/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java +++ b/demos/main/src/main/java/com/google/android/exoplayer2/demo/PlayerActivity.java @@ -17,6 +17,7 @@ package com.google.android.exoplayer2.demo; import android.content.Intent; import android.content.pm.PackageManager; +import android.media.MediaDrm; import android.net.Uri; import android.os.Bundle; import android.util.Pair; @@ -40,10 +41,10 @@ import com.google.android.exoplayer2.SimpleExoPlayer; import com.google.android.exoplayer2.demo.Sample.UriSample; import com.google.android.exoplayer2.drm.DefaultDrmSessionManager; import com.google.android.exoplayer2.drm.DrmSessionManager; -import com.google.android.exoplayer2.drm.FrameworkMediaCrypto; +import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.drm.FrameworkMediaDrm; import com.google.android.exoplayer2.drm.HttpMediaDrmCallback; -import com.google.android.exoplayer2.drm.UnsupportedDrmException; +import com.google.android.exoplayer2.drm.MediaDrmCallback; import com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.DecoderInitializationException; import com.google.android.exoplayer2.mediacodec.MediaCodecUtil.DecoderQueryException; import com.google.android.exoplayer2.offline.DownloadHelper; @@ -78,8 +79,6 @@ import java.lang.reflect.Constructor; import java.net.CookieHandler; import java.net.CookieManager; import java.net.CookiePolicy; -import java.util.ArrayList; -import java.util.UUID; /** An activity that plays media using {@link SimpleExoPlayer}. */ public class PlayerActivity extends AppCompatActivity @@ -131,8 +130,6 @@ public class PlayerActivity extends AppCompatActivity DEFAULT_COOKIE_MANAGER.setCookiePolicy(CookiePolicy.ACCEPT_ORIGINAL_SERVER); } - private final ArrayList mediaDrms; - private PlayerView playerView; private LinearLayout debugRootView; private Button selectTracksButton; @@ -156,10 +153,6 @@ public class PlayerActivity extends AppCompatActivity private AdsLoader adsLoader; private Uri loadedAdTagUri; - public PlayerActivity() { - mediaDrms = new ArrayList<>(); - } - // Activity lifecycle @Override @@ -342,7 +335,6 @@ public class PlayerActivity extends AppCompatActivity if (player == null) { Intent intent = getIntent(); - releaseMediaDrms(); mediaSource = createTopLevelMediaSource(intent); if (mediaSource == null) { return; @@ -452,38 +444,29 @@ public class PlayerActivity extends AppCompatActivity } private MediaSource createLeafMediaSource(UriSample parameters) { - DrmSessionManager drmSessionManager = null; Sample.DrmInfo drmInfo = parameters.drmInfo; - if (drmInfo != null) { - int errorStringId = R.string.error_drm_unknown; - if (Util.SDK_INT < 18) { - errorStringId = R.string.error_drm_not_supported; - } else { - try { - if (drmInfo.drmScheme == null) { - errorStringId = R.string.error_drm_unsupported_scheme; - } else { - drmSessionManager = - buildDrmSessionManagerV18( - drmInfo.drmScheme, - drmInfo.drmLicenseUrl, - drmInfo.drmKeyRequestProperties, - drmInfo.drmMultiSession); - } - } catch (UnsupportedDrmException e) { - errorStringId = - e.reason == UnsupportedDrmException.REASON_UNSUPPORTED_SCHEME - ? R.string.error_drm_unsupported_scheme - : R.string.error_drm_unknown; - } - } - if (drmSessionManager == null) { - showToast(errorStringId); - finish(); - return null; - } - } else { + int errorStringId = R.string.error_drm_unknown; + DrmSessionManager drmSessionManager = null; + if (drmInfo == null) { drmSessionManager = DrmSessionManager.getDummyDrmSessionManager(); + } else if (Util.SDK_INT < 18) { + errorStringId = R.string.error_drm_unsupported_before_api_18; + } else if (!MediaDrm.isCryptoSchemeSupported(drmInfo.drmScheme)) { + errorStringId = R.string.error_drm_unsupported_scheme; + } else { + MediaDrmCallback mediaDrmCallback = + createMediaDrmCallback(drmInfo.drmLicenseUrl, drmInfo.drmKeyRequestProperties); + drmSessionManager = + new DefaultDrmSessionManager.Builder() + .setUuidAndExoMediaDrmProvider(drmInfo.drmScheme, FrameworkMediaDrm.DEFAULT_PROVIDER) + .setMultiSession(drmInfo.drmMultiSession) + .build(mediaDrmCallback); + } + + if (drmSessionManager == null) { + showToast(errorStringId); + finish(); + return null; } DownloadRequest downloadRequest = @@ -497,7 +480,7 @@ public class PlayerActivity extends AppCompatActivity } private MediaSource createLeafMediaSource( - Uri uri, String extension, DrmSessionManager drmSessionManager) { + Uri uri, String extension, DrmSessionManager drmSessionManager) { @ContentType int type = Util.inferContentType(uri, extension); switch (type) { case C.TYPE_DASH: @@ -521,9 +504,8 @@ public class PlayerActivity extends AppCompatActivity } } - private DefaultDrmSessionManager buildDrmSessionManagerV18( - UUID uuid, String licenseUrl, String[] keyRequestPropertiesArray, boolean multiSession) - throws UnsupportedDrmException { + private HttpMediaDrmCallback createMediaDrmCallback( + String licenseUrl, String[] keyRequestPropertiesArray) { HttpDataSource.Factory licenseDataSourceFactory = ((DemoApplication) getApplication()).buildHttpDataSourceFactory(); HttpMediaDrmCallback drmCallback = @@ -534,10 +516,7 @@ public class PlayerActivity extends AppCompatActivity keyRequestPropertiesArray[i + 1]); } } - - FrameworkMediaDrm mediaDrm = FrameworkMediaDrm.newInstance(uuid); - mediaDrms.add(mediaDrm); - return new DefaultDrmSessionManager<>(uuid, mediaDrm, drmCallback, null, multiSession); + return drmCallback; } private void releasePlayer() { @@ -554,14 +533,6 @@ public class PlayerActivity extends AppCompatActivity if (adsLoader != null) { adsLoader.setPlayer(null); } - releaseMediaDrms(); - } - - private void releaseMediaDrms() { - for (FrameworkMediaDrm mediaDrm : mediaDrms) { - mediaDrm.release(); - } - mediaDrms.clear(); } private void releaseAdsLoader() { diff --git a/demos/main/src/main/res/values/strings.xml b/demos/main/src/main/res/values/strings.xml index f74ce8c076..c39fffa65d 100644 --- a/demos/main/src/main/res/values/strings.xml +++ b/demos/main/src/main/res/values/strings.xml @@ -29,7 +29,7 @@ Unrecognized stereo mode - Protected content not supported on API levels below 18 + Protected content not supported on API levels below 18 This device does not support the required DRM scheme diff --git a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java index e8a6fe6572..731b984ab8 100644 --- a/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java +++ b/library/core/src/main/java/com/google/android/exoplayer2/drm/DefaultDrmSessionManager.java @@ -63,7 +63,7 @@ public class DefaultDrmSessionManager private LoadErrorHandlingPolicy loadErrorHandlingPolicy; /** - * Creates a builder with default values. + * Creates a builder with default values. The default values are: * *
    *
  • {@link #setKeyRequestParameters keyRequestParameters}: An empty map. @@ -258,7 +258,9 @@ public class DefaultDrmSessionManager * @param callback Performs key and provisioning requests. * @param optionalKeyRequestParameters An optional map of parameters to pass as the last argument * to {@link ExoMediaDrm#getKeyRequest(byte[], List, int, HashMap)}. May be null. + * @deprecated Use {@link Builder} instead. */ + @Deprecated public DefaultDrmSessionManager( UUID uuid, ExoMediaDrm exoMediaDrm, @@ -281,7 +283,9 @@ public class DefaultDrmSessionManager * to {@link ExoMediaDrm#getKeyRequest(byte[], List, int, HashMap)}. May be null. * @param multiSession A boolean that specify whether multiple key session support is enabled. * Default is false. + * @deprecated Use {@link Builder} instead. */ + @Deprecated public DefaultDrmSessionManager( UUID uuid, ExoMediaDrm exoMediaDrm, @@ -307,7 +311,9 @@ public class DefaultDrmSessionManager * Default is false. * @param initialDrmRequestRetryCount The number of times to retry for initial provisioning and * key request before reporting error. + * @deprecated Use {@link Builder} instead. */ + @Deprecated public DefaultDrmSessionManager( UUID uuid, ExoMediaDrm exoMediaDrm,