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

Flutter中如何仅录制设备自身输出的音频?

如何录制设备自身输出的音频(内录/系统音频)

你遇到的问题是因为sound_stream这类包默认绑定麦克风输入源,要录制设备自身播放的音频,需要调用系统级的音频捕获API,以下是不同场景下的可行方案:

Flutter 环境下的实现

1. 用 flutter_sound + audio_session 组合实现

flutter_sound支持指定音频输入源,配合audio_session配置正确的音频会话即可实现内录:

  • 先配置音频会话,确保会话支持同时播放和录制,并适配平台参数:
final session = await AudioSession.instance;
await session.configure(AudioSessionConfiguration(
  // iOS 配置
  avAudioSessionCategory: AVAudioSessionCategory.playAndRecord,
  avAudioSessionCategoryOptions: AVAudioSessionCategoryOptions.allowBluetooth,
  // Android 配置
  androidAudioAttributes: const AndroidAudioAttributes(
    contentType: AndroidAudioContentType.music,
    usage: AndroidAudioUsage.media,
  ),
));
  • 初始化录制控制器,指定系统音频输入源:
final recorder = RecorderController();
// Android 明确指定远程混音源(对应系统输出音频)
await recorder.start(
  toFile: 'system_recording.aac',
  codec: Codec.aacADTS,
  androidAudioSource: AndroidAudioSource.remoteSubmix,
);

2. 原生插件定制实现

如果跨平台包存在兼容性问题,可直接写原生代码插件:

  • Android:使用MediaRecorder类,将音频源设置为MediaRecorder.AudioSource.REMOTE_SUBMIX,注意需要申请RECORD_AUDIO和MODIFY_AUDIO_SETTINGS权限,部分定制ROM可能限制第三方APP使用该音频源,需提前测试。
  • iOS:使用AVAudioEngine捕获系统音频流,或通过AVCaptureSession添加AVCaptureAudioDataOutput实现,需在Info.plist中添加NSMicrophoneUsageDescription权限描述(即使不使用麦克风,playAndRecord模式也需要该权限)。

额外注意事项

  • 部分Android设备厂商会限制第三方APP录制系统音频,这种情况下可以引导用户使用系统自带的录屏功能(开启"录制系统音频"选项),之后再从录屏文件中提取音频轨道。
  • 避免使用仅支持麦克风输入的音频录制包,这类包未对接系统音频捕获的底层API,无法实现内录需求。

内容的提问来源于stack exchange,提问作者无夜之星辰

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 11:16:01