Escrcpy 音频转发完全指南:Android 11+ 音频捕获、音源选择与编解码调优
2026/9/15 18:00:14 网站建设 项目流程

Escrcpy 音频转发完全指南:Android 11+ 音频捕获、音源选择与编解码调优

【免费下载链接】escrcpy📱 Display and control your Android device graphically with scrcpy.项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy

导读:本文围绕 escrcpy 所集成的 scrcpy(v3.2)音频转发能力展开,系统讲解 Android 11+ 设备音频捕获的版本前提、--no-audio等开关参数、--audio-source全部音源语义、编解码器/编码器选择、码率与缓冲调优,并结合 escrcpy 仓库中的偏好配置模型与 scrcpy 进程封装源码,给出可在真实设备上直接复制的命令行与图形界面配置方案。读完本文,你将能够按需开启/关闭音频、把手机当作录音笔、切换麦克风音源、修复 Opus 编码器缺失报错,并针对卡顿音质做缓冲优化。


一、音频转发的前置条件:Android 版本决定一切

音频转发(Audio forwarding)并不是所有 Android 设备都能开启的,它严格依赖系统版本,官方支持基线为Android 11(API 30)及以上

设备系统版本音频捕获表现
Android 12 及以上开箱即用(out-of-the-box),无需任何额外操作
Android 11需要保证启动 scrcpy 时设备屏幕处于解锁状态;启动瞬间会短暂弹出一个伪装弹窗,让系统误以为 shell 应用处于前台,否则音频捕获会失败
Android 10 及更早无法捕获音频,音频会被自动禁用

这一版本门槛在 escrcpy 仓库的文档中也有对应说明:docs/en/reference/scrcpy/index.md 的 Prerequisites 一节明确指出「Audio forwarding is supported for API >= 30 (Android 11+)」,同时基础镜像门槛是 Android 5.0(API 21)。

失败兜底:音频丢了,画面不能丢

音频默认开启,但设计原则是「音频不可用时绝不让 scrcpy 整体失败」,因此:

  • 如果音频捕获失败,镜像会自动降级为仅视频继续运行;
  • 只有显式传入--require-audio时,音频缺失才会被视为致命错误导致进程退出:
scrcpy --require-audio # 音频捕获失败则直接报错退出

二、开关音频:--no-audio--audio-dup

完全关闭音频

scrcpy --no-audio

如果只想关闭音频播放(仍然捕获/录制),可参考 video.md 的 No playback 一节(对应--no-playback)。

音频重复播放(Duplication)

默认音源output会把设备播放的音频全部「搬」到电脑端,设备自身静音。如果你希望镜像的同时设备也在出声,可以使用 Android 13+ 专属的重复播放能力:

scrcpy --audio-source=playback --audio-dup # 简写:--audio-dup 会自动隐含 --audio-source=playback scrcpy --audio-dup

注意两个限制:需要Android 13 及以上;且该方式依赖系统对应用播放内容的捕获,应用可以选择退出(opt-out),因此不一定能捕获到全部音频。

三、纯音频模式:把手机变成无线麦克风/录音笔

音频可以和视频、控制完全解耦,Escrcpy/scrcpy 允许只转发音频:

# 仅播放音频:禁用视频与控制 scrcpy --no-video --no-control # 不开任何窗口、只播放音频(--no-window 隐含 --no-video 与 --no-control) scrcpy --no-window # 使用 Ctrl+C 中断

纯音频模式下延迟不再是关键指标,可以适当加大缓冲来消除爆音,见后文「缓冲调优」。

一个非常实用的组合:把设备当作录音笔,直接在电脑上录制

scrcpy --audio-source=mic --no-video --no-playback --record=file.opus

即:捕获设备麦克风 → 不做视频 → 不在设备/电脑上实时播放 → 直接录制为 Opus 文件。

四、音源选择:--audio-source十一种取值详解

默认转发的是设备音频输出(output)。--audio-source允许切换到麦克风、通话声道等,取值及对应 AndroidMediaRecorder.AudioSource映射如下:

