打造自己的流媒體音樂服務

每天有空的時候都會聽聽音樂,年齡越大對音樂的依賴越重,不管是上班路上、切菜時、樓上裝修噪音阻絕、外出遊玩、高鐵上、深夜失眠、打遊戲等,幾乎都要聽上一段。有道是音樂永遠不會背叛人,牛馬療傷治癒神器。

以前我用網易雲音樂,還通過活動弄了會員,後來忍不了各種開屏廣告,轉到汽水音樂。原因是當時汽水音樂方便找抖音上的各種偏門歌曲,可是最近汽水音樂也各種廣告拉滿,甚至聽着歌曲的時候會給你個短劇廣告,更加要命的是,推薦各種重複不靠譜。

於是再次萌生打造自己的流媒體音樂服務的想法,以前切換汽水音樂前一段時間,我也嘗試過使用polaris + 配套iOS客戶端,後來這個iOS客戶端都不見了。

事已至此,只能另覓方案:Navidrome + amperfy + yt-dlp,三者巧妙組合,滿足窮人療傷需求。

話不多說,直接開始操作:

1. 在樹莓派上部署Navidrome

老讀者可能會知道,在家裏我一直使用樹莓派跑sing-box,來解決翻牆問題。自己維護了一個自動代理,iPhone + iPad + Firefox 等支持代理的設備,都能輕鬆翻。速度比用各種小飛機快多了,至少我體驗下來是這樣,信我!

樹莓派掛在路由器旁邊,長期開機的,功耗才幾瓦,有個10G的存儲空間,非常適合用來部署Navidrome。

安裝Navidrome,注意選對版本,我用的是 navidrome_0.58.5_linux_armv7.deb,注意是armv7,樹莓派是 Model B的,不同架構別搞錯了。

如果你和我一樣樹莓派跑的Debian,報錯:

1 package architecture (armv7) does not match system (armhf)

解決方案:

1sudo dpkg --add-architecture armv7 

然後安裝:

1sudo apt install ./navidrome_0.58.5_linux_armv7.deb

我都是用官方默認配置, 個人覺得合理規範,記住這音樂目錄/opt/navidrome/music,把你收藏的音樂都放在這裏。

 1mephisto@raspberrypi:~ $ cat /etc/navidrome/navidrome.toml
 2DataFolder = "/var/lib/navidrome"
 3MusicFolder = "/opt/navidrome/music"
 4
 5mephisto@raspberrypi:~ $ systemctl cat navidrome.service
 6# /etc/systemd/system/navidrome.service
 7[Unit]
 8Description=Your Personal Streaming Service
 9ConditionFileIsExecutable=/usr/bin/navidrome
10
11After=remote-fs.target network.target
12
13[Service]
14StartLimitInterval=5
15StartLimitBurst=10
16ExecStart=/usr/bin/navidrome "service" "execute" "-c" "/etc/navidrome/navidrome.toml"
17WorkingDirectory=/var/lib/navidrome
18User=navidrome
19Restart=on-failure
20SuccessExitStatus=1 2 8 SIGKILL
21TimeoutStopSec=20
22RestartSec=120
23EnvironmentFile=-/etc/sysconfig/navidrome
24
25DevicePolicy=closed
26NoNewPrivileges=yes
27PrivateTmp=yes
28ProtectControlGroups=yes
29ProtectKernelModules=yes
30ProtectKernelTunables=yes
31RestrictAddressFamilies=AF_UNIX AF_INET AF_INET6
32RestrictNamespaces=yes
33RestrictRealtime=yes
34SystemCallFilter=~@clock @debug @module @mount @obsolete @reboot @setuid @swap
35ReadWritePaths=/var/lib/navidrome
36ProtectSystem=full
37
38[Install]
39WantedBy=multi-user.target

2. 音樂App amperfy

蘋果用戶去Apple Store 上搜索下載即可,免費的(安卓各種類似軟件就更多了,選擇一個即可)。選擇這個我也是對比其它測試了的,沒有發現有什麼bug,而且代碼都是開源的,對比一些收費或者個人App,絲毫不遜色。

源碼在這裏:https://github.com/BLeeEZ/amperfy,更新也很頻繁,比我以前用的 polaris 活躍多了,而且應該不會消失。當然,你也可以選擇其它的APP,蘿蔔白菜各有所愛。

3. 手機如何連接流媒體服務?

上述兩部分流媒體服務 Navidrome 和 amperfy 都有了,二者怎麼連接呢?很簡單。

如果在同一內網下,看截圖:

Amperfy login

http 服務的地方填上類似如: http://192.168.1.5:4533

Navidrome 服務啓動後會監聽 4533 端口,用戶名/密碼你首次用瀏覽器訪問時,web頁面會引導你創建用戶/密碼,很簡單的,試試就會懂。

這樣可以說萬事俱備,只欠東風了。其實,還可以優化,比如不在家裏,在外面的時候,如何訪問樹莓派上的服務呢?這個最後再說。

4. 獲取音樂

其實,這部分非常敏感,畢竟現在音樂都是有版權的。我只能說,各路神仙各顯神通。比如你有合法手段獲取到,本人只是技術方案驗證,不負任何法律責任。

