Escrcpy 音频转发完全指南Android 11 音频捕获、音源选择与编解码调优【免费下载链接】escrcpy Display and control your Android device graphically with scrcpy.项目地址: https://gitcode.com/GitHub_Trending/es/escrcpy导读本文围绕 escrcpy 所集成的 scrcpyv3.2音频转发能力展开系统讲解 Android 11 设备音频捕获的版本前提、--no-audio等开关参数、--audio-source全部音源语义、编解码器/编码器选择、码率与缓冲调优并结合 escrcpy 仓库中的偏好配置模型与 scrcpy 进程封装源码给出可在真实设备上直接复制的命令行与图形界面配置方案。读完本文你将能够按需开启/关闭音频、把手机当作录音笔、切换麦克风音源、修复 Opus 编码器缺失报错并针对卡顿音质做缓冲优化。一、音频转发的前置条件Android 版本决定一切音频转发Audio forwarding并不是所有 Android 设备都能开启的它严格依赖系统版本官方支持基线为Android 11API 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.0API 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-sourceplayback --audio-dup # 简写--audio-dup 会自动隐含 --audio-sourceplayback scrcpy --audio-dup注意两个限制需要Android 13 及以上且该方式依赖系统对应用播放内容的捕获应用可以选择退出opt-out因此不一定能捕获到全部音频。三、纯音频模式把手机变成无线麦克风/录音笔音频可以和视频、控制完全解耦Escrcpy/scrcpy 允许只转发音频# 仅播放音频禁用视频与控制 scrcpy --no-video --no-control # 不开任何窗口、只播放音频--no-window 隐含 --no-video 与 --no-control scrcpy --no-window # 使用 CtrlC 中断纯音频模式下延迟不再是关键指标可以适当加大缓冲来消除爆音见后文「缓冲调优」。一个非常实用的组合把设备当作录音笔直接在电脑上录制scrcpy --audio-sourcemic --no-video --no-playback --recordfile.opus即捕获设备麦克风 → 不做视频 → 不在设备/电脑上实时播放 → 直接录制为 Opus 文件。四、音源选择--audio-source十一种取值详解默认转发的是设备音频输出output。--audio-source允许切换到麦克风、通话声道等取值及对应 AndroidMediaRecorder.AudioSource映射如下取值语义Android 音频源映射output默认转发全部音频输出设备端播放被静音REMOTE_SUBMIXplayback捕获应用播放的音频应用可 opt-out不一定完整基于系统捕获 APIAndroid 13mic捕获麦克风MICmic-unprocessed捕获未经处理的原始麦克风声音UNPROCESSEDmic-camcorder针对录像调音的麦克风捕获可用时与摄像头同朝向CAMCORDERmic-voice-recognition针对语音识别调音的麦克风捕获VOICE_RECOGNITIONmic-voice-communication针对语音通话调音可启用回声消除、自动增益VOICE_COMMUNICATIONvoice-call捕获语音通话VOICE_CALLvoice-call-uplink仅捕获通话上行本机说话声VOICE_UPLINKvoice-call-downlink仅捕获通话下行对方说话声VOICE_DOWNLINKvoice-performance面向现场演出如卡拉 OK处理同时包含麦克风与设备播放VOICE_PERFORMANCE典型用法scrcpy --audio-sourcemic # 用设备麦克风代替设备扬声器输出在 escrcpy 的偏好设置模型中上述全部音源都已内置为可选项见 desktop/src/models/preference/audio/index.js 中audioSource的options列表playback、mic、mic-unprocessed、mic-camcorder、mic-voice-recognition、mic-voice-communication、voice-call、voice-call-uplink、voice-call-downlink、voice-performance选中后会以--audio-sourcevalue追加到 scrcpy 启动参数中。五、编解码器--audio-codec与 Opus 报错修复音频编解码器可选opus默认、aac、flac、raw未压缩的 PCM 16-bit 小端scrcpy --audio-codecopus # 默认 scrcpy --audio-codecaac scrcpy --audio-codecflac scrcpy --audio-codecraw高频坑如果设备没有 Opus 编码器会报如下错误Failed to initialize audio/opus, error 0xfffffffe解决方案就是切换到 AACscrcpy --audio-codecaac高级--audio-codec-options透传 MediaFormat 参数--audio-codec-options可以把任意参数直接透传给 Android 的MediaFormat具体键值可查阅scrcpy --help与 manpage。例如调整 FLAC 压缩级别scrcpy --audio-codecflac --audio-codec-optionsflac-compression-level8这里flac-compression-level对应MediaFormat.KEY_FLAC_COMPRESSION_LEVEL0 为最快、8 为最高压缩比。六、编码器选择--list-encoders与--audio-encoder同一设备上可能同时存在多个可用编码器先枚举scrcpy --list-encoders再锁定指定编码器scrcpy --audio-codecopus --audio-encoderc2.android.opus.encoderescrcpy 仓库对这一能力做了完整封装可作为实现参考进程层getEncoders(serial)通过createScrcpyProcess执行scrcpy --serialserial --list-encoders见 desktop/electron/middleware/scrcpy/index.js解析层parseScrcpyCodecList把输出中形如--audio-codecopus --audio-encoderc2.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.encoder、aac c2.android.aac.encoder、aac OMX.google.aac.encoder、raw四组见 desktop/src/models/preference/audio/index.js 的audioCode配置。七、码率--audio-bit-rate默认音频码率为128Kbps可自由调整scrcpy --audio-bit-rate64K scrcpy --audio-bit-rate64000 # 与上面等价注意该参数对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-buffer40 # 比默认更小追求低延迟 scrcpy --audio-buffer100 # 比默认更大追求顺滑两点说明该参数设置的是目标缓冲实际是否达到受设备/传输状况影响频繁欠载时可能达不到若只是纯看视频不操作设备可以同时调高音视频缓冲来平滑播放scrcpy --video-buffer200 --audio-buffer200视频缓冲的详细说明见 video.md 的 Buffering 一节。还有一个音频输出缓冲audio output buffer默认仅 5ms除非遇到机器人音/杂音robotic and glitchy sound问题否则不建议改动# 仅在确有必要时 scrcpy --audio-output-buffer10escrcpy 偏好模型将--audio-buffer与--audio-output-buffer均以InputNumberms后缀暴露在设置界面中见 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音频码率Inputbps默认 128Kbps--audio-buffer音频缓冲InputNumberms默认 50ms--audio-output-buffer音频输出缓冲InputNumberms默认 5ms此外escrcpy 的「音频录制」能力也围绕这些参数做了专门组合录音模式会自动排除--no-audio、追加--no-video --mousedisabled并以--audio-record-format默认opus决定录制文件扩展名见 desktop/src/hooks/use-record-action/index.js进程层则通过scrcpy --serialserial --recordsavePath ...启动录制见 desktop/electron/middleware/scrcpy/index.js。十、实战组合速查把以上知识组合起来覆盖常见场景# 1. 只看视频不操作追求画面与声音顺滑 scrcpy --video-buffer200 --audio-buffer200 # 2. 用手机麦克风直接在电脑录制 Opus录音笔模式 scrcpy --audio-sourcemic --no-video --no-playback --recordfile.opus # 3. 设备无 Opus 编码器时的备选 scrcpy --audio-codecaac # 4. 镜像同时设备也出声Android 13 scrcpy --audio-dup # 5. 低延迟音频转发 scrcpy --audio-buffer40 --audio-output-buffer5 # 6. 只保留音频、不开任何窗口后台听音 scrcpy --no-window --audio-buffer200本文内容出处核心参数与语义全部继承自仓库文档 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),仅供参考
阅读完成 · 觉得有帮助?