Tune by Mozaiklabs

OAAT —— 让 bit-perfect 多房间音频走向大众的开源协议

问题所在:高保真音频被牢牢锁死

20 年来,高保真网络音频流传输一直被专有协议所束缚。RAAT(Roon)提供无可挑剔的音质——但代价是什么?付费认证、闭源代码、封闭生态。DLNA 虽然开放,但技术上有诸多限制:没有多房间同步、gapless 时灵时不灵、延迟偏高。

OAAT(Open Advanced Audio Transport)解决了这个两难困境。这是我用 Rust 设计并实现的一个网络音频传输协议。它以 Apache 2.0 许可完全开源,兼取两者之长。

OAAT 带来了什么

  • Bit-perfect 音频 —— PCM 最高 768 kHz / 32 bit,原生 DSD 最高 DSD512。零重采样,零妥协。
  • 亚毫秒级多房间 —— 端点之间采用 PTP 同步,偏差小于 1 ms。媲美 RAAT,却无需授权。
  • 智能协商 —— 协议会根据 DAC 的能力自动适配格式。无需手动配置。
  • 零门槛 —— 无需认证、无需授权、没有 DRM。厂商用约 1 500 行 Rust 代码即可实现一个合规端点。

三通道架构

与 DLNA(HTTP pull、XML/SOAP)不同,OAAT 将各类职责分离:

  • 控制(TCP 端口 9740)—— 轻量 JSON 消息:握手、格式协商、播放/暂停、元数据
  • 音频(UDP 端口 9741)—— 带呈现时间戳的二进制数据包,服务端推送,零队头阻塞
  • 时钟(UDP 端口 9742)—— 用于多房间同步的 PTP 交换

发现机制通过 mDNS/DNS-SD 自动完成。把一个端点接入网络,它就会出现。就这么简单。

graph LR
    A["Tune Server"] -->|"TCP :9740 — contrôle JSON"| B["Endpoint OAAT"]
    A -->|"UDP :9741 — audio PCM/FLAC"| B
    A <-->|"UDP :9742 — clock sync PTP"| B
    B -->|"I2S / USB"| C["DAC"]

    style A fill:#4a90d9,stroke:#333,color:#fff
    style B fill:#50c878,stroke:#333,color:#fff
    style C fill:#f5a623,stroke:#333,color:#fff

协议对比

  • OAAT:开源(Apache 2.0)、bit-perfect、原生 DSD、多房间同步 < 1 ms、端点约 1 500 行代码
  • RAAT(Roon):bit-perfect、DSD、多房间——但属专有协议、认证收费、代码封闭
  • DLNA/UPnP:开放——但没有多房间同步、gapless 不可靠、DSD 仅支持 DoP
  • AirPlay 2:Apple 多房间——但限于 48 kHz/24 bit,不支持 DSD,生态封闭
  • Chromecast:仅限 Google,有损重采样,最高 48 kHz

从协议到产品:一台 100 欧元的 Raspberry Pi

为了证明 OAAT 不只是一份理论规范,我把一台Raspberry Pi 4 搭配 Audiophonics ESS 9038Q2M DAC 变成了一个高端音频端点:

  • 通过 DAC 的 I2C 寄存器实现硬件音量控制
  • 7 种可配置的 FIR 滤波器(minimum phase、linear phase、apodizing……)
  • 7 英寸触摸屏,以 kiosk 模式运行 Tune 界面
  • systemd 服务、开机自启、无感重连

总成本:约 100 欧元。而一个通过 Roon Ready 认证的端点起价 500 欧元。

👉 完整安装指南已上线:把 Raspberry Pi 变成 OAAT 音频端点。

面向厂商与开发者

HAL(硬件抽象层)trait 只有 5 个方法。自动化合规工具用 20 项测试验证你的实现。

trait OaatHal {
    fn configure_output(&mut self, format: AudioFormat) -> Result<()>;
    fn write_frames(&mut self, data: &[u8], frames: usize) -> Result<usize>;
    fn buffer_level(&self) -> usize;
    fn set_volume(&mut self, level: u8) -> Result<()>;
    fn actual_sample_rate(&self) -> Option<f64>;
}

在你的音乐服务器中嵌入 oaat-controller crate,即可获得 bit-perfect 多房间能力。提供 C 绑定(FFI)以便原生集成。

数据一览

  • 9 个 Rust crate,约 8 000 行代码
  • 20 项自动化合规测试
  • 多房间同步偏差小于 1 ms(实测)
  • 运行时约 50 MB 内存占用
  • 兼容 PCM 768/32、DSD512、FLAC 压缩
  • Apache 2.0 许可

在 Tune 中的集成

OAAT 已经集成进 Tune——由 MozAIk Labs 开发的源代码公开(BSL 1.1)音乐服务器。OAAT 端点会被自动发现,并作为播放区域出现——与 DLNA、AirPlay 或 Chromecast 一样,但音质更胜一筹。

链接