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

Flutter中just_audio在Android模拟器无法播放流媒体音频

解决Android模拟器上just_audio无声音问题

1. 修复异步调用时序问题

你的代码中直接调用player.setUrl()和player.play(),但这两个都是异步方法。Android对异步操作的时序要求更严格,播放操作可能在音频源加载完成前执行,导致无声音。必须通过await等待异步操作完成,且要在支持异步的回调中执行:

@override
void initState() {
  super.initState();

  controller = WebViewController()
    ..loadRequest(
      Uri.parse('https://renewfm.org/wp-content/themes/radiostation/showPlaying.php?device=web'),
    );

  // 用Future.microtask执行异步音频操作
  Future.microtask(() async {
    try {
      await player.setUrl('https://renewfm.org/renewfm-stream.php');
      await player.play();
    } catch (e) {
      print('音频操作错误: $e'); // 捕获错误便于排查
    }
  });
}

2. 补充Android 13+必要权限

Android 13(API 33)及以上版本,若应用使用前台服务播放音频,需添加POST_NOTIFICATIONS权限,在AndroidManifest.xml中补充:

<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>

建议同时将just_audio更新到最新稳定版,确保权限适配正常。

3. 配置音频焦点与会话类别

Android系统对音频焦点管理严格,可通过设置音频会话类别确保应用获取到播放权限:

// 需要先导入package:audio_session/audio_session.dart
await AudioSession.instance.configure(AudioSessionConfiguration(
  category: AudioSessionCategory.playback,
  mode: AudioSessionMode.spokenAudio,
  options: AudioSessionOptions.mixWithOthers,
));

4. 排查模拟器音频设置

  • 确认模拟器系统音量已调至最大(并非仅应用内音量)
  • 进入模拟器设置→声音,检查是否开启音频输出、未静音
  • 尝试切换模拟器的音频后端(比如从自动模式改为主机音频)

5. 添加错误监听捕获隐藏问题

通过监听播放器状态和错误,明确是否存在加载失败、解码错误等问题:

player.onPlayerError.listen((error) {
  print('播放器错误: $error');
});

player.onPlayerStateChanged.listen((state) {
  print('当前播放状态: $state');
});

6. 验证音频流兼容性

测试该音频流在Android真机或其他Android播放器(如Chrome浏览器)上是否能正常播放,排除流本身的格式兼容性问题。部分流式音频格式可能在模拟器解码器中支持不佳。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:35:33