default_KID missing support
Hi ,
I hope this message finds you well. I am writing to request the addition of support in ExoPlayer for MPD (DASH) files that do not include the default_KID attribute when using ClearKey protection (urn:mpeg:dash:mp4protection:2011).
Currently, many web players, including Shaka Player and JWPlayer, already support such MPD files, making it easier to play a wide range of DRM-protected content. However, ExoPlayer throws an error when trying to play these files due to the missing default_KID attribute. It would be extremely helpful if ExoPlayer could handle such cases as well, to ensure compatibility with more content providers and existing media streams.
Thanks
Thanks for the request.
The DASH-IF IOP requires the default_KID attribute to be present in the manifest - see section 7.7.2:
The MPD
@cenc:default_KIDattribute SHALL match the ‘tenc’ default_KID value.
This is where ExoPlayer's expectation comes from.
In general we expect media to follow its spec, the DASH IOP is a de-facto spec for DASH that we often rely on media to follow in order to make parsing it tractable. Given this, we are unlikely to relax ExoPlayer's requirement here. I would suggest any media streams that aren't following the DASH-IF IOP should be updated to follow it, in order to ensure compatibility with as many consumers/players of DASH streams as possible.
Thank you for the clarification.
I understand the importance of following the DASH-IF IOP guidelines to ensure compatibility and parsing accuracy. However, given that a considerable number of streaming providers are using DASH streams without the default_KID attribute, would it be possible to consider an optional mode or flag in ExoPlayer that could allow these streams to play? This could help broaden compatibility, especially since other players like Shaka Player and JWPlayer already support such streams.
Thank you for considering this request, and I appreciate the ongoing improvements in ExoPlayer.
Update for this would be very nice :)
Dear ExoPlayer Development Team,
I appreciate the great work you have done with ExoPlayer, and I would like to request support for DASH streams that do not include a default_KID in the MPD manifest.
Previously, you mentioned that ExoPlayer enforces the presence of default_KID in the MPD due to the DASH-IF IOP specification (section 7.7.2). However, in the latest DASH-IF IOP-6 V5.0.0 (2022-01) specification, section 9.3 ("In-band key rotation signalling") explicitly defines a scenario where an MPD may omit the default_KID attribute while still being fully compliant with the standard.
Key Points from DASH-IF IOP-6 V5.0.0 (Section 9.3): Instead of requiring default_KID at the MPD level, the specification allows each media segment to contain an individual KID value within the sgpd box with grouping_type='seig'. This approach enables in-band key rotation without requiring a new DASH period for every key change, avoiding unnecessary verbosity in the MPD. The MPD itself does not include a default_KID, but the initialization segment contains the necessary PSSH boxes, ensuring that DRM clients can still acquire content keys properly. This alternative mechanism is particularly useful for services implementing key rotation at segment level while maintaining a clean and efficient MPD structure. Given that DASH-IF IOP has explicitly documented this as a valid approach, I believe ExoPlayer should consider supporting it.
Requested Change: I kindly request that ExoPlayer be updated to support this key rotation mechanism by allowing MPDs without default_KID, provided that:
The initialization segment contains a valid PSSH box per DRM system. The media segments contain an sgpd box with a KID value that is correctly handled to request the necessary content key. This change would align ExoPlayer with the latest DASH-IF IOP specifications and improve its compatibility with DASH streams that implement in-band key rotation.
I would greatly appreciate your thoughts on this and whether this is something the ExoPlayer team would consider supporting. Please let me know if you need any additional details.
Best regards,
Do you have an example stream with the described sgpd box?