取值语义Android 音频源映射
output(默认)转发全部音频输出,设备端播放被静音REMOTE_SUBMIX
playback捕获应用播放的音频(应用可 opt-out,不一定完整)基于系统捕获 API(Android 13+)
mic捕获麦克风MIC
mic-unprocessed捕获未经处理的原始麦克风声音UNPROCESSED
mic-camcorder针对录像调音的麦克风捕获(可用时与摄像头同朝向)CAMCORDER
mic-voice-recognition针对语音识别调音的麦克风捕获VOICE_RECOGNITION
mic-voice-communication针对语音通话调音(可启用回声消除、自动增益)VOICE_COMMUNICATION
voice-call捕获语音通话VOICE_CALL
voice-call-uplink仅捕获通话上行(本机说话声)VOICE_UPLINK
voice-call-downlink仅捕获通话下行(对方说话声)VOICE_DOWNLINK
voice-performance面向现场演出(如卡拉 OK)处理,同时包含麦克风与设备播放VOICE_PERFORMANCE

典型用法:

scrcpy --audio-source=mic # 用设备麦克风代替设备扬声器输出

在 escrcpy 的偏好设置模型中,上述全部音源都已内置为可选项,见 desktop/src/models/preference/audio/index.js 中audioSourceoptions列表(playbackmicmic-unprocessedmic-camcordermic-voice-recognitionmic-voice-communicationvoice-callvoice-call-uplinkvoice-call-downlinkvoice-performance),选中后会以--audio-source=<value>追加到 scrcpy 启动参数中。

五、编解码器:--audio-codec与 Opus 报错修复

音频编解码器可选opus(默认)、aacflacraw(未压缩的 PCM 16-bit 小端):

scrcpy --audio-codec=opus # 默认 scrcpy --audio-codec=aac scrcpy --audio-codec=flac scrcpy --audio-codec=raw

高频坑:如果设备没有 Opus 编码器,会报如下错误:

Failed to initialize audio/opus, error 0xfffffffe

解决方案就是切换到 AAC:

scrcpy --audio-codec=aac

高级:--audio-codec-options透传 MediaFormat 参数

--audio-codec-options可以把任意参数直接透传给 Android 的MediaFormat(具体键值可查阅scrcpy --help与 manpage)。例如调整 FLAC 压缩级别:

scrcpy --audio-codec=flac --audio-codec-options=flac-compression-level=8

这里flac-compression-level对应MediaFormat.KEY_FLAC_COMPRESSION_LEVEL(0 为最快、8 为最高压缩比)。

六、编码器选择:--list-encoders--audio-encoder

同一设备上可能同时存在多个可用编码器,先枚举:

scrcpy --list-encoders

再锁定指定编码器:

scrcpy --audio-codec=opus --audio-encoder='c2.android.opus.encoder'

escrcpy 仓库对这一能力做了完整封装,可作为实现参考:

  • 进程层:getEncoders(serial)通过createScrcpyProcess执行scrcpy --serial="<serial>" --list-encoders,见 desktop/electron/middleware/scrcpy/index.js;
  • 解析层:parseScrcpyCodecList把输出中形如--audio-codec=opus --audio-encoder=c2.android.opus.encoder的行解析为结构化{ video: [], audio: [] }列表,见 desktop/electron/middleware/scrcpy/helper.js;
  • 界面层:音频编解码选择组件在点击下拉时实时调用$scrcpy.getEncoders(deviceId)拉取设备真实可用编码器,并把选中值拆分为--audio-codec--audio-encoder两个参数,见 desktop/src/components/preference-form/components/select-audio-codec/index.vue。

也就是说,escrcpy 的「音频编解码」设置项并非写死选项,而是基于目标设备真实编码器动态生成的。仓库默认预设了opus & c2.android.opus.encoderaac & c2.android.aac.encoderaac & OMX.google.aac.encoderraw四组(见 desktop/src/models/preference/audio/index.js 的audioCode配置)。

七、码率:--audio-bit-rate

默认音频码率为128Kbps,可自由调整:

scrcpy --audio-bit-rate=64K scrcpy --audio-bit-rate=64000 # 与上面等价

