You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Exoplayer离线播放Widevine DRM内容报MediaDrmStateException问题咨询

ExoPlayer Widevine DRM离线播放问题解答

1. MediaDrmStateException错误产生原因

你遇到的错误堆栈指向底层MediaDrm.provideKeyResponse方法调用失败,属于Android DRM框架验证新返回的许可证密钥响应不通过触发的通用错误,具体原因和配置的DRM参数逻辑冲突有关:

  • 配置的license_duration_seconds(300秒,许可证本身有效期)远小于playback_duration_seconds(600秒,累计可播放时长)和rental_duration_seconds(900秒,租约总时长),首次获取的许可证到期后发起新的许可证请求时,没有正确携带原有离线许可证的会话标识,服务端返回的密钥响应和本地已存在的离线内容会话不兼容
  • 部分场景下如果租约剩余时长不足,服务端返回的许可证参数和本地缓存的内容密钥ID匹配校验失败,也会触发该错误

2. playback_duration归零后的续期方案

可以通过续期许可证恢复播放,无需重新下载内容,具体实现方案如下:

  • 初始化DefaultDrmSessionManager时开启密钥续期开关:调用setKeyRenewalEnabled(true),同时绑定对应内容的OfflineLicenseHelper实例处理离线许可证操作
  • 提前监听播放剩余时长,在playback_duration_seconds_remaining剩余30秒左右主动触发续期请求,不要等时长归零后再处理,避免播放中断
  • 续期请求必须携带当前内容对应的离线许可证密钥集ID,向DRM服务端申请同内容ID、同会话的playback_duration续期,请求类型指定为KEY_TYPE_OFFLINE,不要使用在线播放的许可证请求类型
  • 拿到有效许可证响应后,调用OfflineLicenseHelper.updateLicense()覆盖本地存储的旧许可证,再重新初始化DrmSession即可恢复播放

3. rental_duration到期后的播放方案

无需重新下载内容文件,仅获取新的许可证即可恢复播放。
Widevine DRM体系中加密媒体文件和许可证是完全分离存储的,媒体文件仅和内容对应的密钥ID绑定,和许可证的有效期参数无关。rental_duration仅为许可证的属性,到期后只需向DRM服务端申请同内容ID的新离线许可证,写入本地DRM存储后即可直接播放原有缓存内容。


内容的提问来源于stack exchange,提问作者user_1989

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 22:06:04