播放URL音频时出现Unexpected error playing stream错误求助
解决just_audio流式播放MP3时因FlacLibrary引发的InstantiationError崩溃问题
核心问题定位
你遇到的崩溃是由于ExoPlayer的FLAC扩展库初始化失败导致的,尽管播放的是MP3文件,但ExoPlayer的DefaultExtractorsFactory会尝试加载所有可用的媒体提取器,FLAC扩展库的依赖冲突或版本不匹配触发了InstantiationError。结合你提到的项目是2021年基于just_audio dev分支开发的情况,核心原因大概率是ExoPlayer版本升级后的兼容性问题。
解决方案步骤
1. 统一ExoPlayer依赖版本
在Android项目的build.gradle(项目级或模块级)中强制指定与当前just_audio兼容的ExoPlayer版本,避免版本冲突:
configurations.all { resolutionStrategy.force 'com.google.android.exoplayer:exoplayer-core:2.19.1' resolutionStrategy.force 'com.google.android.exoplayer:exoplayer-flac:2.19.1' }
注:版本号需匹配just_audio当前依赖的ExoPlayer版本,可查看just_audio的pubspec.yaml文件确认。
2. 排除不必要的FLAC扩展库
如果你的项目不需要FLAC格式解码支持,可以直接排除FLAC扩展依赖,避免加载相关库:
dependencies { implementation('com.google.android.exoplayer:exoplayer-core:2.19.1') { exclude group: 'com.google.android.exoplayer', module: 'exoplayer-flac' } }
3. 清理缓存并重新构建
- 执行
flutter clean清理Flutter项目缓存 - 删除Android端的
.gradle文件夹和build文件夹 - 重新执行
flutter pub get和flutter run,确保依赖完全重新下载并构建
4. 验证HTTP响应的文件一致性
尽管你已确认Content-Type为audio/mpeg,仍需检查:
- 流文件的魔数(magic number)是否为MP3格式的
ID3或FFF开头 - HTTP服务器是否返回了正确的文件内容,无额外的字节或格式污染
错误原因详解
错误栈中的java.lang.InstantiationError: com.google.android.exoplayer2.util.LibraryLoader表示FLAC扩展库初始化时无法实例化核心库的LibraryLoader类,常见触发场景:
- ExoPlayer核心库与扩展库版本不匹配,类结构变更导致兼容性断裂
- 项目依赖缓存中残留了旧版本的ExoPlayer文件,新旧版本混合加载引发冲突
- 自定义后端的响应导致ExoPlayer误判文件格式,触发FLAC提取器加载
内容的提问来源于stack exchange,提问作者Pato05
相关产品推荐
相关产品推荐

