我的音频流转解决方案
困扰
笔者现在住在大学的宿舍。为了整体的氛围和谐,宿舍自然是不常外放的。不外放,就需要戴耳机。电脑连着有线耳机,手机连着蓝牙耳机,但是这些耳机由于型号较旧,不支持同时连接到多个设备。于是会出现这样一个问题——手机、电脑、平板的声音没法同时进入耳朵,如何在宿舍只有一个耳机的情况下,让多个设备的声音都能自然进入耳朵,就像在空气中外放一样?
鉴于笔者电脑连接的是有线耳机、不需要充电,将所有声音传入电脑的有线耳机是一个比较好的想法。
基于网络传输的方案
目前我找到的基于内网传输的方案中,最佳的一个是 Audio Relay。但是这是一个付费软件,其免费版只能提供有限时长、单一设备音频转发的功能。
- 丢包多。在笔者用 5GHz WLAN 热点共享给手机后,丢包严重。即使有 Buffer,但是丢包仍然难以规避。
- 多设备灾难。由于单一设备音频转发,只能让一台手机同时作为客户端和服务器,多设备丢包加上丢包,完全是灾难性的。
- 缺乏设置。PC 端的 Audio Relay 没有音频设置,无法根据特定网络情况配置合适的音频参数。
- 部分应用无法传音。由于 Android 系统版本兼容性和隐私设置,部分敏感应用,如微信、支付宝等软件无法传输声音。
- 本地方案聊胜于无。PC 到手机可以用 USB 网络共享,但是手机到 PC 不可以。
基于本地 USB 传输的方案
在朋友的推荐下,我重新回顾了 scrcpy。原来它可以只传声音!
只需要 scrcpy --no-video 即可,结束。
但是这样就够了吗?是否还能够做出优化?
模拟真实空气环境
- 手机传来的音频是否能进行后处理?是否可以混响?是否可以挂 EQ?
- 是否能够基于不同的麦克风(如耳机、手机、电脑、外置)经过算法处理再发送到耳机监听,实现类似“通透模式”的功能?
- 怎么降低时延?怎么规避丢包?能配置不同的 Buffer、音频压缩比例等参数吗?
对标 Audio Relay
- 音频是否能够同时转发到多个设备?是不是可以做一个工作台连接不同设备,音频就能够多路传送?
- 是否让用户能选择“复制”和“仅传输”?
- 音频能否进行录制?存盘?
- scrcpy 基于 ADB 调试,背后具有安全风险。是否有更安全和更高效的解法?
- 引入 GUI 与方便的配置页面,也能用无头模式减少资源占用。
后续会写一个针对这些功能的小软件。