Android平台Flutter开发:如何录制用户语音且不收录后台系统音频?
解决Flutter音频录制时排除系统后台音频的问题
这个问题的核心是音频会话配置不当——默认的录制模式可能允许捕获系统播放的音频,我们需要通过配置让麦克风只专注于外部声音输入,同时让系统自动处理后台音频的播放(比如降低音量或暂停),实现类似Google Meet的效果。
Android 端实现
在Android上,关键是指定音频源为纯麦克风,并将音频使用场景设为语音通信,系统会自动优先麦克风输入并抑制其他音频。
如果用record这类常用录制库,初始化时明确指定音频源:
final recorder = AudioRecorder(); await recorder.start( const RecordConfig( audioSource: AudioSource.microphone, // 仅捕获麦克风输入 encoder: AudioEncoder.aacLc, bitRate: 128000, sampleRate: 44100, ), );
同时确保AndroidManifest.xml里的权限齐全:
<uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
启动录制后,系统会自动降低Spotify这类后台应用的音量(ducking),麦克风就不会录到这些音频了。
iOS 端实现
iOS需要通过配置AVAudioSession的类别和模式,告诉系统当前是语音通话场景,从而抑制后台音频。可以用audio_session库来做配置:
import 'package:audio_session/audio_session.dart'; // 录制前先配置音频会话 final session = await AudioSession.instance; await session.configure(const AudioSessionConfiguration( avAudioSessionCategory: AVAudioSessionCategory.playAndRecord, avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.duckOthers, avAudioSessionMode: AVAudioSessionMode.voiceChat, ));
这里.voiceChat模式会让系统优先麦克风输入,.duckOthers选项会自动降低后台音频的音量,这样麦克风只会录到外部的语音,不会收录系统播放的内容。
避坑提示
- 别用
AudioSource.micAndSystem这类同时捕获系统音频的选项(部分库可能提供) - 测试时注意设备的音频路由,比如蓝牙设备可能导致音频回传,影响测试结果
- 不同录制库的参数命名可能有差异,核心是认准「仅麦克风」和「语音通信场景」这两个配置点
内容的提问来源于stack exchange,提问作者Amar Singh
相关产品推荐
相关产品推荐

