Android录屏内部音频录制完全指南:原理、限制与方案选型

一、问题背景

安卓录屏时"只有画面没有声音"是高频问题。很多人以为是录屏APP的bug,实际上大部分情况是系统能力限制音频来源配置不对。这篇文章把安卓录屏涉及的音频机制、参数设置和方案选型讲清楚。

二、Android录屏的音频机制

1. 三种音频来源

安卓录屏的音频来源一般有三种:

  • 内部音频(Internal Audio):直接捕获系统输出的音频流,不经过麦克风。音质干净、无环境噪音,是录网课、游戏、视频的理想方式。
  • 麦克风(Microphone):通过MIC录制外部声音,会收录环境噪音和人声。
  • 静音(Mute):只录画面。

2. 为什么内部音频需要Android 10+

内部音频捕获依赖Android 10(API 29)引入的AudioPlaybackCaptureAPI。核心类是AudioPlaybackCaptureConfiguration,配合MediaProjection使用。其工作原理是:

  1. 通过MediaProjectionManager.createScreenCaptureIntent()获取用户授权
  2. 构建AudioPlaybackCaptureConfiguration,指定允许捕获的音频usage
  3. 用该配置创建AudioRecord,作为MediaCodec/MediaMuxer的音频源

在Android 9(API 28)及以下,系统没有开放这个接口,应用无法直接捕获其他APP的播放音频,这是系统级限制,任何第三方录屏APP都无法绕过 。低版本只能通过麦克风录制扬声器外放的声音。

关键代码大致如下(仅说明原理):

kotlin 复制代码
val config = AudioPlaybackCaptureConfiguration.Builder(mediaProjection)
    .addMatchingUsage(AudioAttributes.USAGE_MEDIA)
    .addMatchingUsage(AudioAttributes.USAGE_GAME)
    .build()

val audioFormat = AudioFormat.Builder()
    .setEncoding(AudioFormat.ENCODING_PCM_16BIT)
    .setSampleRate(44100)
    .setChannelMask(AudioFormat.CHANNEL_IN_MONO)
    .build()

val audioRecord = AudioRecord.Builder()
    .setAudioFormat(audioFormat)
    .setAudioPlaybackCaptureConfig(config)
    .build()

3. 为什么有些APP录不到声音

即使在Android 10+上,也不是所有APP的声音都能被捕获。被录制的APP必须满足两个条件:

  1. targetSdkVersion>=29(目标版本是Android 10+)
  2. APP自身的AudioAttributes没有设置ALLOW_CAPTURE_BY_NONE

对于播放器类APP,可以通过AudioManager.setAllowedCapturePolicy()控制:

  • ALLOW_CAPTURE_BY_ALL:任何应用都能捕获
  • ALLOW_CAPTURE_BY_SYSTEM:仅系统应用可捕获
  • ALLOW_CAPTURE_BY_NONE:禁止任何捕获

银行、付费视频、DRM 内容通常会设为 ALLOW_CAPTURE_BY_NONE。这是版权保护,不是录屏工具能解决的。

4.一个常见坑:蓝牙设备

连接蓝牙耳机/音箱时,音频路由可能走蓝牙设备,导致录屏捕获不到声音。录屏前断开蓝牙、确保声音从手机扬声器输出,是简单有效的排查手段。

更详细的排查清单见:录屏没有声音怎么办?安卓录屏无声排查指南

三、录屏参数怎么设

参数 推荐值 说明
分辨率 1080P(与屏幕一致即可) 超过屏幕原生分辨率没有意义
帧率 30fps 录教程/网课足够;录游戏可上 60fps
码率 1080P 30fps 中等码率,一小时约 200~400MB
音频来源 内部音频 录网课/游戏用;需要人声讲解用麦克风

码率和体积直接相关。1080P/30fps下:

  • 低码率:快速运动画面会出现马赛克,但文件小
  • 中码率:大部分场景平衡
  • 高码率:画质好但文件大,收益递减明显

建议录完回放确认,不要盲目拉满参数。

四、方案选型

方案 1:系统自带录屏

大部分国产ROM下拉控制中心自带录屏。优点是免安装、兼容性好;缺点是:

  • 内部音频支持参差不齐
  • 参数往往不可调
  • 部分品牌强制加水印
  • 文件存储路径不统一

方案 2:第三方APP

如果需要稳定录制内部音频、可调参数,推荐一个工具:快录屏

官网下载(APK直装,Android 10.0+):。

特点:

  • 支持Android 10+内部音频录制
  • 分辨率/帧率/码率可调,最高1080P/30fps
  • 支持内部音频、麦克风、静音三种模式切换
  • 无水印,视频保存在本地
  • 安装包约6.3MB,免费,不需要注册

注意录屏文件默认保存在内部存储Movies/ScreenRecorder/目录。

内部音频的具体开启步骤:安卓手机怎么录内部声音?完整步骤

方案 3:电脑投屏录屏

通过scrcpy等工具投屏到电脑,用OBS录制。画质和可控性最好,但需要电脑和数据线,适合桌面场景,不适合随手录。

五、排查清单(录不到声音时)

  1. 确认Android版本>=10(内部音频前提)
  2. 确认录屏工具的音频来源选的是"内部音频"而非静音
  3. 换一个普通APP(如系统音乐播放器)测试,判断是否是被录APP自身禁止了捕获
  4. 断开蓝牙设备
  5. 确认媒体音量不为零
  6. 确认录屏APP已获得麦克风权限(即使录内部音频,部分ROM仍需要该权限)

六、总结

  • 内部音频录制是Android 10+才有的能力,低版本无解
  • 被录APP可主动禁止音频捕获,这是版权保护,无法绕过
  • 参数不是越高越好,1080P/30fps/中码率适用于绝大多数场景
  • 需要稳定、可调、无水印的方案,可以用快录屏这类第三方工具
相关推荐
律宏阔12 小时前
Android 手机通过 adblib 使用 ADB Wi-Fi 控制 Android 9 开发板
android
律宏阔12 小时前
Android App 里实现开机动画替换
android
消失的旧时光-194313 小时前
Android 系统层扫盲 05:Android 开机后发生了什么?从 Bootloader 到 Launcher
android·zygote·fork·aosp·cow
小鱼爱吃草灬灬13 小时前
实时面试辅助排查清单:音频来源、问题输入与上下文
面试·职场和发展·音视频
可乐鸡翅yeah_13 小时前
HLS 自动化拨测与手动调试分工,流媒体线上监控体系建设实践
运维·自动化·测试用例·音视频·媒体·m3u8·音视频在线播放
hunterandroid14 小时前
Android 线上卡顿治理:从布局层级到主线程负载的全链路排查
android
恋猫de小郭14 小时前
Dart Skills CLI 1.0 :AI 时代的 Dart 交付支持
android·前端·flutter
2501_9160074714 小时前
使用Apple Dashboards显示和自定iOS应用性能指标与数据可视化指南
android·ios·小程序·https·uni-app·iphone·webview
欧特克_Glodon15 小时前
OpenCV计算机视觉开发入门与实践<三十五>:开发视频播放器
c++·opencv·计算机视觉·音视频
蜡台15 小时前
# 已解决|MySQL 8\.4\.11 密码正确仍报错1045 \(28000\) Access denied 终极修复方案
android·mysql·adb