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/m.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燈, 水草

請輸入看板名稱,例如:BabyMother站內搜尋

TOP