mirror of
https://github.com/samsonjs/media.git
synced 2026-04-27 15:07:40 +00:00
Fix clearkey DRM UUID passed to MediaCrypto
PiperOrigin-RevId: 223324279
This commit is contained in:
parent
66f7e984ff
commit
f8ad6d309e
2 changed files with 9 additions and 6 deletions
|
|
@ -25,6 +25,7 @@
|
||||||
* Fix playback of some invalid but playable MP4 streams by replacing assertions
|
* Fix playback of some invalid but playable MP4 streams by replacing assertions
|
||||||
with logged warnings in sample table parsing code
|
with logged warnings in sample table parsing code
|
||||||
([#5162](https://github.com/google/ExoPlayer/issues/5162)).
|
([#5162](https://github.com/google/ExoPlayer/issues/5162)).
|
||||||
|
* Fix UUID passed to `MediaCrypto` when using `C.CLEARKEY_UUID` before API 27.
|
||||||
|
|
||||||
### 2.9.1 ###
|
### 2.9.1 ###
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,9 +70,7 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
|
||||||
Assertions.checkNotNull(uuid);
|
Assertions.checkNotNull(uuid);
|
||||||
Assertions.checkArgument(!C.COMMON_PSSH_UUID.equals(uuid), "Use C.CLEARKEY_UUID instead");
|
Assertions.checkArgument(!C.COMMON_PSSH_UUID.equals(uuid), "Use C.CLEARKEY_UUID instead");
|
||||||
this.uuid = uuid;
|
this.uuid = uuid;
|
||||||
// ClearKey had to be accessed using the Common PSSH UUID prior to API level 27.
|
this.mediaDrm = new MediaDrm(adjustUuid(uuid));
|
||||||
this.mediaDrm =
|
|
||||||
new MediaDrm(Util.SDK_INT < 27 && C.CLEARKEY_UUID.equals(uuid) ? C.COMMON_PSSH_UUID : uuid);
|
|
||||||
if (C.WIDEVINE_UUID.equals(uuid) && needsForceWidevineL3Workaround()) {
|
if (C.WIDEVINE_UUID.equals(uuid) && needsForceWidevineL3Workaround()) {
|
||||||
forceWidevineL3(mediaDrm);
|
forceWidevineL3(mediaDrm);
|
||||||
}
|
}
|
||||||
|
|
@ -152,7 +150,6 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
|
||||||
@Override
|
@Override
|
||||||
public byte[] provideKeyResponse(byte[] scope, byte[] response)
|
public byte[] provideKeyResponse(byte[] scope, byte[] response)
|
||||||
throws NotProvisionedException, DeniedByServerException {
|
throws NotProvisionedException, DeniedByServerException {
|
||||||
|
|
||||||
if (C.CLEARKEY_UUID.equals(uuid)) {
|
if (C.CLEARKEY_UUID.equals(uuid)) {
|
||||||
response = ClearKeyUtil.adjustResponseData(response);
|
response = ClearKeyUtil.adjustResponseData(response);
|
||||||
}
|
}
|
||||||
|
|
@ -212,8 +209,8 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
|
||||||
// indicate that it required secure video decoders [Internal ref: b/11428937].
|
// indicate that it required secure video decoders [Internal ref: b/11428937].
|
||||||
boolean forceAllowInsecureDecoderComponents = Util.SDK_INT < 21
|
boolean forceAllowInsecureDecoderComponents = Util.SDK_INT < 21
|
||||||
&& C.WIDEVINE_UUID.equals(uuid) && "L3".equals(getPropertyString("securityLevel"));
|
&& C.WIDEVINE_UUID.equals(uuid) && "L3".equals(getPropertyString("securityLevel"));
|
||||||
return new FrameworkMediaCrypto(new MediaCrypto(uuid, initData),
|
return new FrameworkMediaCrypto(
|
||||||
forceAllowInsecureDecoderComponents);
|
new MediaCrypto(adjustUuid(uuid), initData), forceAllowInsecureDecoderComponents);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static SchemeData getSchemeData(UUID uuid, List<SchemeData> schemeDatas) {
|
private static SchemeData getSchemeData(UUID uuid, List<SchemeData> schemeDatas) {
|
||||||
|
|
@ -269,6 +266,11 @@ public final class FrameworkMediaDrm implements ExoMediaDrm<FrameworkMediaCrypto
|
||||||
return schemeDatas.get(0);
|
return schemeDatas.get(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static UUID adjustUuid(UUID uuid) {
|
||||||
|
// ClearKey had to be accessed using the Common PSSH UUID prior to API level 27.
|
||||||
|
return Util.SDK_INT < 27 && C.CLEARKEY_UUID.equals(uuid) ? C.COMMON_PSSH_UUID : uuid;
|
||||||
|
}
|
||||||
|
|
||||||
private static byte[] adjustRequestInitData(UUID uuid, byte[] initData) {
|
private static byte[] adjustRequestInitData(UUID uuid, byte[] initData) {
|
||||||
// Prior to L the Widevine CDM required data to be extracted from the PSSH atom. Some Amazon
|
// Prior to L the Widevine CDM required data to be extracted from the PSSH atom. Some Amazon
|
||||||
// devices also required data to be extracted from the PSSH atom for PlayReady.
|
// devices also required data to be extracted from the PSSH atom for PlayReady.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue