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
相关产品推荐
相关产品推荐