這裏假設你要下載的都是無版權的歌曲,以遊戲0 A.D的配樂爲示例:

 1➜  yt-dlp -x --cookies-from-browser firefox --proxy 192.168.1.5:1081 --no-check-certificate "https://www.youtube.com/watch?v=kUqhZTaxP50"
 2Extracting cookies from firefox
 3Extracted 1356 cookies from firefox
 4[youtube] Extracting URL: https://www.youtube.com/watch?v=kUqhZTaxP50
 5[youtube] kUqhZTaxP50: Downloading webpage
 6[youtube] kUqhZTaxP50: Downloading tv downgraded player API JSON
 7[youtube] kUqhZTaxP50: Downloading web safari player API JSON
 8[youtube] kUqhZTaxP50: Downloading player b2515611-main
 9[youtube] [jsc:deno] Solving JS challenges using deno
10WARNING: [youtube] [jsc] Remote components challenge solver script (deno) and NPM package (deno) were skipped. These may be required to solve JS challenges. You can enable these downloads with  --remote-components ejs:github  (recommended) or  --remote-components ejs:npm , respectively. For more information and alternatives, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
11WARNING: [youtube] kUqhZTaxP50: n challenge solving failed: Some formats may be missing. Ensure you have a supported JavaScript runtime and challenge solver script distribution installed. Review any warnings presented before this message. For more details, refer to  https://github.com/yt-dlp/yt-dlp/wiki/EJS
12[youtube] kUqhZTaxP50: Downloading m3u8 information
13[info] kUqhZTaxP50: Downloading 1 format(s): 96
14[download] Sleeping 4.00 seconds as required by the site...
15[hlsnative] Downloading m3u8 manifest
16[hlsnative] Total fragments: 31
17[download] Destination: Ammon-Ra - 0 A.D Soundtrack [kUqhZTaxP50].mp4
18[download] 100% of    7.17MiB in 00:00:20 at 364.43KiB/s
19[FixupM3u8] Fixing MPEG-TS in MP4 container of "Ammon-Ra - 0 A.D Soundtrack [kUqhZTaxP50].mp4"
20[ExtractAudio] Destination: Ammon-Ra - 0 A.D Soundtrack [kUqhZTaxP50].m4a
21Deleting original file Ammon-Ra - 0 A.D Soundtrack [kUqhZTaxP50].mp4 (pass -k to keep)
22➜  ls -al Ammon-Ra\ -\ 0\ A.D\ Soundtrack\ \[kUqhZTaxP50\].m4a
23-rw-r--r-- 1 mephisto mephisto 2542396 Nov 21 19:32 'Ammon-Ra - 0 A.D Soundtrack [kUqhZTaxP50].m4a'

這樣就能得到一個 .m4a 的音樂文件,其它格式也可使用參數獲取,默認的 m4a 我聽起來也沒什麼毛病。一定要說你能聽出火電、水電、核電的差異的,我承認你比我厲害😊。

關鍵核心:yt-dlp -x --cookies-from-browser firefox --proxy 192.168.1.5:1081 --no-check-certificate

proxy 192.168.1.5:1081 是翻牆用的,中國大陸很幸福,能學技術。

其它參數都是我搜出來的,不然沒法下載,要從瀏覽器獲取cookies,且要忽略證書,還是費了些時間摸索的。

至此,音樂來源的問題解決了,再次聲明,本人建議只下載無版權音樂!另外有一個深切感受,yt-dlp 很強大,也很好用。

5. 如何公網訪問

最後,部分用戶可能希望,在外面的時候也能訪問自己家裏的樹莓派上的Navidrome服務。

這其實單純是個網絡和資源問題。我的解決方案如下,不一定適合所有人。

我有域名也有海外丐版主機,使用frp就可以很輕鬆解決。流量路線如下:

在外無所事事、遊手好閒聽歌的你手捏 -> 手機📱-> 有公網域名/ip的主機(Frps) -> 樹莓派(Frpc) -> Navidrome -> 你收藏的歌曲

Frps 服務端示例(跑在有公網服務能力的主機上):

1root@tokyo:~# cat /etc/frp/frps.toml
2bindPort = 8888
3vhostHTTPPort = 8088
4auth.method = "token"
5auth.token = "your_token"

Frpc 客戶端示例(跑在樹莓派上):

 1mephisto@raspberrypi:~ $ cat /etc/frp/frpc.toml
 2serverAddr = "your_vps_server_public_ip"
 3serverPort = 8888
 4auth.method = "token"
 5auth.token = "your_token"
 6
 7[[proxies]]
 8name = "navidrome"
 9type = "http"
10localIP = "127.0.0.1"
11localPort = 4533
12customDomains = ["navidrome.xxx.com"]

我這裏是通過域名的方式訪問的,https://navidrome.xxx.com 就是 amperfy 訪問的地址。你也可以只用公網ip,畢竟域名更方便好記一點,ip是會變動的。

vhostHTTPPort = 8088 是給caddy用的:

1navidrome.xxx.com {
2    reverse_proxy localhost:8088
3}

這樣連客戶端不用填端口,少敲字符快捷方便一些。

如果你沒有域名,用公網 ip:port 的方式也是可以的。

6. 寫在最後

這套窮鬼流媒體音樂服務方案,有一定的自由度,隨時隨地有網都可以聽歌。如果你只是在家裏聽,幾乎沒有任何成本(不需要域名公網ip等),只要一點點時間整理音樂。

還有,我是在電腦下好音樂,rsync同步到樹莓派,電腦接屏幕方便操作。

記住,開放公網訪問的時候,一定要留意網絡安全問題,操作的時候記住自己在做什麼,Navidrome的用戶密碼強度設置高一點,樹莓派上最好別放重要東西,萬一有漏洞呢?caddy層也可考量加防護,只是我沒測試加防護後 Amperfy 是否還能正常連接,目前先這樣。

最後修改於: Friday, November 21, 2025

相關文章:

翻譯: