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

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文件

排查&修复步骤

  1. 验证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
    
  2. 修正本地文件路径格式
    iOS对本地文件路径的处理要求严格,尝试将路径转换为file://开头的URL格式:

    final url = Uri.file(filepath).toString();
    final DeviceFileSource source = DeviceFileSource(url);
    

    同时确保文件路径无空格、中文等特殊字符,且文件已正确写入应用沙盒目录。

  3. 检查iOS权限配置
    在Info.plist中添加音频相关权限声明:

    <key>NSAppleMusicUsageDescription</key>
    <string>需要访问音频功能播放本地文件</string>
    <key>NSSpeechRecognitionUsageDescription</key>
    <string>需要访问音频功能播放本地文件</string>
    

    若需后台播放,额外添加后台模式配置:

    <key>UIBackgroundModes</key>
    <array>
        <string>audio</string>
    </array>
    
  4. 重置依赖与构建缓存
    清理可能的依赖冲突或缓存异常:

    • 删除pubspec.lock文件,执行flutter pub get重新拉取依赖
    • 进入iOS目录,执行pod deintegrate && pod install重置CocoaPods配置
    • 在Xcode中按Cmd+Shift+K清理缓存,重新构建项目
  5. 测试系统原生播放能力
    将目标AAC文件导入iOS设备/模拟器,用系统自带音乐APP尝试播放。若系统也无法播放,说明文件本身存在损坏或格式不兼容;若系统能播放,再聚焦插件的配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 00:12:41