外观
音乐服务:OwnTone 与 Shairport
两个官方插件解决两件不同的事:OwnTone 让 NAS 成为音乐库服务器,音乐放在 NAS 上,播放器和遥控应用来取;Shairport 让 NAS 成为 AirPlay 音箱,手机把声音推过来,NAS 接着音响放出来。
适合谁
| 你想要 | 用哪个 |
|---|---|
| 把音乐放在 NAS 上,在 iTunes、MPD 客户端或遥控应用里浏览和播放 | OwnTone |
| 用手机或电脑的 AirPlay 把声音推给 NAS,NAS 接音响播放 | Shairport |
不适合:要手机应用、转码、多用户的完整音乐服务,用 Compose 应用里的 Jellyfin,或 Compose 插件示例清单里的 navidrome。
都不需要放到公网
两个服务都是为局域网设计的。OwnTone 默认让来自 192.168、fd 开头地址和本机的访问不需要密码(见下文)。不要映射到公网。
OwnTone:音乐库服务器
插件信息
| 项 | 内容 |
|---|---|
| 包名 | openmediavault-owntone |
| 来源 | 官方插件,不需要 omv-extras。它取代了旧的 forked-daapd 插件 |
| OMV 8 状态 | 截至 2026-10-18 的官方软件源为 8.0.1-1 |
| 菜单位置 | 服务 → OwnTone(Services → OwnTone) |
| 依赖 | podman。安装时创建系统用户 owntone,属于 users 组 |
OwnTone 提供 DAAP(iTunes 用的共享协议)、MPD 和 RSP(Roku)三种服务,还带一个网页界面。在 系统 → 插件(System → Plugins)里安装。
它是怎么运行的
- 容器:单个 Podman 容器
owntone,由 systemd 单元container-owntone管理。它用宿主机网络(--net=host),端口直接出现在 NAS 的地址上,没有证书选项,网页界面是 HTTP。 - 镜像从哪拉:Docker Hub,默认
docker.io/owntone/owntone:latest。访问不了时,用环境变量OMV_OWNTONE_APP_CONTAINER_IMAGE换成别的地址,用法见 环境变量。 - 数据放哪:所选共享文件夹整个挂进容器的
/srv/media/,OwnTone 只扫描这里;配置在/var/cache/owntone/config/owntone.conf,由 Salt 生成,不要手改;数据库在/var/cache/owntone/db/。
配置
服务 → OwnTone:
| 字段 | 默认值 | 说明 |
|---|---|---|
| 已启动(Enabled) | 关 | |
| 端口(Port) | 3689 | 音乐库服务和网页界面共用 |
| 共享文件夹(Shared folder) | 无 | 音乐所在的共享文件夹,启用时必填。owntone 用户或 users 组要能读 |
| 媒体库名称(Library name) | %h - OwnTone | 客户端里显示的名字,%h 是主机名 |
| 密码(Password) | 空 | 访问音乐库的密码,可选 |
| Web 页面(Web interface)下的密码 | admin | admin 用户登录网页界面的密码,启用时必填。改掉默认值 |
保存,点黄色提示条上的应用,第一次会拉取镜像。点 打开 UI(Open UI)打开 http://<NAS 地址>:3689。
几个要知道的行为:
- 信任网段:默认情况下,来自本机、
192.168开头的 IPv4 地址和fd开头的 IPv6 地址的访问,不需要密码就能使用网页界面、遥控应用和 DAAP。家里用10.x或172.16.x网段时,这些客户端会被要求输入密码。要调整,用环境变量OMV_OWNTONE_GENERAL_TRUSTEDNETWORKS。 - MPD 默认关闭:插件把 MPD 端口设成 0。需要 MPD 客户端时,把环境变量
OMV_OWNTONE_MPD_PORT设成 OwnTone 的默认端口 6600,再重新部署。 - 按目录名归类:音乐目录下名为
Podcasts、Audiobooks、Compilations的子目录,会分别被当成播客、有声书和合辑。封面图用artwork、cover、Folder、folder这几个文件名。 - 没有本机音频输出:插件把 OwnTone 的本机输出设为
dummy,不会从 NAS 的声卡出声。网络里的 AirPlay 等音箱的使用,以 OwnTone 上游文档为准。
检查结果
sh
# 在 OMV 的 shell 里执行(root)
systemctl status container-owntone
podman logs owntone # 应用日志,扫描进度也在这里
ss -tlnp | grep ':3689'打开网页界面,确认曲目数量不为 0;在支持 DAAP 的播放器里能看到媒体库名称,能播放。
备份与维护
- 音乐文件按 备份策略 备份,OwnTone 只读它们。数据库可以重建。
- 升级:容器用本地已有的镜像启动,不会自动更新。官方没有文档化升级流程,按插件生成的单元文件推断:先拉新镜像(
服务 → Podman → 镜像(Services → Podman → Images)里的拉取,或podman pull docker.io/owntone/owntone:latest),再systemctl restart container-owntone。 - 环境变量
OMV_OWNTONE_APP_CONTAINER_START_OPTIONS可以给容器追加podman run参数。
Shairport:AirPlay 接收端
插件信息
| 项 | 内容 |
|---|---|
| 包名 | openmediavault-shairport |
| 来源 | 官方插件,不需要 omv-extras |
| OMV 8 状态 | 截至 2026-10-18 的官方软件源为 8.0.2-1 |
| 菜单位置 | 服务 → Shairport(Services → Shairport) |
| 依赖 | shairport-sync、alsa-utils。它不是容器,是系统服务 shairport-sync |
它实现的是 AirPlay 的 RAOP 协议,插件描述明确写着不支持 AirPlay 2(视频和照片流)。
前提:NAS 要有能出声的声卡
声音由 ALSA 输出,NAS 要有被 Linux 识别的声卡:主板自带的声卡、USB 声卡或 DAC、HDMI 音频。很多 NAS 没有,这时 Shairport 没有用。在 OMV 的 shell 里用 aplay -l(alsa-utils 提供)列出播放设备,没有设备就别装。
配置
服务 → Shairport:
| 字段 | 默认值 | 说明 |
|---|---|---|
| 已启动(Enabled) | 关 | |
| 名称(Name) | 空 | 手机里 AirPlay 列表中显示的名字,留空用主机名 |
| 验证(Authentication) | 关 | 勾选后推流需要密码 |
| 密码(Password) | 空 | 勾选验证后必填 |
保存,点黄色提示条上的应用。AirPlay 默认用 TCP 5000,并通过 Avahi 在局域网里广播自己;OMV 里配了防火墙时,要放行这个端口和 shairport-sync 用的 UDP 端口,范围见 shairport-sync 的文档。
检查结果
sh
# 在 OMV 的 shell 里执行(root)
systemctl status shairport-sync
aplay -l # 确认有播放设备在 iPhone 或 Mac 的 AirPlay 列表里应该出现你设的名字,选中后播放,音响出声。
常见问题
OwnTone 的网页界面提示要密码,但我在家里。 你的网段不在默认的信任网段里,见上面的环境变量,或直接用 admin 和你设的密码登录。
应用时拉取 OwnTone 镜像失败。 通常是访问不了 Docker Hub,换镜像地址。
手机里看不到 AirPlay 设备。 手机和 NAS 在同一个网段;防火墙放行了 AirPlay 的端口;Avahi 在运行,见 局域网发现。
能看到设备,但没有声音。 用 aplay -l 确认声卡存在,并检查音响的接线和 ALSA 的默认输出设备。
想用 Compose 版本。 音乐服务有很多 Compose 应用可选,见 插件还是容器。
参考资料
- 插件源码:openmediavault-owntone、openmediavault-shairport,官方文档和 wiki 没有这两个插件的页面
- OwnTone 项目、shairport-sync 项目