惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
N
News and Events Feed by Topic
PCI Perspectives
PCI Perspectives
Help Net Security
Help Net Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
V2EX - 技术
V2EX - 技术
Google Online Security Blog
Google Online Security Blog
Hacker News: Ask HN
Hacker News: Ask HN
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
P
Palo Alto Networks Blog
The Last Watchdog
The Last Watchdog
C
Cyber Attacks, Cyber Crime and Cyber Security
Security Latest
Security Latest
Application and Cybersecurity Blog
Application and Cybersecurity Blog
W
WeLiveSecurity
Cloudbric
Cloudbric
O
OpenAI News
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Webroot Blog
Webroot Blog
www.infosecurity-magazine.com
www.infosecurity-magazine.com
S
Schneier on Security
罗磊的独立博客
雷峰网
雷峰网
S
Security Affairs
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LINUX DO - 热门话题
NISL@THU
NISL@THU
量子位
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 【当耐特】
博客园 - Franky
S
Security @ Cisco Blogs
Project Zero
Project Zero
AI
AI
T
Troy Hunt's Blog
Latest news
Latest news
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
The Cloudflare Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Scott Helme
Scott Helme
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Jina AI
Jina AI
I
Intezer
V
Visual Studio Blog
Cyberwarzone
Cyberwarzone
博客园 - 叶小钗

mephisto.cc

修复rime-ice无法弹出候选框的问题 开机滚动字体显示优化 个人网站安全防护 树莓派上部署Vaultwarden 使用goaccess实时分析Caddy日志 个人网站监控 Hugo全站AVIF记 Linux下尝试使用Godot开发小游戏 Arch linux dae 透明代理 Airflow接管galler-dl下载任务 如何使用gallery-dl批量下载图像 Arch核显下如何愉快玩Dota2和CS2 Arch/labwc 环境网络相关设置 Rime添加dota2词库 Arch 重装记录 Supertuxkart iOS版终于发布了 剪切板管理工具clipcat推荐 MangoHud性能监控 微信小程序开发记 Rofi试用 解决Arch下VSCode无法输入中文的问题 独立窗口管理器下无法录屏问题处理 上海市二手房成交数据监控 OpenLDAP监控 Arch linux如何顺畅连接蓝牙设备 使用Git和Ansible管理配置文件 Arch Linux SSL VPN 客户端配置 简单获取celery任务实时结果 Arch linux下iNode客户端的安装和使用方法 券商费率调整记 迷你主机组装记 Labwc更换定制皮肤 树莓派跑分流代理 实用自动代理配置示例 九年老鼠标复活记 Openvpn示例 Mac下如何旋转webp图片 如何隐藏Vscode中Markdown PDF插件的头部内容 解决Linux下网络配置无法变更保存的问题 labwc环境启用wlogout Ubuntu下新官方微信尝鲜 简单检测用户是否开启广告屏蔽 Atuin ZFS下卡顿问题解决 Wine安装64位微信 Fish 和 Atuin使用记 Fastapi简单实现临时下载链接 Fastapi微信公众号开发简要 Hugo根据语种展示不同内容 如何修复Waybar微信图标错误 信封加密简要 Linux环境下维护公众号记录 快速隐藏和呼出终端 Wayland环境自动切换壁纸 SuperTuxKart 试玩 简单抓取雪球股票快讯 为什么你的kill命令不能列出信号表 Wine安装微信保姆教程 Hysteria科学上网简要 Ubuntu 23.10 钉钉无法启动解决方法 网站导航栏防止插入Adsense自动广告 Linux环境按键检测 Hugo文末添加最后修改时间 Wayland环境ksnip无法复制问题解决 我眼中的股票市场 Caddy简单图片防盗链 greetd和regreet使用教程 Wayland环境下截图加后期修改 Wayland 环境下gif录屏 Firefox的一些有趣功能 Ubuntu 切换系统语言 Firefox 标题栏高度调整 网站添加回到顶部功能 Hugo自定义字体 Labwc 便捷配置 Wofi使用教程 窗口管理器labwc使用记 文件共享软件Dufs推荐 Hugo静态站点接入Adsense广告 Fcitx5配置详解 Ubuntu安装chrome的方法总结 一种Xterm.js的全屏方案 Google网址收录api Python示例 手机听离线音乐 Snipe it资产导入 应用启动器yofi使用配置 Snipe it资产管理系统安装使用 Ubuntu开机启动加速 Vue3 vite TypeScript跨域等相关设置 Ubuntu手动升级Libreoffice Ubuntu设置alacritty为默认终端 简体文章批量转换为繁体 使用Inkscape调整svg图片大小 实用命令 使用mitmproxy给手机app抓包 Python中rstrip方法细解 Github同主机多仓库部署deploy key问题处理 Linux安装最新版本Python KeePassXC使用教程 Ubuntu 22.10连接蓝牙耳机报错br-connection-profile-unavailable解决方法 Caddy日志配置轮转和格式化
打造自己的流媒体音乐服务
2025-11-21 · via mephisto.cc

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

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

于是再次萌生打造自己的流媒体音乐服务的想法,以前切换汽水音乐前一段时间,我也尝试过使用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 是否还能正常连接,目前先这样。