You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ExoPlayer is unable to play DASH video with multiple content protection keys and fails with error:
com.google.android.exoplayer2.demo E/ExoPlayerImplInternal: Renderer error.
com.google.android.exoplayer2.ExoPlaybackException
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:750)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:553)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:560)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:306)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
Caused by: android.media.MediaCodec$CryptoException: Error decrypting data: requested key has not been loaded
at android.media.MediaCodec.native_queueSecureInputBuffer(Native Method)
at android.media.MediaCodec.queueSecureInputBuffer(MediaCodec.java:2480)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.feedInputBuffer(MediaCodecRenderer.java:741)
at com.google.android.exoplayer2.mediacodec.MediaCodecRenderer.render(MediaCodecRenderer.java:553)
at com.google.android.exoplayer2.ExoPlayerImplInternal.doSomeWork(ExoPlayerImplInternal.java:560)
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:306)
at android.os.Handler.dispatchMessage(Handler.java:98)
at android.os.Looper.loop(Looper.java:154)
at android.os.HandlerThread.run(HandlerThread.java:61)
I saw one related topic in issue tracker: #1824 However it is closed with no actions done. There was a discussion about other ways to implement it and how to interpret DASH specs, but time has passed, and there is more clear explanation in newer spec what should client (player) do (See http://dashif.org/wp-content/uploads/2017/09/DASH-IF-IOP-v4.1-clean.pdf chapter 7.7.9. Client Interactions with DRM Systems):
Clients SHALL explicitly request all required media keys signaled by default KIDs and SHALL NOT assume that requesting one key from this set will implicitly make others available.
Multi-key is important in situation with different quality levels, because we need to apply different protection policies to different types of content. E.g. client needs a high security in-seat airline-owned device to play 4K video, but he may need medium security for 1080p and below that on any device. Using different keys is the technical mechanism that enables DRM system to enforce such different rules.
Reproduction steps
In the ExoPlayer demo app version 2.6.1 add next content to the media.exolist.json
Note that for the specific case where audio and video are encrypted with separate keys, you can enable support by setting multiSession = true when instantiating DefaultDrmSessionManager.
Enabling multiSession = true probably works for content where different representations within an adaptation set (e.g. HD vs SD video) as well, however I think adaptation wont be seamless. Ensuring it is, and that playback proceeds correctly, is what's being tracked by this issue.
Issue description
ExoPlayer is unable to play DASH video with multiple content protection keys and fails with error:
I saw one related topic in issue tracker: #1824 However it is closed with no actions done. There was a discussion about other ways to implement it and how to interpret DASH specs, but time has passed, and there is more clear explanation in newer spec what should client (player) do (See http://dashif.org/wp-content/uploads/2017/09/DASH-IF-IOP-v4.1-clean.pdf chapter 7.7.9. Client Interactions with DRM Systems):
Multi-key is important in situation with different quality levels, because we need to apply different protection policies to different types of content. E.g. client needs a high security in-seat airline-owned device to play 4K video, but he may need medium security for 1080p and below that on any device. Using different keys is the technical mechanism that enables DRM system to enforce such different rules.
Reproduction steps
Link to test content
https://media.axprod.net/TestVectors/v7-MultiDRM-MultiKey/Manifest_1080p.mpd
Version of ExoPlayer being used
ExoPlayer 2.6.1
Device(s) and version(s) of Android being used
Not device specific. For bugreport used Nexus 9 with Android 7.1.1
A full bug report captured from the device
Bugreport sent by email
The text was updated successfully, but these errors were encountered: