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

如何在Flutter应用中实现通话时将音乐输入麦克风共享给对方?

Flutter实现通话时将音乐共享给对方的方案

要实现把本地播放的音乐作为麦克风输入,让WhatsApp等通话应用的对方听到,核心是音频路由与会话配置——Flutter本身没有直接操作系统音频底层的API,需要结合原生能力和合适的插件来实现,以下是具体方案:

核心原理

让系统将音乐播放的音频流重定向到通话应用的输入通道,需要配置音频会话为「播放+录制」模式,同时获取必要的系统权限,部分场景下还需要原生层的音频捕获/注入逻辑。

步骤实现

1. 依赖插件

使用以下Flutter插件简化音频会话配置和音乐播放:

  • audio_session:跨平台音频会话配置工具
  • just_audio:稳定的本地/在线音乐播放库

在pubspec.yaml中添加依赖:

dependencies:
  audio_session: ^0.1.16
  just_audio: ^0.9.34

2. 配置音频会话

应用启动时配置音频会话,让系统允许同时播放和录制,并适配通话场景:

import 'package:audio_session/audio_session.dart';

Future<void> initAudioSession() async {
  final session = await AudioSession.instance;
  // 配置音频会话为通话模式,允许播放+录制
  await session.configure(AudioSessionConfiguration(
    // iOS端配置
    avAudioSessionCategory: AVAudioSessionCategory.playAndRecord,
    avAudioSessionCategoryOptions: 
        AVAudioSessionCategoryOptions.mixWithOthers | 
        AVAudioSessionCategoryOptions.defaultToSpeaker,
    avAudioSessionMode: AVAudioSessionMode.voiceChat,
    // Android端配置
    androidAudioAttributes: AndroidAudioAttributes(
      contentType: AndroidAudioContentType.music,
      usage: AndroidAudioUsage.voiceCommunication,
    ),
    androidAudioFocusGainType: AndroidAudioFocusGainType.gain,
  ));
}

3. 播放音乐

使用just_audio播放音乐,确保播放流纳入配置好的音频会话:

import 'package:just_audio/just_audio.dart';

final AudioPlayer _audioPlayer = AudioPlayer();

Future<void> playMusic(String musicPath) async {
  try {
    await _audioPlayer.setFilePath(musicPath); // 本地文件路径,或用setUrl播放在线链接
    await _audioPlayer.play();
  } catch (e) {
    print('播放失败: $e');
  }
}

4. 平台特定补充处理

Android平台

  • 权限申请:在AndroidManifest.xml中添加必要权限:
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
    <!-- Android 11+ 捕获系统音频需额外权限 -->
    <uses-permission android:name="android.permission.MEDIA_CONTENT_CONTROL" />
    
  • 处理音频焦点冲突:通过audio_session监听焦点变化,避免通话应用抢占焦点后音乐中断。

iOS平台

  • 权限申请:在Info.plist中添加权限描述:
    <key>NSMicrophoneUsageDescription</key>
    <string>需要使用麦克风来共享音乐</string>
    <key>NSMusicLibraryUsageDescription</key>
    <string>需要访问音乐库来播放本地音乐</string>
    
  • iOS系统对音频捕获限制较严格,部分机型需借助原生AVAudioEngine将音乐流直接路由到录制通道,或开启系统自带的「音频共享」功能辅助实现。

关键注意事项

  • 通话应用(如WhatsApp)可能强制抢占音频会话,需测试不同应用的兼容性
  • 部分安卓设备因硬件限制无法实现音频流重定向,需针对性适配
  • 必须动态申请权限,仅静态权限声明无法在运行时获取权限

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 15:10:39