前言
最近咸鱼上收了俩1T的机械盘,FnOS 里组了个镜像阵列,我又开始向往自建音乐库了——以前并不是一个 NAS 玩家,音乐全存在固态里着实有点烧钱。虽然原本打算换个程序的,不过我等了好久的飞牛音乐终究还是没有上线。那就重操我的 Navidrome 旧业吧。
可能有许多人都玩过 Jellifin、Emby 这样的自建流媒体服务。不过它们的流播貌似都并不专精于音乐——看电影啥的倒是不错。不过说 Navidrome 专精于音乐播放,倒也不对。Navidrome 虽然是网页使用,但依旧没有配套的多平台 APP,以及甚至没有一个同目录下同名 lrc 自动外挂的功能——每一首歌都需要我自己用 Fooba2000 把歌词内嵌进 Tag 里。
不过这些小问题都还在我能忍受的范围内,何况还有一款第三方的应用“音流”可以用(音流不仅可以对接 Navidrome,也可以对接 Jellyfin、Plex 之类的程序)
Navidrome 安装
说实话,我不认为 Docker 跑应用还需要安装教程。这里只摘抄一下 docker-compose.yml:
services:
navidrome:
image: deluan/navidrome:latest
user: 1000:1000 # should be owner of volumes
ports:
- "4533:4533"
restart: unless-stopped
environment:
# Optional: put your config options customization here. Examples:
# ND_LOGLEVEL: debug
volumes:
- "/path/to/data:/data"
- "/path/to/your/music/folder:/music:ro"
docker-compose.yml 文件内容也可以见于官方文档的 Installing with Docker 一章(Installing with Docker | Navidrome)或者如果你使用 1Panel、FnOS 之类的工具/系统,也可以直接在它们的应用商店内安装。
volumes 的部分,我是将 NAS 上的音乐文件夹 NFS 挂载至了我专门跑 Docker 的虚拟机,然后将持久化目录中的 /music 目录指定到了这个挂载路径。
简单用用 Navidrome
Navidrome 开箱即用,官方的 compose 文件默认端口 4533,访问后创建一个管理员账户,即可开始使用。
朝容器的 /music 挂载目录里丢入音频文件,就会被 Navidrome 扫到。如果没有,也可以点击右上角 运行情况 ,再点击 完全扫描 进行一个手动扫描。
个性化设置中可以设置语言选项,也可以切换主题。试了一圈,个人觉得 Ligera 主题最顺眼。——虽然不管哪个主题看起来都略显简陋。

音流 APP
音流是一款 NAS 音乐播放器,可以连接到您部署在 NAS 上的音乐服务,能让您在不同平台享受一致的音乐盛宴。
- 目前支持的音乐服务: Subsonic,Navidrome,Emby,Jellyfin,AudioStation,Plex.
- 目前支持的平台: Android 6.0, iOS 14, macOS 10.14, Windows 10.
特色功能:
- 兼容多种音乐服务。
- 支持歌词显示,通过自定义 API 还可让不提供歌词接口的音乐服务也拥有显示歌词的能力!
- 使用 Flutter 构建,为您提供接近原生的使用体验,在跨平台适配上拥有无限的可能性。
音流的基础功能免费使用,部分功能需要购买会员解锁。我也顺手买了一个,记得好像是 68 元来着,所以 本文中展示的内容可能与免费版有出入。虽说是“会员”,但其实这软件不是订阅制的而是买断制的。我一向喜欢买断制软件。具体功能差别可以看 功能比较 | 音流。
音流靠各平台的 API 对服务数据进行读取、修改等操作。初次打开音流会提示添加存储库,按照实际情况填写 Navidrome 地址、账户、密码就可以进入软件了。
我将主题修改为了浅色,控制栏类型修改为毛玻璃,算是调节到了我个人看着最顺眼的设置上了。——主题功能好像是要付费解锁的。
整个 UI 整洁、现代,手机横屏后也会自动切换视图。这里放几张图观赏一下:




