Add demo app support for attaching DrmSessions to clear content
Issue:#4867 PiperOrigin-RevId: 284262626
This commit is contained in:
parent
45013ece1e
commit
d1d43d62e6
@ -29,6 +29,7 @@
|
|||||||
* Add `play` and `pause` methods to `Player`.
|
* Add `play` and `pause` methods to `Player`.
|
||||||
* Upgrade Truth dependency from 0.44 to 1.0.
|
* Upgrade Truth dependency from 0.44 to 1.0.
|
||||||
* Upgrade to JUnit 4.13-rc-2.
|
* Upgrade to JUnit 4.13-rc-2.
|
||||||
|
* Add support for attaching DRM sessions to clear content in the demo app.
|
||||||
|
|
||||||
### 2.11.0 (not yet released) ###
|
### 2.11.0 (not yet released) ###
|
||||||
|
|
||||||
|
@ -208,6 +208,13 @@
|
|||||||
"uri": "https://storage.googleapis.com/wvmedia/cbcs/h264/tears/tears_aes_cbcs_uhd.mpd",
|
"uri": "https://storage.googleapis.com/wvmedia/cbcs/h264/tears/tears_aes_cbcs_uhd.mpd",
|
||||||
"drm_scheme": "widevine",
|
"drm_scheme": "widevine",
|
||||||
"drm_license_url": "https://proxy.uat.widevine.com/proxy?provider=widevine_test"
|
"drm_license_url": "https://proxy.uat.widevine.com/proxy?provider=widevine_test"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "WV: Secure and Clear SD & HD (cenc,MP4,H264)",
|
||||||
|
"uri": "https://storage.googleapis.com/exoplayer-test-media-1/widevine/tears_enc_clear_enc.mpd",
|
||||||
|
"drm_scheme": "widevine",
|
||||||
|
"drm_license_url": "https://proxy.uat.widevine.com/proxy?provider=widevine_test",
|
||||||
|
"drm_session_for_clear_types": ["audio", "video"]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
@ -115,6 +115,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
public static final String DRM_SCHEME_EXTRA = "drm_scheme";
|
public static final String DRM_SCHEME_EXTRA = "drm_scheme";
|
||||||
public static final String DRM_LICENSE_URL_EXTRA = "drm_license_url";
|
public static final String DRM_LICENSE_URL_EXTRA = "drm_license_url";
|
||||||
public static final String DRM_KEY_REQUEST_PROPERTIES_EXTRA = "drm_key_request_properties";
|
public static final String DRM_KEY_REQUEST_PROPERTIES_EXTRA = "drm_key_request_properties";
|
||||||
|
public static final String DRM_SESSION_FOR_CLEAR_TYPES_EXTRA = "drm_session_for_clear_types";
|
||||||
public static final String DRM_MULTI_SESSION_EXTRA = "drm_multi_session";
|
public static final String DRM_MULTI_SESSION_EXTRA = "drm_multi_session";
|
||||||
public static final String PREFER_EXTENSION_DECODERS_EXTRA = "prefer_extension_decoders";
|
public static final String PREFER_EXTENSION_DECODERS_EXTRA = "prefer_extension_decoders";
|
||||||
public static final String TUNNELING_EXTRA = "tunneling";
|
public static final String TUNNELING_EXTRA = "tunneling";
|
||||||
@ -488,6 +489,7 @@ public class PlayerActivity extends AppCompatActivity
|
|||||||
new DefaultDrmSessionManager.Builder()
|
new DefaultDrmSessionManager.Builder()
|
||||||
.setUuidAndExoMediaDrmProvider(drmInfo.drmScheme, FrameworkMediaDrm.DEFAULT_PROVIDER)
|
.setUuidAndExoMediaDrmProvider(drmInfo.drmScheme, FrameworkMediaDrm.DEFAULT_PROVIDER)
|
||||||
.setMultiSession(drmInfo.drmMultiSession)
|
.setMultiSession(drmInfo.drmMultiSession)
|
||||||
|
.setUseDrmSessionsForClearContent(drmInfo.drmSessionForClearTypes)
|
||||||
.build(mediaDrmCallback);
|
.build(mediaDrmCallback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -22,6 +22,7 @@ import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_LICENSE_URL_
|
|||||||
import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_MULTI_SESSION_EXTRA;
|
import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_MULTI_SESSION_EXTRA;
|
||||||
import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_SCHEME_EXTRA;
|
import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_SCHEME_EXTRA;
|
||||||
import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_SCHEME_UUID_EXTRA;
|
import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_SCHEME_UUID_EXTRA;
|
||||||
|
import static com.google.android.exoplayer2.demo.PlayerActivity.DRM_SESSION_FOR_CLEAR_TYPES_EXTRA;
|
||||||
import static com.google.android.exoplayer2.demo.PlayerActivity.EXTENSION_EXTRA;
|
import static com.google.android.exoplayer2.demo.PlayerActivity.EXTENSION_EXTRA;
|
||||||
import static com.google.android.exoplayer2.demo.PlayerActivity.IS_LIVE_EXTRA;
|
import static com.google.android.exoplayer2.demo.PlayerActivity.IS_LIVE_EXTRA;
|
||||||
import static com.google.android.exoplayer2.demo.PlayerActivity.SUBTITLE_LANGUAGE_EXTRA;
|
import static com.google.android.exoplayer2.demo.PlayerActivity.SUBTITLE_LANGUAGE_EXTRA;
|
||||||
@ -32,9 +33,11 @@ import static com.google.android.exoplayer2.demo.PlayerActivity.URI_EXTRA;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
import com.google.android.exoplayer2.C;
|
||||||
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 java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.HashSet;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/* package */ abstract class Sample {
|
/* package */ abstract class Sample {
|
||||||
@ -147,24 +150,35 @@ import java.util.UUID;
|
|||||||
String drmLicenseUrl = intent.getStringExtra(DRM_LICENSE_URL_EXTRA + extrasKeySuffix);
|
String drmLicenseUrl = intent.getStringExtra(DRM_LICENSE_URL_EXTRA + extrasKeySuffix);
|
||||||
String[] keyRequestPropertiesArray =
|
String[] keyRequestPropertiesArray =
|
||||||
intent.getStringArrayExtra(DRM_KEY_REQUEST_PROPERTIES_EXTRA + extrasKeySuffix);
|
intent.getStringArrayExtra(DRM_KEY_REQUEST_PROPERTIES_EXTRA + extrasKeySuffix);
|
||||||
|
String[] drmSessionForClearTypesExtra =
|
||||||
|
intent.getStringArrayExtra(DRM_SESSION_FOR_CLEAR_TYPES_EXTRA + extrasKeySuffix);
|
||||||
|
int[] drmSessionForClearTypes = toTrackTypeArray(drmSessionForClearTypesExtra);
|
||||||
boolean drmMultiSession =
|
boolean drmMultiSession =
|
||||||
intent.getBooleanExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, false);
|
intent.getBooleanExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, false);
|
||||||
return new DrmInfo(drmScheme, drmLicenseUrl, keyRequestPropertiesArray, drmMultiSession);
|
return new DrmInfo(
|
||||||
|
drmScheme,
|
||||||
|
drmLicenseUrl,
|
||||||
|
keyRequestPropertiesArray,
|
||||||
|
drmSessionForClearTypes,
|
||||||
|
drmMultiSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
public final UUID drmScheme;
|
public final UUID drmScheme;
|
||||||
public final String drmLicenseUrl;
|
public final String drmLicenseUrl;
|
||||||
public final String[] drmKeyRequestProperties;
|
public final String[] drmKeyRequestProperties;
|
||||||
|
public final int[] drmSessionForClearTypes;
|
||||||
public final boolean drmMultiSession;
|
public final boolean drmMultiSession;
|
||||||
|
|
||||||
public DrmInfo(
|
public DrmInfo(
|
||||||
UUID drmScheme,
|
UUID drmScheme,
|
||||||
String drmLicenseUrl,
|
String drmLicenseUrl,
|
||||||
String[] drmKeyRequestProperties,
|
String[] drmKeyRequestProperties,
|
||||||
|
int[] drmSessionForClearTypes,
|
||||||
boolean drmMultiSession) {
|
boolean drmMultiSession) {
|
||||||
this.drmScheme = drmScheme;
|
this.drmScheme = drmScheme;
|
||||||
this.drmLicenseUrl = drmLicenseUrl;
|
this.drmLicenseUrl = drmLicenseUrl;
|
||||||
this.drmKeyRequestProperties = drmKeyRequestProperties;
|
this.drmKeyRequestProperties = drmKeyRequestProperties;
|
||||||
|
this.drmSessionForClearTypes = drmSessionForClearTypes;
|
||||||
this.drmMultiSession = drmMultiSession;
|
this.drmMultiSession = drmMultiSession;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -173,6 +187,13 @@ import java.util.UUID;
|
|||||||
intent.putExtra(DRM_SCHEME_EXTRA + extrasKeySuffix, drmScheme.toString());
|
intent.putExtra(DRM_SCHEME_EXTRA + extrasKeySuffix, drmScheme.toString());
|
||||||
intent.putExtra(DRM_LICENSE_URL_EXTRA + extrasKeySuffix, drmLicenseUrl);
|
intent.putExtra(DRM_LICENSE_URL_EXTRA + extrasKeySuffix, drmLicenseUrl);
|
||||||
intent.putExtra(DRM_KEY_REQUEST_PROPERTIES_EXTRA + extrasKeySuffix, drmKeyRequestProperties);
|
intent.putExtra(DRM_KEY_REQUEST_PROPERTIES_EXTRA + extrasKeySuffix, drmKeyRequestProperties);
|
||||||
|
ArrayList<String> typeStrings = new ArrayList<>();
|
||||||
|
for (int type : drmSessionForClearTypes) {
|
||||||
|
// Only audio and video are supported.
|
||||||
|
typeStrings.add(type == C.TRACK_TYPE_AUDIO ? "audio" : "video");
|
||||||
|
}
|
||||||
|
intent.putExtra(
|
||||||
|
DRM_SESSION_FOR_CLEAR_TYPES_EXTRA + extrasKeySuffix, typeStrings.toArray(new String[0]));
|
||||||
intent.putExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, drmMultiSession);
|
intent.putExtra(DRM_MULTI_SESSION_EXTRA + extrasKeySuffix, drmMultiSession);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -207,6 +228,26 @@ import java.util.UUID;
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static int[] toTrackTypeArray(@Nullable String[] trackTypeStringsArray) {
|
||||||
|
if (trackTypeStringsArray == null) {
|
||||||
|
return new int[0];
|
||||||
|
}
|
||||||
|
HashSet<Integer> trackTypes = new HashSet<>();
|
||||||
|
for (String trackTypeString : trackTypeStringsArray) {
|
||||||
|
switch (Util.toLowerInvariant(trackTypeString)) {
|
||||||
|
case "audio":
|
||||||
|
trackTypes.add(C.TRACK_TYPE_AUDIO);
|
||||||
|
break;
|
||||||
|
case "video":
|
||||||
|
trackTypes.add(C.TRACK_TYPE_VIDEO);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
throw new IllegalArgumentException("Invalid track type: " + trackTypeString);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return Util.toArray(new ArrayList<>(trackTypes));
|
||||||
|
}
|
||||||
|
|
||||||
public static Sample createFromIntent(Intent intent) {
|
public static Sample createFromIntent(Intent intent) {
|
||||||
if (ACTION_VIEW_LIST.equals(intent.getAction())) {
|
if (ACTION_VIEW_LIST.equals(intent.getAction())) {
|
||||||
ArrayList<String> intentUris = new ArrayList<>();
|
ArrayList<String> intentUris = new ArrayList<>();
|
||||||
|
@ -307,6 +307,7 @@ public class SampleChooserActivity extends AppCompatActivity
|
|||||||
String drmScheme = null;
|
String drmScheme = null;
|
||||||
String drmLicenseUrl = null;
|
String drmLicenseUrl = null;
|
||||||
String[] drmKeyRequestProperties = null;
|
String[] drmKeyRequestProperties = null;
|
||||||
|
String[] drmSessionForClearTypes = null;
|
||||||
boolean drmMultiSession = false;
|
boolean drmMultiSession = false;
|
||||||
ArrayList<UriSample> playlistSamples = null;
|
ArrayList<UriSample> playlistSamples = null;
|
||||||
String adTagUri = null;
|
String adTagUri = null;
|
||||||
@ -348,6 +349,15 @@ public class SampleChooserActivity extends AppCompatActivity
|
|||||||
reader.endObject();
|
reader.endObject();
|
||||||
drmKeyRequestProperties = drmKeyRequestPropertiesList.toArray(new String[0]);
|
drmKeyRequestProperties = drmKeyRequestPropertiesList.toArray(new String[0]);
|
||||||
break;
|
break;
|
||||||
|
case "drm_session_for_clear_types":
|
||||||
|
ArrayList<String> drmSessionForClearTypesList = new ArrayList<>();
|
||||||
|
reader.beginArray();
|
||||||
|
while (reader.hasNext()) {
|
||||||
|
drmSessionForClearTypesList.add(reader.nextString());
|
||||||
|
}
|
||||||
|
reader.endArray();
|
||||||
|
drmSessionForClearTypes = drmSessionForClearTypesList.toArray(new String[0]);
|
||||||
|
break;
|
||||||
case "drm_multi_session":
|
case "drm_multi_session":
|
||||||
drmMultiSession = reader.nextBoolean();
|
drmMultiSession = reader.nextBoolean();
|
||||||
break;
|
break;
|
||||||
@ -389,6 +399,7 @@ public class SampleChooserActivity extends AppCompatActivity
|
|||||||
Util.getDrmUuid(drmScheme),
|
Util.getDrmUuid(drmScheme),
|
||||||
drmLicenseUrl,
|
drmLicenseUrl,
|
||||||
drmKeyRequestProperties,
|
drmKeyRequestProperties,
|
||||||
|
Sample.toTrackTypeArray(drmSessionForClearTypes),
|
||||||
drmMultiSession);
|
drmMultiSession);
|
||||||
Sample.SubtitleInfo subtitleInfo =
|
Sample.SubtitleInfo subtitleInfo =
|
||||||
subtitleUri == null
|
subtitleUri == null
|
||||||
|
Loading…
x
Reference in New Issue
Block a user