Android 13设备ExoPlayer DRM会话报错:IllegalArgumentException: {}: BAD_VALUE
解决ExoPlayer 2.18.2在Android 13设备上的DRM BAD_VALUE错误
可能的修复方向
1. 排查DRM参数格式问题
Android 13对MediaDrm的参数校验比旧版本严格很多,空值、格式不匹配的参数都会直接触发BAD_VALUE异常:
- 检查构建
MediaDrm.KeyRequest时传入的optionalParameters,别传空HashMap或者值类型不对的键值对,比如把数字类型的值当成字符串传。 - 去掉那些旧Android版本允许但Android 13不兼容的冗余参数,比如空字符串参数。
2. 升级ExoPlayer到新版本
ExoPlayer 2.18.2没有针对Android 13的DRM行为变化做适配,官方在2.19.x及以后版本修复了这类兼容性问题:
- 直接升级到2.19.x或更高稳定版,大概率能解决这个参数校验导致的异常。
3. 规范DRM会话生命周期管理
Android 13对DRM会话的资源管理要求更严:
- 确保不用的DRM会话及时调用
MediaDrm.closeSession()释放,别让无效会话占用资源。 - 避免重复创建同一内容的DRM会话,Android 13不允许这种操作。
4. 验证DRM内容与证书兼容性
- 检查内容的DRM加密轨道信息,确认没有参数缺失或格式错误的情况,Android 13对轨道参数的合法性校验更严格。
- 确认使用的DRM证书(比如Widevine证书)是兼容Android 13的,旧证书可能被判定为无效参数。
日志排查技巧
如果上面的方法都没用,重点看异常触发前的DRM相关日志:
- 定位抛出
IllegalArgumentException的具体代码位置,看是密钥请求阶段还是会话创建阶段出的问题。 - 打印
MediaDrm相关参数的具体值,对比Android 12和13下的参数差异,找出不兼容的项。
内容的提问来源于stack exchange,提问作者Bartolomé Mejía
相关产品推荐
相关产品推荐

