点击这个「伪造出的 AirPlay」然后等待一下就能出声音了,其实你也发现了它存在的一个小小的 Bug :因为通过 NAS 转换,因此相比纯原生实现的 AirPlay 播放器存在一到两秒的操作延迟。
将 NAS 上的 USB 音箱转成 AirPlay 播放器我把 NAS 打造成了家用的媒体播放器,因此我通过一个 USB DAC 将传统的 3.5mm 有源音箱连接到 NAS 上,从而实现了通过手机 App 来遥控播放 NAS 中保存的数字音乐。但这个音乐欣赏方案存在一定的局限性,比如说只能播放本地的音乐,而不能利用他来播放流媒体,当然也就无法实现类似 AirPlay 的推播效果。
当然,如果通过 NAS 作为「转换平台」,也可以通过软件的方式来实现将传统的音箱转换成 AirPlay 播放器,而我尝试了一下三种形式来实现。
使用 Shairport Sync 的 Docker 镜像我首先考虑的是通过相对比较「一键」傻瓜式的解决方案,然后找到了这个名为 Shairport Sync 的工具包,基于 Linux 或者 macOS,可以将设备中的音频设备转成 AirPlay 输出工具,并且考虑到要通过最小的硬件开销成本来实现并保证一定的环境隔离,Docker 运行肯定最为方便。
但最终试下来就是无法成功,一方面是群晖的 Docker 组件不支持调用外设(需在命令行下进行操作),且 Shairport Sync 的部分使用的端口和 DSM 的管理端口冲突(均使用了 5000 端口),不得已因此最终放弃了该方法。
通过 Linux 虚拟机运行 Shairport Sync直接在 Docker 上运行存在端口冲突等问题,那么使用虚拟机来实现肯定能避坑,一方面虚机有独立的 IP 和端口,避免冲突,另一方面则是群晖 VMM 可以实现将真实的 USB 硬件直通到虚拟机中,这样配置起来调用起来也更简单。
即便你可以识别音频设备,启动服务仍然复杂繁琐
但实际配置后发现,Shairport Sync 的安装并不简单,不少发行版并不支持直接从源上安装,并且安装后还需要针对硬件进行配置上的重新设置,改到后面都没办法确定 USB 音频是否可以在我选择的发行版上正常驱动,加上大量的包以及依赖的安装使得解决方案异常复杂,最终选择放弃了该方案。
通过 Windows 虚拟机运行 Airserver如果把 NAS 当作一台电脑,加上 USB DAC 其实就和传统的桌面电脑一样,这使得我想起以前在 Windows 上有类似的应用可以将本机变成一个 AirPlay 服务器。因此我想到了在 NAS 上创建一个 Windows 虚拟机来实现类似的功能,加上 VMM 支持硬件直通,可以直接向虚拟机暴露真实 USB 硬件,而我的 USB DAC 在 Windows 上完全免驱,因此我最终选择了该方案来实现。
首先打开群晖的 VMM 来「新建虚拟机」,选择「Windows」虚拟机,并在「其他设置」中设置 USB 为 「USB 2.0」(Windows 7 对于 USB 3.0 支持存在缺陷),并选择免驱的「USB DAC」设备,之后就是创建 Windows 虚拟机以及安装系统的步骤,尤其是需要确保 USB 音频设备可以正常驱动。