Flutter中AudioPlayer 5.2.1设置DeviceFileSource时崩溃求助
iOS端音频播放失败(DarwinAudioError)排查方案
问题代码
Future<void> startPlayer(String filepath) async { try { // 示例路径:getApplicationDocumentsDirectory().path+"/file.aac" final DeviceFileSource source = DeviceFileSource(filepath); await _player?.play(source); } catch (e) { throw SoundPlayerException(e.toString()); } }
报错信息
PlatformException(DarwinAudioError, Failed to set source. AVPlayerItem.Status.failed on setSourceUrl, null)
已知背景
- Android端运行正常,此前iOS端也能正常工作
- 更换flutter_sound插件、测试官方示例代码均无法播放目标AAC文件
排查&修复步骤
验证AAC文件格式兼容性
iOS的AVPlayer仅兼容标准MPEG-4 AAC-LC(低复杂度)编码,不支持HE-AAC等扩展格式。可以用ffmpeg工具检查文件编码:ffmpeg -i file.aac若输出中无
Audio: aac (LC)字样,需重新转码:ffmpeg -i input.aac -c:a aac -b:a 128k output_compatible.aac修正本地文件路径格式
iOS对本地文件路径的处理要求严格,尝试将路径转换为file://开头的URL格式:final url = Uri.file(filepath).toString(); final DeviceFileSource source = DeviceFileSource(url);同时确保文件路径无空格、中文等特殊字符,且文件已正确写入应用沙盒目录。
检查iOS权限配置
在Info.plist中添加音频相关权限声明:<key>NSAppleMusicUsageDescription</key> <string>需要访问音频功能播放本地文件</string> <key>NSSpeechRecognitionUsageDescription</key> <string>需要访问音频功能播放本地文件</string>若需后台播放,额外添加后台模式配置:
<key>UIBackgroundModes</key> <array> <string>audio</string> </array>重置依赖与构建缓存
清理可能的依赖冲突或缓存异常:- 删除
pubspec.lock文件,执行flutter pub get重新拉取依赖 - 进入iOS目录,执行
pod deintegrate && pod install重置CocoaPods配置 - 在Xcode中按
Cmd+Shift+K清理缓存,重新构建项目
- 删除
测试系统原生播放能力
将目标AAC文件导入iOS设备/模拟器,用系统自带音乐APP尝试播放。若系统也无法播放,说明文件本身存在损坏或格式不兼容;若系统能播放,再聚焦插件的配置问题。
内容的提问来源于stack exchange,提问作者Code Runner
相关产品推荐
相关产品推荐

