安卓audio之Remote_Submix

发布于:2025-07-09 ⋅ 阅读:(19) ⋅ 点赞:(0)

参考文档:
Audio-内录实现原理(上)
Audio-内录实现原理(下)

android audiopolicy 选择录音设备

Audio AudioPolicy

Android autoMotive 多区音频-路由策略

安卓官方

一、实现原理

在这里插入图片描述

REMOTE_SUBMIX是Android系统提供的内录(Internal Audio Capture)方案,用于捕获设备音频输出(如扬声器播放的声音)而非麦克风输入。其核心机制如下:

  1. HAL层数据流转

    • 音频数据不写入物理设备,而是由HAL层(audio.r_submix.default.so)开辟独立缓冲区,实现软件级混音分流
    • 数据流路径:AudioFlingerRemoteSubmix HAL模块 → 应用层AudioRecord
  2. 静音与无感录制

    • 内录时扬声器静音(避免回声),但通过HAL缓冲区的读写分离,实现录制过程不影响正常播放。

二、应用场景

场景 说明
系统录屏 默认录屏功能使用REMOTE_SUBMIX捕获系统音轨(如游戏、视频声音),无需麦克风。
投屏镜像 投屏工具(如Scrcpy)通过其实现声音同步传输至接收端(如电视)。
云控平台 远程设备管理(如车机导航)需双向音频时,内录系统播报声并回传到控制端。
媒体应用测试 自动化测试中捕获音频输出,验证播放内容是否正确。

三、关键函数与流程

1. 音频源设置
// 指定音频源为REMOTE_SUBMIX
builder.setAudioSource(MediaRecorder.AudioSource.REMOTE_SUBMIX);
2. 动态路由策略

通过setAudioPlaybackCaptureConfig实现更灵活的内录控制:

// 创建动态捕获配置
AudioPlaybackCaptureConfiguration config = 
    new AudioPlaybackCaptureConfiguration.Builder(mediaProjection)
    .addMatchingUsage(AudioAttributes.USAGE_MEDIA) // 捕获媒体类音频
    .build();

// 应用到AudioRecord
AudioRecord record = new AudioRecord.Builder()
    .setAudioPlaybackCaptureConfig(config)
    .setAudioFormat(format)
    .build();
  • 优势:支持录制通话/VoIP音频(需MediaProjection)、扬声器发声与录制并行。

网站公告

今日签到

点亮在社区的每一天
去签到