Headphone 板


LINE

# Navidrome 开源串流播放方案 官方资料 https://www.navidrome.org/docs/usage/configuration-options/ * * * ## 基本介绍 ### 简介与优缺点分析 Navidrome 网页介面 https://meee.com.tw/VsFE9vk.jpg
Feishin 介面 (Windows 客户端) https://meee.com.tw/IeE7tdS.jpg
Amperfy 介面 (iOS 客户端) https://meee.com.tw/m4QFJJS.jpg
本篇介绍最近成功架起来的自建串流方案,使用免费的开源软体 Navidrome 做为串流核 心。 Navidrome 是一款介面简洁,架设简单,操作流畅,且很稳定的开源串流软体服务,支援 Subsonic API,可用网页播放或是本地软体播放独占模式 (WASAPI)。客户播放软体只要 支持 Subsonic API 就能串接 Navidrome 资料库,选择很多。 **优点** 1. PC 客户端软体 Feishin + Mpv 能免安装使用 (能使用於公司电脑)。且支持 bit perfect 播放 (WASAPI even mode exclusive)。 2. Subsonic 有相当多的客户端软体可以选择。 3. 音乐可以直接在网页介面下载,方便分享。 4. 音乐资料库暴露於外网的安全性: - Navidrome 介面无法修改音乐档案,只读取快取层 metadata。 - 本地 NAS 的 NFS 分享资料夹档案权限是唯读。 **缺点** 1. Feishin + Mpv 只支援 WASAPI even mode,不支援 ASIO 或是 push mode,对某些老 旧或是特定 USB 音讯设备支援度不佳。 2. Navidrome 没有直接管理音乐资料库档案的功能: - 无法以资料夹结构浏览档案。 - Navidrome 无法修改 metadata。 3. 承上,通常後端还需要一个音乐资料库管理软体,比如 foobar2000。平时在内网环境 以 foobar2000 管理和播放资料库,在外网使用 Navidrome 串流资料库。 4. Navidrome 仰赖 tag 管理,所以可能不适合没有整理 tag 的音乐资料库。 5. foobar2000 的 subsonic component 2025 年已停止维护,所以此方案无法让 foobar2000 串接 Navidrome 伺服器。 6. 大部分浏览器无法原生支援 Apple Lossless(ALAC)档案串流,需要转档 (transcode)。 ### 串流架构 客户端 → Nginx 反向代理伺服器 → Navidrome 串流伺服器 → NAS 音乐资料库 https://meee.com.tw/BVzzIZL.jpg
1. 客户端 - 电脑 (Windows):使用 Feishin + Mpv,支援独占播放 (WASAPI event mode) - 手机 (iOS / Android):使用 amperfy 或 flo 等支援 subsonic 的客户端,选 择很多 2. Nginx 反向代理伺服器 (Linux):以 host-level 或是 docker 容器部署 3. Navidrome 串流伺服器 (Linux):以 docker 容器部署 4. 音乐资料库 (NAS):NFS 分享资料夹 (唯读) ### 需准备项目 1. NAS 或 伺服器主机,需支援容器部署环境: - 安装 Nginx 反向代理伺服器 跟 Navidrome 串流伺服器。 - 音乐资料库存放的档案伺服器 2. Windows PC 或 行动装置:做为播放客户端,需安装播放软体 3. 需自有一个网域 4. 支援 DNS 改写的 DNS proxy (例如 AdGuardHome) 或是支援 NAT hairpin 的路由器   :让内网环境能使用相同网域 url 访问伺服器。这个可有可无,但为了让手机能在内 外网都能无缝串流,建议使用。 ### 本篇范例使用设备 客户端 (A) → (https://nd.domain.com) → Nginx 反向代理伺服器 (B) → Navidrome 串流伺服器 (B) → NAS 音乐资料库 (C) https://meee.com.tw/BVzzIZL.jpg
A. 客户端: - Windows PC:Feishin + Mpv (wasapi exclusive) - iOS:Amperfy B. 伺服器主机 (192.168.20.1):Intel NUC13 i5 (32GB RAM) - Ubuntu linux server LTS22.04 C. Synology NAS (192.168.20.2 /volume1/music):约1200张专辑,500GB资料库 - DSM 7 注:可以将 Nginx 反代跟 Navidrome 都部署在 NAS 上,架构比较简洁,因为我不喜欢执 行伺服器放在 NAS 上所以这里的范例采用比较复杂的架构。如果要集中放 NAS 上设 定会简单很多,Navidrome 容器设定应该大同小异,DSM 也有内建简单的反代,可自 己尝试。 * * * ## 安装步骤 注:以下步骤假设读者对 Linux/Docker 有基本操作经验 ### A.购买网域: 此处不赘述,网路上有教学 个人推荐 Namecheap (Cloudflare 管理) 或是 Cloudflare ### B. 安装 ddclient 以网域供应商 API 更新 DNS 纪录: 此处不赘述,网路上有教学 ### C. 用 certbot 向 Let's Encrypt 取得网域凭证: 此处不赘述,网路上有教学 如果是 cloudflare 网域也能用 acme.sh 或是 nginx 的 nginx-acme 模组 certbot \ acme.sh \ nginx-acme module 三者都能设定凭证自动续期 ### D. 设定 Synology NAS DSM 共享资料夹(/volume1/music)的 NFS 分享权限 1. 指定 IP: 192.168.20.2 2. 权限唯读,squash to guest,启用非同步 3. 资料夹权限设定 guest 可读 ### E. 在 Linux server 挂载 NFS 资料夹 ===== bash 命令列区块 ===== # 文字为注解 # 建立挂载点 sudo mkdir /mnt/navidrome_music # 编辑 fstab 文件启用自动挂载 sudo nano /etc/fstab # 在 /etc/fstab 中填入这一行 192.168.20.2:/volume1/music /mnt/navidrome_music nfs nfsvers=4.1,_netdev 0 0 # 手动挂载 sudo mount /mnt/navidrome_music =========================== ### F. 在 Linux server 部署 Navidrome (docker 容器) ===== bash 命令列区块 ===== # 建立容器部署资料夹 sudo mkdir /opt/navidrome # 建立专门运行容器的系统使用者,docker-user # 该帐号不能登入,只给系统服务使用,不需设定密码 # 不建议使用预设权限部属容器 sudo useradd -r docker-user # 将主要使用者加入 docker-user 群组,以便之後能够读写 docker-user 写入的档案 sudo usermod -a -G docker-user $USER # 确认使用者的 uid 和 gid id docker-user id $USER # 假设 docker-user 这个使用者 uid:gid=998:998 # 而主要使用者是预设值 uid:gid=1000:1000 # 调整资料夹拥有权和适当权限 # 1000:998 分别是主要使用者与 docker-user 群组的 uid/gid,请依自己环境调整 sudo chown 1000:998 /opt/navidrome chmod 750 /opt/navidrome # 进入部署资料夹内 cd /opt/navidrome # 建立资料夹存放 navidrome 设定档案,并给予适当权限 mkdir navidrome_data chown 1000:998 navidrome_data chmod 750 navidrome_data # 编辑 docker-compose.yml 文件,填入下方yml内容 nano docker-compose.yml ========================= ===== yml 文件内容 ===== services: navidrome: image: deluan/navidrome:latest container_name: navidrome restart: unless-stopped user: 998:998 ports: - "4533:4533" environment: - ND_BASEURL=https://nd.domain.com - ND_SCANNER_SCHEDULE=0 0 * * * volumes: - /mnt/navidrome_music:/music:ro - ./navidrome_data:/data networks: - navidrome_net networks: navidrome_net: driver: bridge ======================= ===== bash 命令列区块 ===== # 检查语法错误 docker compose config # 建立容器 docker compose up -d # 查看 logs 是否有错误 docker compose logs =========================== ### G. 设定 Nginx reverse proxy Nginx 安装不赘述 (请参阅网路资料) 本篇以 host-level nginx 为例,并假设凭证在预设储存位置。 也可以使用容器化的 nginx 并整合进 docker compose。 ===== bash 命令列区块 ===== # 建立 nginx 设定档 sudo nano /etc/nginx/sites-available/nd.domain.com =========================== ===== nginx 设定档 nd.domain.com 内容 ===== server { listen 443 ssl http2; server_name nd.domain.com; ssl_certificate /etc/letsencrypt/live/nd.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nd.domain.com/privkey.pem; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m; add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options nosniff always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; add_header Permissions-Policy "geolocation=()" always; access_log /var/log/nginx/navidrome_access.log; error_log /var/log/nginx/navidrome_error.log; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header X-Forwarded-Host $host; location / { proxy_pass http://127.0.0.1:4533; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_read_timeout 3600s; proxy_cache_bypass $http_upgrade; } location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ { proxy_pass http://127.0.0.1:4533; expires 30d; add_header Cache-Control "public, immutable"; } location ~* \.(mp3|flac|m4a|wav|aac|aiff)$ { proxy_pass http://127.0.0.1:4533; proxy_buffering off; proxy_read_timeout 3600s; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection $connection_upgrade; add_header Accept-Ranges bytes; } } server { listen 80; server_name nd.domain.com; return 301 https://$server_name$request_uri; } ====================================== ### H. Navidrome 初次设定 #### H-1. 开启 ufw 防火墙,先在内网设定 Navidrome 管理员帐户 注1:尚未创建管理员帐户时,不建议把服务放上外网,避免他人抢登 注2:可事先创建 navidrome.toml 档案建立帐户,详情可见官方文件 ===== bash 命令列区块 ===== # 建立防火墙规则,允许内网设备访问 Navidrome 网页介面 sudo ufw allow from any to any port 4533 proto tcp =========================== 浏览器访问 192.168.20.1:4533 (请自行替换伺服器内网 IP),创建管理员帐户 #### H-2. 管理员帐户创建完毕後,启用 nginx reverse proxy,将服务上外网 ===== bash 命令列区块 ===== # 建立软连结以启用该设定 sudo ln -s /etc/nginx/sites-available/nd.domain.com /etc/nginx/sites-enabled # 检查 nginx 语法 sudo nginx -t # 重新载入 nginx 设定 sudo systemctl reload nginx =========================== #### H-3. 检查路由器 port forwarding 设定(不赘述) 现在就能在外网利用 https://nd.domain.com 进入 Navidrome 网页介面 如果在内网环境需要用 DNS 改写或是 NAT hairpin 使用 url 进入介面 #### H-4. 可选步骤:增加 fail2ban 保护 I. Feishin + Mpv 独占播放 1. Feishin 下载:https://github.com/jeffvli/feishin/releases 2. Mpv 下载:https://mpv.io/installation/ 选 shinchiro (git) 1. 目前 windows 可选版本: mpv-x86_64-20250908-git-77dee9b.7z (此为撰文时 的最新版本,请至官方下载页确认最新版本) 下载後解压缩,进到 mpv.exe 所在的资料夹 #### I-1. 测试 mpv 命令 在 Mpv 资料夹内右键选单开启 Windows 终端(powershell),执行以下命令测试是否可 用 注:如果终端是 CMD 直接用 mpv 做为命令即可 ===== powershell 命令列区块 ===== .\mpv ================================= #### I-2. 列出音讯设备 ===== powershell 命令列区块 ===== # 列出可用音讯设备 .\mpv --audio-device=help # 音讯设备结果(举例) List of detected audio devices: 'auto' (Autoselect device) 'wasapi/{183025c0-0d3b-4d76-9360-c1bfe13982e2}' (喇叭 (Steam Streaming Microphone)) 'wasapi/{357f6ae2-c3ef-4272-837a-c23aa517f553}' (喇叭 (Steam Streaming Speakers)) 'wasapi/{aedc8312-491c-4ac1-85ae-5437bc7768e7}' (Echo Cancelling Speakerphone (DELL Slim Soundbar SB522A)) 'wasapi/{e0c575aa-f646-4281-91b3-79cec07d60e5}' (喇叭 (2- PureAudio Lotus DAC5)) 'openal' (Default (openal)) 'sdl' (Default (sdl)) ================================= #### I-3. Feishin 播放设定 范例:https://i.meee.com.tw/gcYTkND.png
1. 指定 mpv.exe 路径 2. Mpv 参数(只列出常用的): https://mpv.io/manual/stable/#audio --ao=<driver> 指定输出的音讯模式(可以选 WASAPI) --audio-exclusive=<yes/no> 是否启用独占模式 --audio-device=<name> 指定音讯设备 --audio-fallback-to-null=<yes/no> 是否启用「null(无声)」输出(预设是 no) --volume=<value> mpv 预设音量 --replaygain=<no|track|album> replaygain 预设模式(预设是 no) --replaygain-clip=<yes|no>     mpv 是否能让 gain 造成 clip(预设是 no) 由於 Feishin 本身的 audio settings 就有重复的参数,且会覆盖 mpv 参数,因此使用 者只要填入 Feishin 本身没有的 mpv 参数即可。但要留意 Feishin 参数会覆盖 mpv 参 数,所以要记得开启 Feishin 相关的设定。 注1:如果不介意播放时独占声音,参数可留空,mpv 会自动以系统预设播放设备播放 举例: 如果我想以上述条列出的音讯设备 "PureAudio Lotus DAC5" 作为播放端,使用 wasapi, 启用 exclusive mode 并能自动切换采样率 Feishin mpv block 参数填入: --audio-device=wasapi/{e0c575aa-f646-4281-91b3-79cec07d60e5} --wasapi-exclusive-buffer=default --audio-fallback-to-null=yes 然後调整 Feishin 其他的设定(settings > 播放) 1. 无间隔音讯(Gapless): 关闭或是 weak (如果使用 yes 会无法自动切换采样率) 2. 取样率:留空 3. 音讯独占模式:开启 4. Replaygain 模式:请自行选择 * * * ## 总结与心得 1. Navidrome 伺服器与客户端软体的搭配,UI 操作非常流畅,在 mobile 端体验接近 Spotify 等商业软体,不会有载入卡顿等问题。 2. PC 客户端可以免安装,不用 VPN 就能连到自己的资料库,也支援 bit perfect 播 放,非常适合那些想要在公司堆放昂贵设备并且有时间偷懒的玩家。 3. 不能支持 ASIO 或是调整 WASAPI 细项有时候还是蛮麻烦的,毕竟像我会丢去办公室 用的东西都是古物,对於 WASAPI event 支援度不好。 4. Navidrome 可以创建智慧播放清单,但需要额外写 conf 手动放入指定资料夹,详情 可以参考官方文件。 5. 其他几个远端开源串流方案的优缺点分析 **foobar2000 使用 webdav 抓取远端资料库 (不需 VPN)** 这是个兼顾管理和外网串流可行方案,但 webdav 在 foobar 有一些小问题,比如封面显 示和资料库抓取的速度没那麽快,不利大型资料库。500GB 的资料库可能要抓半天才能读 完 tag。 **foobar2000 使用 SMB 或 Upnp 伺服器 (需要 VPN)** 需要 VPN,多个步骤,且比较需要远端安装环境配合,外网桌面端不一定能使用 VPN (公司环境) **foobar2000 使用 foo_subsonic 插件串接 navidrome 资料库 (不需 VPN)** 我觉得这是最全面的开源外网串流兼管理的解决方案,但 foo_subsonic 插件已经停止维 护。 **foobar2000 使用 webdav 抓取 Nextcloud 音讯档案 (不需 VPN)** 原则可行,但应该没人想碰含有大型音乐资料库的 Nextcloud 资料维护。 Nextcloud 的维护真的很血尿。 **Jellyfin / Emby / Plex** 这类软体 UI 设计比较偏向综合影音而非纯发烧友取向 **Lyrion Music Server + Squeezelite / Squeezelite-X (需要VPN)** 这应该是最接近 Roon 区网串流的开源方案 UI的设计、稳定性和操作流畅度都比 foobar + Upnp 好上一大截 --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 111.242.31.247 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Headphone/M.1757851310.A.EAF.html
1F:推 breadf: 古物让他入土为安吧 09/14 20:18
压榨到最後一刻 XD
2F:→ raidcrash: 安卓推荐Symfonium 算是用起来最舒服的客户端了 09/14 20:50
3F:→ raidcrash: 智慧型播放清单可以用Feishin创建跟编辑 比较简单点 09/14 20:51
原来 Feishin 可以建,还没玩到这一块,感谢
4F:→ raidcrash: 最近在玩AudioMuse-AI Plex/Subsonic版本的Sonic Analy 09/14 20:55
5F:→ raidcrash: sis 挺有趣的 有兴趣可以玩玩 09/14 20:56
6F:→ raidcrash: 更正 *Jellyfin/Subsonic 09/14 20:56
7F:→ raidcrash: https://github.com/NeptuneHub/AudioMuse-AI 09/14 20:56
这个很酷!又有东西可以玩!
8F:推 whydan: 龟~~神~~ 09/14 21:24
这很好玩欸 坏蛋大要不要来开一个
9F:→ comipa: 推教学文! 09/15 08:07
10F:推 tritonCKL: 推教学,目前是用gonic搭配feishin(pc), Symfonium(安 09/15 09:29
11F:→ tritonCKL: 卓), airsonic-refix(web), gonic有支援资料夹浏览蛮符 09/15 09:29
12F:→ tritonCKL: 合我需求的xD 09/15 09:29
感谢推荐,我先 starred/watch 起来
13F:推 Pixmi: 推教学文,之前我是NAS架设Volumio串流,後来是AM简单听了 09/15 10:31
Volumio 应该也能做外网串流,但需要订阅 premium 的样子。 以前用过一阵子但觉得 Volumio 的 UI 流畅度不佳就没继续用了。
14F:推 lll156k1529: 纯推不下 09/15 12:56
20250918 更新: 1. 修正和优化 Nginx reverse proxy 设定 2. 修正部属後创建管理员帐号的步骤,提高安全性 3. 修正: 范例预设关闭 Navidrome 档案分享选项 20251005 更新: 1. 修正命令列区块的表达方式 2. 增加 LMS + squeezelite 替代选项 20251110 更新: 1. 修正 Feishin mpv 音讯设定 ※ 编辑: ultimatevic (60.248.53.79 台湾), 11/10/2025 11:58:57 ※ 编辑: ultimatevic (60.248.53.79 台湾), 11/10/2025 13:54:15 ※ 编辑: ultimatevic (60.248.53.79 台湾), 11/10/2025 13:55:46







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:Gossiping站内搜寻

TOP