不难发现,软件主页的 Navidrome 下方有一个“主路线”标签——备用路线功能也是会员才有的。目前用下来,大致逻辑推测是这样:第一个被添加的路线会被认为是主路线,后面添加的则是备用路线。主路线连接失败时会自动切换至备用路线,也可以手动切换路线。还可以单独为不同路线设置音频码率。看起来是个不错的功能,在家里直连内网流播,在外面连穿透地址转低码率流播还能省流量。不过我并没有这种需求,所以也并没有切实体验过。

歌词 API
上文也提到过了,Navidrome 不支持外挂歌词,一首一首内嵌真的很难受。
但后面发现了一个开源项目:LrcApi GitHub - HisAtri/LrcApi: A Flask API For StreamMusic.,“A Flask API For StreamMusic”说明其专门适配音流。
LrcApi 功能:
- 支持酷狗/聚合API获取LRC歌词
- 支持text/json API
- 支持获取音乐/专辑/艺术家封面
- 默认监听28883端口,API地址
http://0.0.0.0:28883/lyrics;新版API地址http://0.0.0.0:28883/jsonapi;封面API地址http://0.0.0.0:28883/cover
这里摘抄一下 README 中的 docker-compose.yml:
services:
lrcapi:
image: hisatri/lrcapi:latest
container_name: lrcapi
ports:
- "28883:28883"
volumes:
- /home/user/music:/music
environment:
- API_AUTH=自定义一个鉴权key
restart: always
API_AUTH 可以设置一个鉴权 key,填写在音流客户端的自定义API设置中的 验证信息 处即可。
如果你正在使用Navidrome Docker,请将 /home/user/music:/music 中的 /home/user/music 修改为你在Navidrome中映射的主机路径;
换句话说,-v 参数与Navidrome保持一致即可。
然后访问 http://0.0.0.0:28883/lyrics 或新版API http://0.0.0.0:28883/jsonapi
图片API地址为 http://0.0.0.0:28883/cover
注意:图片返回目前采用反向代理策略,可能存在一定的上下行流量消耗和延迟。
支持使用Nginx或Apache进行反向代理与SSL。
—— LrcApi 的 README
不过说实话这个功能体验下来效果并不是特别好。——它成功工作了,但工作的并不是很好。
自定义 API 设置中明明有一个 优先使用音乐服务接口 (只有音乐服务接口无数据时才会从自定义 API 获取数据)的开关的,但是这玩意死活不认为我的无封面歌曲和专辑是无封面的——压根不会去拉取封面。——可能是因为返回默认封面也被算作是“音乐服务接口有数据”?真搞不懂为什么。
带着这个问题我翻了翻 Issue,结果发现这个项目在 25 年 1 月份时仓库主任就已经决定停止维护了。(【项目中止说明】 · Issue #119 · HisAtri/LrcApi)Oh my GOD R.I.P.🙏不过这项目目前还是一个勉强能继续用的状态。
这里以我一个没有封面的歌曲 LifeLine 为例:


开着这个功能吧,就无法获取封面,那这个 API 搭建起来的意义就找不到了;关掉这个功能吧,速度又会慢到不是常人所能忍受的了。真是怎么用都觉得有点拧巴。
——我最后还是选择牺牲一部分速度,打开这个功能。毕竟歌曲流播的速度是不受影响的。
总之,这篇文章就到这里吧。我总算是又能无忧无虑的听音乐了。
版权申明
- 本文作者:光昭
- 本文链接:https://www.pyrzo.com/posts/navidrome-and-streammusic/
- 版权声明:所有文章除特别声明外均系本人自主创作,转载及引用请联系作者,并注明出处(作者、原文链接等)。
- 部分图片、文字搜集于网络,若构成侵权请联系我,会尽快删除。
Comments NOTHING