打造自己的流媒体音乐服务
每天有空的时候都会听听音乐,年龄越大对音乐的依赖越重,不管是上班路上、切菜时、楼上装修噪音阻绝、外出游玩、高铁上、深夜失眠、打游戏等,几乎都要听上一段。有道是音乐永远不会背叛人,牛马疗伤治愈神器。
以前我用网易云音乐,还通过活动弄了会员,后来忍不了各种开屏广告,转到汽水音乐。原因是当时汽水音乐方便找抖音上的各种偏门歌曲,可是最近汽水音乐也各种广告拉满,甚至听着歌曲的时候会给你个短剧广告,更加要命的是,推荐各种重复不靠谱。
于是再次萌生打造自己的流媒体音乐服务的想法,以前切换汽水音乐前一段时间,我也尝试过使用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 都有了,二者怎么连接呢?很简单。
如果在同一内网下,看截图:
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 是否还能正常连接,目前先这样。
版权申明:
- 未标注来源的内容全部为原创,未经授权请勿转载(因转载后排版往往错乱、内容不可控、无法持续更新等);
- 非营利为目的,演绎本博客任何内容,请以'原文出处'或者'参考链接'等方式给出本站相关网页地址(方便读者)。
相关文章:
- 手机听离线音乐
- MangoHud性能监控
- 独立窗口管理器下无法录屏问题处理
- Arch linux如何顺畅连接蓝牙设备
- 使用Git和Ansible管理配置文件
- Arch Linux SSL VPN 客户端配置
- Arch linux下iNode客户端的安装和使用方法
- 树莓派跑分流代理
- 解决Linux下网络配置无法变更保存的问题
- labwc环境启用wlogout