多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

3 步把手机声音转发到电脑:Android 音频转发工具 sndcpy 完整教程

3 步把手机声音转发到电脑:Android 音频转发工具 sndcpy 完整教程 3 步把手机声音转发到电脑:Android 音频转发工具 sndcpy 完整教程【免费下载链接】sndcpyAndroid audio forwarding PoC (scrcpy, but for audio)项目地址: https://gitcode.com/gh_mirrors/sn/sndcpysndcpy 是一个开源的 Android 音频转发工具:它把 Android 10 及以上手机正在播放的声音——音乐、会议录音、游戏音效——通过 USB 或 Wi-Fi 实时转发到电脑,再由 VLC 播放。无需 root。适合手游直播需要混入游戏声音、要在电脑端整理会议录音、或想用电脑音箱外放手机音频的人。sndcpy 解决什么问题手机声音要用到电脑上,常见做法是戴耳机听,或者导出文件再导入,来回折腾:手游直播:游戏音效走不进摄像头麦克风,转发后 OBS 可以把手机声音和麦克风混流,观众能听到完整的游戏音效会议录音整理:手机回放录音,电脑音箱同步监听,同时用电脑上的录音软件录一份便于后期编辑音频素材分享:手机里的音频直接在电脑音箱或剪辑软件中出声,省去反复导出、导入文件一句话概括:sndcpy 把手机当前播放的声音实时复制到电脑上,用 VLC 放出来,不改变你使用手机的方式。工作原理:一段话讲清楚手机端利用系统 MediaProjection 音频捕获权限拿到正在播放的声音,捕获服务按 48000 Hz、16 位、立体声的 PCM 格式读取,写入手机上一个名为 sndcpy 的本地 socket;电脑端脚本用adb forward把本机 28200 端口映射到这个 socket,最后 VLC 以原始 PCM 格式(rawaud)从 TCP 流里读取并播放。数据流向就是:Android 应用 → adb 通道 → VLC。项目取值说明音频参数48000 Hz / 16 位 / 立体声原始 PCM,无压缩转发端口28200可用环境变量 SNDCPY_PORT 覆盖播放器VLC以--demux rawaud --network-caching0参数启动关键源码在仓库中的位置:权限申请与应用启动:app/src/main/java/com/rom1v/sndcpy/MainActivity.java音频捕获与 socket 写入:app/src/main/java/com/rom1v/sndcpy/RecordService.java电脑端脚本:sndcpy(Linux/macOS)与sndcpy.bat(Windows)安装与首次运行开始前的三个条件:一台 Android 10 及以上的设备、一台已装 VLC 的电脑、一条能传数据的数据线。手机 USB 调试怎么开设置 → 关于手机 → 连续点击版本号7 次返回设置,打开开发者选项打开USB 调试,插上数据线;若手机弹出电脑授权框,点击允许获取程序并启动git clone https://gitcode.com/gh_mirrors/sn/sndcpy cd sndcpy ./sndcpyWindows 用户直接双击sndcpy.bat即可(项目 release 页提供附带 adb 的 Windows 包,省去单独装 adb)。脚本会自动把应用安装到手机(已有旧版本会先卸载),授予 PROJECT_MEDIA 权限,然后启动录制服务。首次运行要装 APK,会稍慢一些。手机授权后听到声音启动后,手机弹出是否允许录制音频的对话框,点击允许。电脑上 VLC 会自动启动,前几秒可能报一次 Connection refused,这是两端握手的正常现象,等待 2~3 秒声音就会出来。注意:手机本身的声音会照常播放,音量可在手机和电脑两侧独立调节。停止传输,在终端按 CtrlC 即可;Windows 上直接拔掉数据线,或点手机通知栏里的停止也行。进阶用法 无线连接:Wi-Fi 连接时 IP 怎么填先用数据线连好,执行adb tcpip 5555拔掉数据线,在电脑端执行adb connect 192.168.1.100:5555,把 192.168.1.100 换成手机的实际 IP(在手机设置 → Wi-Fi → 已连接网络详情里查),两边必须在同一 Wi-Fi 下再执行./sndcpy开始转发 多台设备连接:怎么指定设备先用adb devices列出每台设备的序列号,然后把序列号作为参数传入:./sndcpy ABC12345 # 指定设备序列号 ./sndcpy --vlc-args --audio-quality 0 # 给 VLC 传额外参数音质参数范围 0~2,数值越小音质越高,可按延迟表现取舍。停止与卸载停止转发:CtrlC(Linux/macOS);Windows 上拔线或点手机通知栏的停止从手机卸载应用:adb uninstall com.rom1v.sndcpy没声音时的排查方法现象可能原因处理方法VLC 报 Connection refusedsndcpy 与 VLC 的正常握手等 2~3 秒,会自动恢复,无需处理连接成功但电脑没声音音量或输出设备调大 VLC 音量;检查电脑默认播放设备;确认音箱或耳机正常声音延迟明显传输抖动导致 VLC 自动加大缓冲换能传数据的数据线;关闭手机后台应用;重启 sndcpy手机不弹权限请求USB 调试状态异常或有旧授权记录关闭再打开 USB 调试;拔掉数据线重插;此前授权过的,删除授权记录后重试如果终端出现pts_delay increased一类的报错,说明 VLC 因抖动自动提高了缓冲,直接重启即可。⚠️ 还有限制要心里有数:sndcpy 只能转发允许被捕获的应用的音频。按 Android 的捕获策略,target Android 9 及以下的应用默认不允许捕获音频,target Android 10 及以上的应用默认允许,所以个别应用(尤其旧版本)转发不出来,升级该应用一般能解决。另外这个项目定位为概念验证(PoC),延迟表现没有深度优化;如果你要的是投屏 声音,scrcpy 2.0 之后的版本已原生支持音频转发,可以直接用。接下来可以做什么在手机上开启 USB 调试,用数据线连好电脑运行./sndcpy(Windows 双击sndcpy.bat),在手机上点击允许录制音频声音出来后,尝试无线方式:adb tcpip 5555再adb connect 手机IP:5555想改代码的话,从app/src/main/java/com/rom1v/sndcpy/RecordService.java读起遇到异常,对照上一节的排查表逐项检查【免费下载链接】sndcpyAndroid audio forwarding PoC (scrcpy, but for audio)项目地址: https://gitcode.com/gh_mirrors/sn/sndcpy创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表