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,提问作者无夜之星辰
相关产品推荐
相关产品推荐

