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

iOS真机同时使用flutter_audio_capture与audioplayers时麦克风捕获失败

解决iOS真机上flutter_audio_capture与audioplayers插件共存时麦克风失效的问题

问题根源

报错-10851对应iOS音频框架的kAudioUnitErr_InvalidPropertyValue,本质是两个插件的音频会话配置冲突:

  • flutter_audio_capture默认使用录音类音频会话,audioplayers默认使用播放类会话
  • iOS真机对音频会话的权限和模式管理远严于模拟器,冲突会直接导致音频单元初始化失败,麦克风捕获失效

解决方案

1. 统一音频会话配置

使用audio_session插件手动配置全局音频会话为playAndRecord模式,确保两个插件共用同一会话规则:

import 'package:audio_session/audio_session.dart';

Future<void> setupAudioSession() async {
  final session = await AudioSession.instance;
  await session.configure(const AudioSessionConfiguration(
    avAudioSessionCategory: AVAudioSessionCategory.playAndRecord,
    avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.defaultToSpeaker, // 可选:强制用扬声器播放
    avAudioSessionMode: AVAudioSessionMode.spokenAudio,
  ));
}

在启动麦克风捕获或音频播放之前调用此方法,比如在页面初始化时执行:

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

2. 调整插件使用顺序

避免同时初始化两个插件的音频功能:

  • 先启动麦克风捕获(此时会话已切换为录音兼容模式),再启动音频播放
  • 或者在播放音频前,确保会话已切换为playAndRecord模式,而非纯播放模式

3. 完善Info.plist权限配置

确保Info.plist中同时添加麦克风和音频权限声明,缺一不可:

<key>NSMicrophoneUsageDescription</key>
<string>需要使用麦克风进行音频捕获</string>
<key>NSAudioUsageDescription</key>
<string>需要使用音频播放功能</string>

4. 更新插件版本

检查并升级flutter_audio_capture和audioplayers到最新稳定版:

  • 旧版本插件可能存在音频会话管理的兼容性bug,新版本通常会修复跨插件会话冲突问题

5. 手动管理会话激活状态

如果仍有冲突,可在切换音频功能时手动激活/停用会话:

// 启动捕获前激活会话
await AudioSession.instance.setActive(true);

// 停止捕获或播放后停用会话
await AudioSession.instance.setActive(false);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 02:55:29