Description
I have a DASH content protected with Widevine that doesn't work only on ExoPlayer 2.6.0 (it works on 2.5.4).
The manifest for content protection contains only
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="fe2cbd2e-78a3-5fdd-b1f7-3b166d8abbed" />
When checking if the video format is supported 2.6.0 returns FORMAT_UNSUPPORTED_DRM
.
I have debugged the ExoPlayer source of 2.5.4 and 2.6.0 to find the difference.
On 2.5.4 the previous ContentProtection
tag is ignored in DashManifestParser
and so drmInitData
inside supportsFormat
of MediaCodecRenderer
is null and it assumes that there is no protection. Only later it will update drmInitData
by parsing a Widevine SchemeData
from the MP4 atoms and ask for the license.
On 2.6.0 the ContentProtection
tag is parsed with a SchemeData
having COMMON_PSSH_UUID
as uuid. Because there is an existing DrmInitData
the MediaVideoCodecRenderer
class doesn't assume that there is no protection and checks if it's a supported DRM by calling canAcquireSession
of DrmSessionManager
. DefaultDrmSessionManager
calls getSchemeData
that will return null because there is no match with the Widevine UUID or with the CLEARKEY logic, this will finally result in FORMAT_UNSUPPORTED_DRM
.
I don't know much about DASH manifest and DRM standards so currently i can't say if it's an ExoPlayer issue or it's a malformed manifest.
Unfortunately i don't have any control on these DASH manifests.