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

Flutter iOS录制WAV音频无法在Android用just_audio播放求助

问题:Flutter中iOS录制的WAV文件在Android用just_audio播放报Source error

我正在开发一款基于Flutter的音频录制与回放应用,使用record库录制音频,just_audio库处理播放。

在iOS模拟器中通过以下代码录制WAV格式音频:

await record.start(
        path: path,
        encoder: AudioEncoder.wav, // 默认值
        bitRate: 128000, // 默认值
        samplingRate: 44100, // 默认值
      );

将录制好的文件上传至Google Drive后,在Android模拟器中下载该文件,调用await player.setFilePath(filePath)时抛出Source error异常,但相同操作在iOS设备/模拟器中可正常运行。


可能的原因及解决方法

1. WAV文件格式兼容性问题

iOS上record库生成的WAV可能采用了Android不兼容的编码或文件头格式(比如非PCM压缩编码、字节序差异)。

  • 用音频工具(如Audacity)检查iOS录制的WAV是否为PCM无压缩格式,Android的just_audio对非标准WAV支持有限。
  • 若确认是编码问题,可在上传/下载后用flutter_ffmpeg转码为标准PCM WAV:
    await FlutterFFmpeg().execute('-i $inputPath -acodec pcm_s16le $outputPath');
    

2. 文件权限问题

Android模拟器下载文件后,可能未获取到文件读取权限:

  • 在AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <!-- Android 13+ 需添加媒体权限 -->
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO"/>
    
  • 用permission_handler库动态申请权限后再尝试播放。

3. 文件路径访问限制

Android公共目录(如下载目录)的文件可能无法直接通过绝对路径访问:

  • 先验证文件是否存在且可读取:
    File audioFile = File(filePath);
    if (await audioFile.exists()) {
      print("文件存在,大小:${await audioFile.length()}");
    } else {
      print("文件不存在");
    }
    
  • 将文件复制到应用私有目录后播放:
    final appDir = await getTemporaryDirectory();
    final targetPath = '${appDir.path}/audio.wav';
    await audioFile.copy(targetPath);
    await player.setFilePath(targetPath);
    

4. just_audio调用方式调整

尝试替换setFilePath为setUrl,传入本地文件的URL格式路径:

await player.setUrl('file://$filePath');

同时检查just_audio库版本是否为最新,避免版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 12:42:10