打造自己的流媒体音乐服务

每天有空的时候都会听听音乐,年龄越大对音乐的依赖越重,不管是上班路上、切菜时、楼上装修噪音阻绝、外出游玩、高铁上、深夜失眠、打游戏等,几乎都要听上一段。有道是音乐永远不会背叛人,牛马疗伤治愈神器。

以前我用网易云音乐,还通过活动弄了会员,后来忍不了各种开屏广告,转到汽水音乐。原因是当时汽水音乐方便找抖音上的各种偏门歌曲,可是最近汽水音乐也各种广告拉满,甚至听着歌曲的时候会给你个短剧广告,更加要命的是,推荐各种重复不靠谱。

于是再次萌生打造自己的流媒体音乐服务的想法,以前切换汽水音乐前一段时间,我也尝试过使用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
欢迎关注微信公众号,留言交流;也欢迎使用微信小程序。

相关文章:

翻译: