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

Flutter使用camera插件录视频时如何选择音频源及单独控制音频输入输出

音频设备控制相关实现方案

核心问题答复

  • Flutter本身没有内置音频设备管理API,但可通过成熟的第三方插件实现切换音频源、单独控制输入输出设备的需求
  • 若插件无法满足定制化需求,Android/iOS原生均有成熟的实现方案

Flutter端实现方案

  • 所需插件:优先用audio_session + flutter_sound组合,两个插件均全平台适配无额外原生开发成本
    1. 固定音频输出到耳机:初始化音频会话时调用audio_session的configure方法,iOS侧设置AVAudioSessionCategory为playAndRecord,输出路由优先级锁定为耳机;Android侧设置AudioAttributes的usage为媒体播放,强制输出到已连接耳机,只要耳机处于连接状态就不会切到扬声器
    2. 切换麦克风:用flutter_sound的enumerateAudioInputs方法可以拿到所有可用的麦克风设备列表(包含内置麦、耳机麦、蓝牙麦等),给用户做选择后,调用setInputDevice方法指定录制使用的麦克风即可
  • 注意:Android 12及以上系统需要申请RECORD_AUDIO、MODIFY_AUDIO_SETTINGS权限,iOS需要申请NSMicrophoneUsageDescription权限

原生端定制实现方案

如果第三方插件的能力无法匹配你的特殊场景需求,可以按如下原生逻辑实现,再通过Flutter Platform Channel和Flutter侧通信即可。

Android端(Kotlin)

  • 设备枚举:通过系统AudioManager服务的getDevices方法,分别传入GET_DEVICES_INPUTS、GET_DEVICES_OUTPUTS参数获取所有输入输出设备列表
  • 切换麦克风:创建MediaRecorder/AudioRecord实例时,调用setPreferredDevice方法传入选中的麦克风设备即可
  • 锁定输出到耳机:配置音频播放的AudioAttributes为USAGE_MEDIA,同时调用AudioManager.setPreferredDevice强制输出路由指向已连接的耳机设备,可注册ACTION_HEADSET_PLUG广播监听耳机插拔状态动态调整策略

iOS端(Swift)

  • 设备枚举:通过AVAudioSession.sharedInstance().availableInputs获取所有可用麦克风输入设备,currentRoute.outputs获取当前可用输出设备
  • 切换麦克风:调用AVAudioSession.sharedInstance().setPreferredInput(_:)方法传入选中的麦克风设备即可
  • 锁定输出到耳机:配置AVAudioSession的category为.playAndRecord,选项添加.allowBluetooth、.allowBluetoothA2DP,同时调用setPreferredOutputAudioPort(.headphones)强制输出到耳机,监听AVAudioSession.routeChangeNotification通知处理耳机插拔事件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 09:45:09