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

播放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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 01:25:11