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

使用audio_service与just_audio时如何捕获音频文件URL加载异常

异常捕获与处理方案

1. 主动捕获初始化加载阶段的错误

你调用setAudioSource的时候是异步操作,添加await并套入try-catch即可直接捕获URL无效类的加载错误:

// 位于AudioPlayerHandler初始化逻辑中
try {
  // 替换为你自己的音频源设置逻辑
  await _player.setAudioSource(AudioSource.uri(Uri.parse(你的音频URL)));
} catch (err) {
  // 此处可拿到具体错误信息,同步更新播放状态给上层
  playbackState.add(playbackState.value.copyWith(
    processingState: AudioProcessingState.error,
    errorMessage: "音频链接无效,加载失败",
  ));
  // 可根据需求补充错误处理逻辑:重置播放器、回退到上一级页面等
}

注意:如果不加await,异步抛出的异常无法被当前上下文的try-catch捕获

2. 全局监听所有播放相关错误

给just_audio的AudioPlayer实例绑定错误流监听,所有播放全生命周期的异常(包括加载错误、播放中网络中断、解码失败等)都会从这个流推送,可作为兜底捕获方案避免未处理异常:

// 在AudioPlayer初始化完成后添加监听
_player.errorStream.listen((error) {
  playbackState.add(playbackState.value.copyWith(
    processingState: AudioProcessingState.error,
    errorMessage: error.toString(),
  ));
  // 统一处理错误逻辑
});

3. UI层错误提示

上层UI直接监听audio_service的播放状态流,检测到错误状态时弹出提示即可:

AudioService.playbackState.listen((state) {
  if (state.processingState == AudioProcessingState.error) {
    ScaffoldMessenger.of(context).showSnackBar(
      SnackBar(content: Text(state.errorMessage ?? "播放出现异常,请稍后重试"))
    );
  }
});

内容的提问来源于stack exchange,提问作者Survy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:36:04