注意:该参数对raw编解码器不生效(raw 为未压缩 PCM,码率由采样格式决定)。

在 escrcpy 偏好模型中该字段类型为Input,单位后缀为bps,用户输入的值会直接拼接到--audio-bit-rate之后(见 desktop/src/models/preference/audio/index.js 的audioBitRate配置)。

八、缓冲调优:--audio-buffer--audio-output-buffer

音频缓冲无法避免:太小则延迟低但容易欠载(buffer underrun)导致爆音/卡顿,太大则延迟高。默认目标缓冲 50ms,可按需调整:

scrcpy --audio-buffer=40 # 比默认更小,追求低延迟 scrcpy --audio-buffer=100 # 比默认更大,追求顺滑

两点说明:

  1. 该参数设置的是目标缓冲,实际是否达到受设备/传输状况影响(频繁欠载时可能达不到);
  2. 若只是纯看视频不操作设备,可以同时调高音视频缓冲来平滑播放:
scrcpy --video-buffer=200 --audio-buffer=200

(视频缓冲的详细说明见 video.md 的 Buffering 一节。)

还有一个音频输出缓冲(audio output buffer),默认仅 5ms,除非遇到机器人音/杂音(robotic and glitchy sound)问题,否则不建议改动:

# 仅在确有必要时 scrcpy --audio-output-buffer=10

escrcpy 偏好模型将--audio-buffer--audio-output-buffer均以InputNumber+ms后缀暴露在设置界面中(见 desktop/src/models/preference/audio/index.js 的audioBuffer/audioOutputBuffer配置),方便按设备逐一调优。

九、在 Escrcpy 图形界面中的完整对应关系

本文讲到的绝大多数参数,escrcpy 都已映射为图形化偏好设置项,汇总如下(配置模型见 desktop/src/models/preference/audio/index.js):

命令行参数界面设置项控件类型说明
--no-audio禁用音频Switch关闭音频转发
--audio-dup音频重复播放SwitchAndroid 13+,设备端同时出声
--audio-source音频源Select上述 11 种音源可选
--audio-codec+--audio-encoder音频编解码AudioCodecSelect基于--list-encoders动态生成
--audio-bit-rate音频码率Input(bps)默认 128Kbps
--audio-buffer音频缓冲InputNumber(ms)默认 50ms
--audio-output-buffer音频输出缓冲InputNumber(ms)默认 5ms

此外,escrcpy 的「音频录制」能力也围绕这些参数做了专门组合:录音模式会自动排除--no-audio、追加--no-video --mouse=disabled,并以--audio-record-format(默认opus)决定录制文件扩展名(见 desktop/src/hooks/use-record-action/index.js),进程层则通过scrcpy --serial="<serial>" --record="<savePath>" ...启动录制(见 desktop/electron/middleware/scrcpy/index.js)。

十、实战组合速查

把以上知识组合起来,覆盖常见场景:

# 1. 只看视频不操作,追求画面与声音顺滑 scrcpy --video-buffer=200 --audio-buffer=200 # 2. 用手机麦克风直接在电脑录制 Opus(录音笔模式) scrcpy --audio-source=mic --no-video --no-playback --record=file.opus # 3. 设备无 Opus 编码器时的备选 scrcpy --audio-codec=aac # 4. 镜像同时设备也出声(Android 13+) scrcpy --audio-dup # 5. 低延迟音频转发 scrcpy --audio-buffer=40 --audio-output-buffer=5 # 6. 只保留音频、不开任何窗口(后台听音) scrcpy --no-window --audio-buffer=200

本文内容出处:核心参数与语义全部继承自仓库文档 docs/en/reference/scrcpy/audio.md,界面映射与实现细节经仓库源码(偏好模型、scrcpy 中间件、录制 Hook)交叉验证。注意本文参数基于 escrcpy 所集成的 scrcpy v3.2 版本,具体可用性以scrcpy --help与设备系统版本为准。

【免费下载链接】escrcpy📱 Display and control your Android device graphically with scrcpy.项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询