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

Flutter AssetsAudioPlayer播放本地音频遇UnrecognizedInputFormatException异常

解决AssetsAudioPlayer播放特定MP3后无法播放其他音频的问题

我之前碰到过类似的场景,这个问题核心是特定音频的非标准格式触发ExoPlayer异常,导致播放器实例陷入错误状态无法自动恢复,下面给你几个实用的解决思路:

一、先排查文件路径的转义问题

注意到你提供的文件路径里有&,这是HTML转义后的&字符,有可能AssetsAudioPlayer解析路径时出现偏差,导致读取文件内容异常。先尝试解码路径再传入:

import 'dart:convert';

// 解码HTML转义字符
String decodedFilePath = HtmlEscape(HtmlEscapeMode.unknown).convert(widget.songInfo.filePath);
// 或者用Uri解码更通用的特殊字符
// String decodedFilePath = Uri.decodeFull(widget.songInfo.filePath);

try {
    AudioPlayerClient.getAudioPlayerClient().open(
        Audio.file(decodedFilePath),
    );
} catch (e) {
    print(e);
}

二、捕获异常后强制重置播放器状态

触发UnrecognizedInputFormatException后,ExoPlayer的实例不会自动恢复到可用状态,需要手动停止并释放播放器,甚至重新初始化单例:

try {
    await AudioPlayerClient.getAudioPlayerClient().open(
        Audio.file(widget.songInfo.filePath),
    );
} catch (e) {
    print("播放错误: $e");
    // 先停止当前播放
    await AudioPlayerClient.getAudioPlayerClient().stop();
    // 释放播放器资源
    await AudioPlayerClient.getAudioPlayerClient().release();
    // 如果你的单例支持重置,重新初始化实例
    AudioPlayerClient.resetInstance(); // 需要在你的单例类里实现这个方法
}

三、修复有问题的音频文件本身

有些MP3文件可能存在格式头损坏、编码不标准的情况,系统自带播放器兼容性强能播放,但ExoPlayer的提取器严格遵循标准就会报错。你可以用FFmpeg重新编码这个文件,修复格式问题:

# 用FFmpeg重新编码MP3,生成标准格式的文件
ffmpeg -i "Selena Gomez & Marshmello - Wolves (DawnFoxes.com).mp3" -c:a libmp3lame "fixed_wolves.mp3"

替换原文件后再测试,应该能正常播放且不会影响后续操作。

四、全局监听播放器错误,自动恢复

在初始化AudioPlayerClient的时候,添加错误监听,一旦出现异常就自动重置播放器,避免影响后续使用:

// 初始化时添加错误监听
AudioPlayerClient.getAudioPlayerClient().player.listenToErrors().listen((errorEvent) {
    print("播放器全局错误: ${errorEvent.error}");
    // 自动执行重置流程
    _resetPlayer();
});

// 封装重置方法
Future<void> _resetPlayer() async {
    final player = AudioPlayerClient.getAudioPlayerClient();
    await player.stop();
    await player.release();
    AudioPlayerClient.resetInstance();
}

问题根源解析

你的报错日志显示ExoPlayer的所有提取器都无法识别这个音频流,虽然系统播放器能兼容非标准格式,但ExoPlayer抛出异常后没有正确清理状态,导致单例播放器实例一直处于错误状态,后续播放请求无法被正常处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 09:17:40