Flutter中BetterPlayer因ExoPlayer API变更引发空指针报错求助
解决Flutter BetterPlayer与ExoPlayer 2.18.1的DrmSessionManagerProvider兼容问题
问题原因
你使用的ExoPlayer 2.18.1版本对MediaSource.Factory#setDrmSessionManagerProvider方法做了API变更:不再允许传入null值,而当前使用的BetterPlayer版本在调用该方法时传入了null,直接触发空指针异常。
解决方案
方案1:降级ExoPlayer到兼容版本
修改app级build.gradle中的ExoPlayer依赖,指定为2.17.x版本(该版本仍支持null兼容逻辑):
dependencies { // ...其他依赖 implementation ('com.google.android.exoplayer:exoplayer:2.17.1') }
同步gradle后重新运行项目即可。
方案2:升级BetterPlayer到最新适配版本
打开pubspec.yaml,将BetterPlayer升级到最新稳定版(新版本已适配ExoPlayer 2.18+的API):
dependencies: // ...其他依赖 better_player: ^0.0.82 # 替换为实际最新版本号
执行flutter pub get后重新运行项目。
方案3:临时修改BetterPlayer源码应急
如果无法升级/降级,可直接修改BetterPlayer的Android端源码:
- 找到BetterPlayer的
BetterPlayer.kt文件,路径为better_player/android/src/main/kotlin/com/jhomlala/better_player/BetterPlayer.kt - 定位到
buildMediaSource方法(对应报错的第430行) - 将原来传入null的代码替换为显式创建
DefaultDrmSessionManagerProvider实例:
// 原代码 .setDrmSessionManagerProvider(null) // 修改后 .setDrmSessionManagerProvider(DefaultDrmSessionManagerProvider())
重新编译项目即可解决异常。
内容的提问来源于stack exchange,提问作者Deepak
相关产品推荐
相关产品推荐

