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

iOS设备无法播放自定义目录本地音频,模拟器正常(错误-11849)

iOS设备使用just_audio播放自定义目录本地音频报错Error (-11849)

问题详情

尝试播放自定义目录下的本地音频文件时,iOS设备持续抛出以下错误,iOS模拟器可正常播放:

Error (-11849) Operation Stopped 
 Stack #0      AudioPlayer._load (package:just_audio/just_audio.dart:850:9)
<asynchronous suspension>
#1      AudioPlayer._setPlatformActive.setPlatform (package:just_audio/just_audio.dart:1435:28)
<asynchronous suspension>

音频文件路径:
/var/mobile/Containers/Data/Application/55D5A61A-733C-4129-85AE-5757210F3C1A/Documents/Networking/Voice Notes/161/1673927478163913.aac

使用的just_audio版本:^0.9.23

初始化代码:

Future<void> initAudioPlayer() async {
  print(widget.filePath);
  await player.setFilePath(widget.filePath);
}

解决方法

1. 规范路径构建方式

iOS沙盒路径会随应用重装变化,硬编码完整路径易引发权限或路径失效问题,建议通过path_provider包动态获取Documents目录路径:

import 'package:path_provider/path_provider.dart';

Future<void> initAudioPlayer() async {
  final docsDir = await getApplicationDocumentsDirectory();
  // 拼接相对路径
  final filePath = '${docsDir.path}/Networking/Voice Notes/161/1673927478163913.aac';
  await player.setFilePath(filePath);
}

2. 校验文件状态

先确认文件存在且具备可读权限,避免因文件缺失或权限问题导致报错:

import 'dart:io';

Future<void> initAudioPlayer() async {
  final audioFile = File(widget.filePath);
  if (await audioFile.exists()) {
    // 可选:校验文件是否可读
    final isReadable = await audioFile.readAsString().then((_) => true).catchError((_) => false);
    if (isReadable) {
      await player.setFilePath(widget.filePath);
    } else {
      print('文件不可读取');
    }
  } else {
    print('目标音频文件不存在');
  }
}

3. 升级just_audio版本

^0.9.23版本存在部分iOS播放路径的已知问题,升级到最新稳定版可修复此类兼容性问题,修改pubspec.yaml:

dependencies:
  just_audio: ^0.9.34 # 替换为最新稳定版本

4. 排查音频格式兼容性

部分非标准AAC编码的音频文件在iOS设备上可能无法正常解码,可尝试将音频转换为标准AAC(MPEG-4 AAC)或MP3格式后再测试播放。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:25:27