Merge pull request #7099 from matamegger:feature/fix_pssh_v1_on_firetv

PiperOrigin-RevId: 303937576
This commit is contained in:
Oliver Woodman 2020-03-31 12:35:44 +01:00
commit 918172cca7
2 changed files with 17 additions and 7 deletions

View File

@ -128,6 +128,10 @@
([#7134](https://github.com/google/ExoPlayer/issues/7134)). ([#7134](https://github.com/google/ExoPlayer/issues/7134)).
* Fix failure to play WAV files that contain trailing non-media bytes * Fix failure to play WAV files that contain trailing non-media bytes
([#7129](https://github.com/google/ExoPlayer/issues/7129)) ([#7129](https://github.com/google/ExoPlayer/issues/7129))
* DRM:
* Fix playback of Widevine protected content that only provides V1 PSSH atoms
on API levels 21 and 22.
* Fix playback of PlayReady content on Fire TV Stick (Gen 2).
* DASH: * DASH:
* Update the manifest URI to avoid repeated HTTP redirects * Update the manifest URI to avoid repeated HTTP redirects
([#6907](https://github.com/google/ExoPlayer/issues/6907)). ([#6907](https://github.com/google/ExoPlayer/issues/6907)).

View File

@ -369,14 +369,20 @@ public final class FrameworkMediaDrm implements ExoMediaDrm {
C.PLAYREADY_UUID, addLaUrlAttributeIfMissing(schemeSpecificData)); C.PLAYREADY_UUID, addLaUrlAttributeIfMissing(schemeSpecificData));
} }
// Prior to L the Widevine CDM required data to be extracted from the PSSH atom. Some Amazon // Prior to API level 21, the Widevine CDM required scheme specific data to be extracted from
// devices also required data to be extracted from the PSSH atom for PlayReady. // the PSSH atom. We also extract the data on API levels 21 and 22 because these API levels
if ((Util.SDK_INT < 21 && C.WIDEVINE_UUID.equals(uuid)) // don't handle V1 PSSH atoms, but do handle scheme specific data regardless of whether it's
// extracted from a V0 or a V1 PSSH atom. Hence extracting the data allows us to support content
// that only provides V1 PSSH atoms. API levels 23 and above understand V0 and V1 PSSH atoms,
// and so we do not extract the data.
// Some Amazon devices also require data to be extracted from the PSSH atom for PlayReady.
if ((Util.SDK_INT < 23 && C.WIDEVINE_UUID.equals(uuid))
|| (C.PLAYREADY_UUID.equals(uuid) || (C.PLAYREADY_UUID.equals(uuid)
&& "Amazon".equals(Util.MANUFACTURER) && "Amazon".equals(Util.MANUFACTURER)
&& ("AFTB".equals(Util.MODEL) // Fire TV Gen 1 && ("AFTB".equals(Util.MODEL) // Fire TV Gen 1
|| "AFTS".equals(Util.MODEL) // Fire TV Gen 2 || "AFTS".equals(Util.MODEL) // Fire TV Gen 2
|| "AFTM".equals(Util.MODEL)))) { // Fire TV Stick Gen 1 || "AFTM".equals(Util.MODEL) // Fire TV Stick Gen 1
|| "AFTT".equals(Util.MODEL)))) { // Fire TV Stick Gen 2
byte[] psshData = PsshAtomUtil.parseSchemeSpecificData(initData, uuid); byte[] psshData = PsshAtomUtil.parseSchemeSpecificData(initData, uuid);
if (psshData != null) { if (psshData != null) {
// Extraction succeeded, so return the extracted data. // Extraction succeeded, so return the extracted data.