Исключение MediaDrmStateException: Не удалось обработать ключевой ответ: Общая ошибка DRM

#android #exoplayer2.x #drm #widevine #android-drm

Вопрос:

Я использую Exoplayer для воспроизведения содержимого DRM Widevine для воспроизведения контента в автономном режиме. У меня есть следующие параметры, установленные для моей политики widevine для целей тестирования: «rental_duration_seconds»: 900 «playback_duration_seconds»: 600 «license_duration_seconds»: 300

Контент хорошо воспроизводится до 10 минут(playback_duration_seconds) после загрузки. Напишите, что если я буду играть, библиотека Exoplayer попытается запросить лицензию. Вызов по почте лицензии-это успех, но ниже неудачи:

 E/EventLogger: playerFailed [eventTime=2.14, mediaPos=0.00, window=0, period=0
com.google.android.exoplayer2.ExoPlaybackException: Source error
at com.google.android.exoplayer2.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:580)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:223)
at android.os.HandlerThread.run(HandlerThread.java:67)
Caused by: com.google.android.exoplayer2.drm.DrmSession$DrmSessionException: android.media.MediaDrm$MediaDrmStateException: Failed to handle key response: General DRM error
at com.google.android.exoplayer2.drm.DefaultDrmSession.onError(DefaultDrmSession.java:514)
at com.google.android.exoplayer2.drm.DefaultDrmSession.onKeysError(DefaultDrmSession.java:509)
at com.google.android.exoplayer2.drm.DefaultDrmSession.onKeyResponse(DefaultDrmSession.java:494)
at com.google.android.exoplayer2.drm.DefaultDrmSession.access$100(DefaultDrmSession.java:58)
at com.google.android.exoplayer2.drm.DefaultDrmSession$ResponseHandler.handleMessage(DefaultDrmSession.java:554)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:223) 
at android.os.HandlerThread.run(HandlerThread.java:67) 
Caused by: android.media.MediaDrm$MediaDrmStateException: Failed to handle key response: General DRM error
at android.media.MediaDrm.provideKeyResponse(Native Method)
at com.google.android.exoplayer2.drm.FrameworkMediaDrm.provideKeyResponse(FrameworkMediaDrm.java:228)
at com.google.android.exoplayer2.drm.DefaultDrmSession.onKeyResponse(DefaultDrmSession.java:482)
at com.google.android.exoplayer2.drm.DefaultDrmSession.access$100(DefaultDrmSession.java:58) 
at com.google.android.exoplayer2.drm.DefaultDrmSession$ResponseHandler.handleMessage(DefaultDrmSession.java:554) 
at android.os.Handler.dispatchMessage(Handler.java:106) 
at android.os.Looper.loop(Looper.java:223) 
at android.os.HandlerThread.run(HandlerThread.java:67) 
 

Вопросы:

  1. Причина вышеуказанной ошибки.
  2. Во время воспроизведения, если воспроизведение останавливается из-за того, что playback_duration_seconds_remaining становится 0, можно ли продлить лицензию и возобновить воспроизведение? Как?
  3. Когда срок действия rental_duration истечет, можно ли воспроизводить контент с новыми лицензионными ключами без повторной загрузки файлов контента?

Комментарии:

1. Позволяет ли ваш сервер лицензий продлевать действие этой конкретной лицензии на контент? Кроме того, вы не получаете новые ключи после обновления, он просто удаляет существующие значения, поэтому не нужно ничего повторно загружать.

2. @aergistal, как мне убедиться, что сервер лицензий разрешает продление. У меня есть значение can_renew, равное true. Существуют ли какие-либо другие параметры, которые определяют это? Exoplayer поддерживает обновление вручную? Каковы методы, которые это делают?