QtScrcpy 音频传输指南:3 步把 Android 手机声音同步到电脑
【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy
如果你用 QtScrcpy 把安卓手机投到电脑上,多半遇到过这种情况:画面在电脑里,声音却还从手机扬声器里跑。这个项目的音频传输功能(基于 sndcpy 工具)解决的就是这个问题——把手机正在播放的声音实时送到电脑扬声器,实现真正的"所见即所闻"。
手机在屏幕、声音在手机上:音频传输解决什么
投屏工具通常只搬画面,声音留在手机上。你要么凑近手机听,要么手机外放时电脑和手机两个声音打架。开启 QtScrcpy 的音频传输后,手机的声音会实时从电脑扬声器出来,手机那头则保持安静。
QtScrcpy 里谁负责音频传输
这个功能由"手机 + 电脑"两端协作完成,涉及三个部分:
- 手机侧:随程序分发的 sndcpy/sndcpy.sh(Windows 下是 sndcpy.bat)脚本,负责安装和启动手机上的 sndcpy 应用;
- 电脑侧:audio/audiooutput.h 定义的 AudioOutput 类,负责收数据、放声音;
- 界面:ui/dialog.cpp 里的"安装sndcpy / 开始音频 / 停止音频"三个按钮,点了才触发上面两件事。
声音链路怎么走:从手机到电脑的 5 步
理解原理只需一条链路,谁做什么、数据往哪流:
- 你点"开始音频",AudioOutput::start() 收到设备序列号和端口号 28200,然后启动 sndcpy 脚本;
- 脚本通过 adb 找到手机 → 没装过就自动安装 sndcpy.apk → 用 appops 授予 PROJECT_MEDIA 权限(读取系统音频流的权限)→ 执行
adb forward tcp:28200 localabstract:sndcpy(端口转发,把手机里 sndcpy 应用的一个内部端口"借用"到电脑本机的 28200 端口)→ 启动 sndcpy 应用; - 手机上的 sndcpy 捕获设备音频,通过刚才那条转发隧道发到电脑的 127.0.0.1:28200;
- 电脑端一个 TCP 套接字(跑在工作线程里)连上本机 28200 端口,来多少数据就收多少;
- 收到的数据按 48kHz、立体声、16bit 的 PCM 格式(未压缩的裸音频)直接写进系统的默认播放设备,电脑扬声器出声。
整条链路上电脑只做了"收 + 放",编解码的活儿基本没干,所以额外开销很小。
启用音频传输的最快方法
前提:手机已用 USB 连上电脑并开启 USB 调试。
- 打开 QtScrcpy,在左侧设备列表里选中你的手机——预期:列表里能看到设备序列号;
- 点"开始音频"——预期:底部日志区滚出 "Ready playing...",电脑上开始有手机的声音;
- 用完点"停止音频"——预期:声音立即停止,脚本进程被终止。
界面按钮最终调用的就是这一行(在 ui/dialog.cpp 中):
m_audioOutput.start(ui->serialBox->currentText(), 28200);首次使用不用手动点"安装sndcpy",start里的脚本会检测到没装过就先装。单独点"安装sndcpy"适合只想预装应用、暂不播声音的场景。
两个值得了解的参数
- 端口 28200:写死在按钮回调和脚本里。什么时候动它:同时给多台手机投屏,或 28200 被其他程序占用时,需要改 ui/dialog.cpp 和脚本里的端口保持一致;
- 音频缓冲:Qt5 分支里
setBufferSize(48000*2*15/1000 * 20)约 300ms 缓冲(在 audio/audiooutput.cpp 中)。什么时候动它:声音有卡顿可以适当加大,追求更低延迟则减小,但要留够网络抖动余量; - 播放格式 48kHz/2 声道/16bit PCM:启动前会先查声卡是否支持,不支持会打印 "audio format not supported" 并放弃播放,一般不用改,但换声卡设备后失败时先怀疑它;
- config/config.ini 里的 AdbPath:adb 找不到或版本异常时,可在这里指定 adb 的完整路径。
没有声音?先检查这 4 项
- 设备没被 adb 识别:设备列表为空时会提示 "No device is connected!"。先确认 USB 调试已开启、数据线支持数据传输;
- 安卓版本太低:sndcpy 捕获音频依赖 Android 10 及以上的系统能力,旧系统装上也抓不到声音;
- 转发隧道没通:日志出现 "audio socket connect failed",说明 sndcpy 应用没起来或端口转发失败,重新点一次"开始音频"让它重走流程;
- 格式不支持:日志出现 "audio format not supported",属于电脑侧声卡问题,换一个输出设备试试。
适合谁用
- 游戏直播:手机开游戏,画面和声音一起进 OBS,不用再架手机麦克风(
);
- 视频投屏:在电脑大屏上看手机视频,声音从电脑音箱出;
- 远程演示/教学:给围观的人听清手机里的提示音和通话声。
【免费下载链接】QtScrcpyAndroid real-time display control software项目地址: https://gitcode.com/GitHub_Trending/qt/QtScrcpy
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考