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

Flutter Audioplayers:iOS/macOS端如何播放字节数据?

Flutter iOS/macOS 播放Amazon Polly字节数据解决方案

方案一:基于audioplayers通过临时文件播放

由于BytesSource仅支持Android,iOS/macOS端可将Polly返回的字节数据写入临时本地文件,再通过UrlSource播放:

  1. 写入字节数据到临时文件
    借助path_provider包获取系统临时目录,创建临时音频文件并写入数据:

    import 'dart:io';
    import 'package:path_provider/path_provider.dart';
    
    Future<String> writeAudioBytesToTempFile(Uint8List audioBytes) async {
      final tempDir = await getTemporaryDirectory();
      final tempFile = File('${tempDir.path}/polly_temp_audio.mp3');
      await tempFile.writeAsBytes(audioBytes);
      return tempFile.path;
    }
    
  2. 播放临时文件
    拿到临时文件路径后,用UrlSource加载并播放,播放完成后删除临时文件释放空间:

    final audioBytes = await getPollyAudioBytes(); // 替换为你的Polly字节数据获取逻辑
    final filePath = await writeAudioBytesToTempFile(audioBytes);
    
    final player = AudioPlayer();
    await player.play(UrlSource(filePath));
    
    // 播放完成后清理临时文件
    player.onPlayerComplete.listen((_) {
      final tempFile = File(filePath);
      if (tempFile.existsSync()) {
        tempFile.deleteSync();
      }
    });
    

方案二:换用just_audio直接播放字节数据

若不想处理临时文件,推荐使用just_audio包,它的BytesAudioSource支持跨平台直接播放字节数据,无需额外转换:

  1. 添加依赖
    在pubspec.yaml中引入最新版本的just_audio:

    dependencies:
      just_audio: ^0.9.36 # 请替换为最新版本
    
  2. 直接播放字节数据
    无需文件操作,直接传入Polly返回的字节数据即可:

    import 'package:just_audio/just_audio.dart';
    
    final audioBytes = await getPollyAudioBytes(); // 替换为你的Polly字节数据获取逻辑
    final player = AudioPlayer();
    
    await player.setAudioSource(BytesAudioSource(audioBytes));
    await player.play();
    

方案选择

  • 若想继续使用audioplayers,方案一可满足需求,但需额外处理临时文件的创建与删除;
  • 方案二更简洁高效,跨平台支持更完善,是优先推荐的替代方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 01:05:18