Flutter安卓应用使用better_player播放视频触发ExoPlayer异常求助
修复Flutter better_player播放视频时的ExoPlayer DRM异常
这个异常的核心原因是ExoPlayer的API变更:新版本的MediaSource.Factory#setDrmSessionManagerProvider不再默认处理null值(旧版本会自动创建DefaultDrmSessionManagerProvider实例),必须显式传入该类的实例才能兼容原有逻辑。
修复方案
方案1:升级better_player到最新稳定版
- 打开项目的
pubspec.yaml文件,将better_player的依赖版本更新为最新稳定版 - 执行命令:
flutter pub get拉取更新后的依赖 - 重新编译运行项目,新版本的better_player已适配ExoPlayer的这个API变更,能直接解决问题
方案2:手动修改安卓端代码(无法升级依赖时用)
- 找到安卓项目中better_player的相关实现代码(若使用的是第三方依赖,需定位到better_player模块的源码)
- 查找调用
setDrmSessionManagerProvider(null)的代码行,替换为显式创建实例的代码:// 原代码 mediaSourceFactory.setDrmSessionManagerProvider(null) // 修改后代码 mediaSourceFactory.setDrmSessionManagerProvider(DefaultDrmSessionManagerProvider()) - 确保代码顶部引入了对应的类:
import com.google.android.exoplayer2.drm.DefaultDrmSessionManagerProvider; - 重新编译安卓项目即可
额外检查
如果项目中存在自定义的ExoPlayer集成逻辑,也要检查是否直接调用了setDrmSessionManagerProvider方法,确保传入的不是null,而是显式的DefaultDrmSessionManagerProvider实例。
内容的提问来源于stack exchange,提问作者Chetan Khanna
相关产品推荐
相关产品推荐

