281 lines
11 KiB
Markdown
281 lines
11 KiB
Markdown
|
|
|
|||
|
|
|
|||
|
|
# 音乐服务器
|
|||
|
|
|
|||
|
|
- navidrome 不支持strm
|
|||
|
|
- songloft 待部署
|
|||
|
|
- 飞牛音乐 不支持strm 升级后可以添加远程挂载了!
|
|||
|
|
- Music TagWeb 2.0 支持subsonic strm 已购买永久使用
|
|||
|
|
- jellyfin/emby
|
|||
|
|
- audiodock 声仓 支持strm jellyfin/navidrome
|
|||
|
|
# 音乐App
|
|||
|
|
- ✅音流 iOS 支持navidrome+subsonic+emby+jellyfin+plex 支持strm
|
|||
|
|
- ✅箭头音乐 iOS+Android 支持navidrome+飞牛音乐+audiobookshelf+subsonic
|
|||
|
|
- ❌流云音盒 鸿蒙 5+
|
|||
|
|
- ❌音乐方舟 鸿蒙 5+
|
|||
|
|
- Prologue Android
|
|||
|
|
- Symfonium Android navidrome+audiobookshelf(From local files and NAS to Plex, Emby, Jellyfin, Audiobookshelf, Subsonic, OpenSubsonic, Navidrome and cloud drives, Symfonium unifies your music and audiobook libraries in one Android player.)
|
|||
|
|
- ✅流云 iOS navidrome+icloud+飞牛音乐+songloft+百度网盘+emby 永久会员38元
|
|||
|
|
- jellyfin及第三方播放器
|
|||
|
|
- audiodock 安卓
|
|||
|
|
# 有声书服务器
|
|||
|
|
|
|||
|
|
- ✅audiobookshelf 支持RSS 生态支持
|
|||
|
|
- ❌leelaa reader server 暂停使用 鸡肋!支持RSS 不支持wma 已购买永久使用
|
|||
|
|
- ✅ting reader 听悦 支持RSS 有丰富的插件 支持strm+刮削
|
|||
|
|
- 声仓 audiodock
|
|||
|
|
-
|
|||
|
|
-
|
|||
|
|
|
|||
|
|
|
|||
|
|
有声书App
|
|||
|
|
|
|||
|
|
- ✅听见有声 audiobookshelf+ting reader+leelaa+emby+audiodown+musicDL iOS 支持strm
|
|||
|
|
- leelaa reader 对应server 支持strm(iOS有bug) 不能自动刮削 不支持wma 安卓支持strm iOS说是支持strm 测试有问题
|
|||
|
|
- ✅still 希声 audiobookshelf iOS
|
|||
|
|
- ✅audiobookshelf Android 自带
|
|||
|
|
- Buchable Android audiobookshelf
|
|||
|
|
- lissen audiobookshelf Android
|
|||
|
|
- ✅plappa iOS 永久38元
|
|||
|
|
- ✅ting reader app Android+ipa(须自签名) 安卓/Mate30有点卡 leelaa要流畅一点
|
|||
|
|
|
|||
|
|
|
|||
|
|
📊 总结方案:
|
|||
|
|
1. ⭐音乐:navidrome+飞牛音乐 流云+音流
|
|||
|
|
2. ⭐有声:audiobookshelf+ting reader 听见有声(iOS)+still(iOS)+ting reader(android)
|
|||
|
|
- audiobookshelf用于每天定时下载博客RSS到本地,由tingreader监听更新书库
|
|||
|
|
- tingreader:主要保存在115153上,openlist生成strm文件,将strm文件保存到/vol4/1000/MediaLibrary/有声书目录
|
|||
|
|
- audiobookshelf:将115153远程挂载作为本地目录文件,添加到媒体库,效果不好!
|
|||
|
|
-
|
|||
|
|
|
|||
|
|
|
|||
|
|
英语+历史 115153
|
|||
|
|
|
|||
|
|
|
|||
|
|
- 💡箭头音乐App 两者通用 箭头app bug:audiobookshelf 媒体库只加载了一个,原本是2个,待观察!
|
|||
|
|
- ⚠️鸿蒙上的音乐方舟和流云音盒app待试用
|
|||
|
|
- ✨songloft可以与小爱同学协同,待搭建。
|
|||
|
|
|
|||
|
|
歌曲组合:飞牛音乐+箭头音乐app
|
|||
|
|
流云音乐app 界面差点 歌词跟歌曲对不上
|
|||
|
|
箭头音乐app:经常没有歌词。。。飞牛web:有歌词
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
# 参考资料
|
|||
|
|
|
|||
|
|
## Ting‑Reader(听悦)自建有声书库完整评测
|
|||
|
|
|
|||
|
|
> Ting‑Reader(听悦)**国产开源Docker有声书服务端**,主打中文有声书,Rust后端,对中文资源友好,**和Audiobookshelf(ABS)是现在自建有声书两大主流选择**。
|
|||
|
|
|
|||
|
|
## ✨核心亮点
|
|||
|
|
|
|||
|
|
1. **中文元数据刮削很强** 对接喜马拉雅源,自动抓取书名、演播者、简介、封面,中文有声书识别远好于ABS(ABS英文刮削强,中文弱),文件名混乱也能匹配。
|
|||
|
|
2. **支持WebDAV库** 不只是本地目录,可以直接挂载Alist、115、夸克WebDAV网盘当书库,不用把文件拷贝到NAS本地磁盘。
|
|||
|
|
3. **官方原生客户端**
|
|||
|
|
|
|||
|
|
- Android:官方APK直接下载,离线缓存
|
|||
|
|
- Windows/macOS/Linux:Flutter桌面客户端
|
|||
|
|
- Web/PWA网页端,手机浏览器直接用
|
|||
|
|
- iOS:**只有未签名IPA,不能App Store直接装**,普通iPhone只能用网页PWA,无法得到CarPlay支持。
|
|||
|
|
|
|||
|
|
4. 播放功能:倍速、睡眠定时、跳过片头片尾、多用户独立进度、根据封面自动变色UI、插件系统(热插拔不用重启容器)。
|
|||
|
|
5. 资源占用低,Rust编写,小主机/树莓派/群晖/飞牛fnOS都能跑,提供现成docker‑compose配置。
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
# Ting‑Reader docker‑compose.yml
|
|||
|
|
services:
|
|||
|
|
ting-reader:
|
|||
|
|
image: dqsq2e2/ting-reader:latest
|
|||
|
|
container_name: ting-reader
|
|||
|
|
ports:
|
|||
|
|
- "3000:3000"
|
|||
|
|
volumes:
|
|||
|
|
- ./data:/app/data
|
|||
|
|
- ./plugins:/app/plugins
|
|||
|
|
- ./temp:/app/temp
|
|||
|
|
- /你的有声书本地目录:/app/storage
|
|||
|
|
restart: always
|
|||
|
|
environment:
|
|||
|
|
- RUST_LOG=info
|
|||
|
|
- TING_SERVER__HOST=0.0.0.0
|
|||
|
|
- TING_SERVER__PORT=3000
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
访问地址:`http://nasip:3000`
|
|||
|
|
|
|||
|
|
## ⚠️短板(重点,对比Audiobookshelf)
|
|||
|
|
|
|||
|
|
1. **iOS硬伤**:没有App Store上架版本,官方只提供未签名IPA,普通用户只能网页PWA;网页没有系统后台播放、CarPlay、离线缓存,iPhone体验大打折扣。
|
|||
|
|
|
|||
|
|
> ABS虽然官方iOS也TestFlight,但大量第三方App(希声Still、AudioBooth)App Store可直接下,支持CarPlay离线。
|
|||
|
|
|
|||
|
|
2. **没有播客订阅**:不能订阅网络播客;ABS原生完整播客功能。
|
|||
|
|
3. **无电子书阅读(EPUB/PDF)**,只做音频;ABS可以同时管理有声书+电子书。
|
|||
|
|
4. **第三方客户端几乎没有**,只能用官方客户端/PWA;ABS生态庞大,大量社区App。
|
|||
|
|
5. m4b内置章节解析能力弱于ABS;多文件分割的有声书识别合并不如ABS成熟。
|
|||
|
|
|
|||
|
|
## 📊 Ting‑Reader vs Audiobookshelf(ABS)选型对比
|
|||
|
|
|
|||
|
|
| 项目 | Ting‑Reader(听悦) | Audiobookshelf(ABS) |
|
|||
|
|
| ----------- | ------------------ | ------------------------------------- |
|
|||
|
|
| 中文刮削 | ⭐⭐⭐⭐⭐喜马拉雅源,中文强 | ⭐⭐ 英文强,中文需要额外插件⭐ |
|
|||
|
|
| WebDAV网盘库 | ✅原生支持 | ❌不支持WebDAV,只能本地挂载 |
|
|||
|
|
| 安卓客户端 | ✅官方APK | ✅官方APK+大量第三方 |
|
|||
|
|
| iPhone | ❌无商店版,仅网页PWA | ✅App Store大量第三方App(希声Still等)支持CarPlay |
|
|||
|
|
| 播客功能 | ❌无 | ✅完整播客订阅 |
|
|||
|
|
| EPUB/PDF电子书 | ❌ | ✅支持 |
|
|||
|
|
| 第三方客户端生态 | 极少 | 非常丰富 |
|
|||
|
|
| 适合资源 | 中文有声书,大量网盘WebDAV资源 | 有声书+播客+电子书,本地文件库 |
|
|||
|
|
|
|||
|
|
## ✅怎么选
|
|||
|
|
|
|||
|
|
### 选 Ting‑Reader(听悦),如果你:
|
|||
|
|
|
|||
|
|
1. **主力安卓手机,少量/不用iPhone**;
|
|||
|
|
2. 大量中文有声书,想要自动刮削中文信息,不想手动整理标签;
|
|||
|
|
3. 需要直接WebDAV挂载网盘(Alist等)做书库,不想把文件下载本地NAS;
|
|||
|
|
4. 不需要播客、电子书阅读。
|
|||
|
|
|
|||
|
|
### 选 Audiobookshelf(ABS),如果你:
|
|||
|
|
|
|||
|
|
1. **有iPhone,想要CarPlay、原生App体验**;
|
|||
|
|
2. 需要播客订阅、EPUB电子书阅读;
|
|||
|
|
3. 本地磁盘存储有声书,不需要WebDAV源;
|
|||
|
|
4. 希望多第三方客户端可以自由选择。
|
|||
|
|
|
|||
|
|
> 💡折中方案:两个docker同时跑,ABS处理本地库+播客,Ting‑Reader处理WebDAV网盘中文有声书,资源占用都很低。
|
|||
|
|
|
|||
|
|
## 补充注意点
|
|||
|
|
|
|||
|
|
1. Ting‑Reader网页版在iPhone上:锁屏后容易断播,系统限制,**无法像原生App那样后台稳定播放**。
|
|||
|
|
2. 外网访问建议套反向代理开启HTTPS,不要裸端口暴露公网。
|
|||
|
|
3. WebDAV添加库时,网络网盘资源扫描受网速影响,不要一次性扫描超大库。
|
|||
|
|
|
|||
|
|
如果你需要,我可以把两者的反向代理Nginx配置一并给你。
|
|||
|
|
|
|||
|
|
## Nginx 反向代理配置
|
|||
|
|
|
|||
|
|
> 前提说明
|
|||
|
|
|
|||
|
|
1. 假设域名:
|
|||
|
|
|
|||
|
|
- `abs.example.com` → 代理 Audiobookshelf(ABS),容器内部端口 `80`,宿主机端口 `13378`
|
|||
|
|
- `ting.example.com` → 代理 Ting‑Reader,容器内部端口 `3000`,宿主机端口 `3000`
|
|||
|
|
|
|||
|
|
2. 使用 `certbot` 获取 SSL 证书;证书路径 `/etc/letsencrypt/live/你的域名/`
|
|||
|
|
3. Nginx 与 docker 服务在同一台机器,后端地址写 `127.0.0.1:端口`;不在同一台则替换为对应内网IP。
|
|||
|
|
4. 两个服务都需要**websocket支持**,否则网页端实时状态、播放进度同步会异常。
|
|||
|
|
|
|||
|
|
### 1)Audiobookshelf (abs.example.com) nginx 配置
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name abs.example.com;
|
|||
|
|
return 301 https://$host$request_uri;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server {
|
|||
|
|
listen 443 ssl http2;
|
|||
|
|
server_name abs.example.com;
|
|||
|
|
|
|||
|
|
ssl_certificate /etc/letsencrypt/live/abs.example.com/fullchain.pem;
|
|||
|
|
ssl_certificate_key /etc/letsencrypt/live/abs.example.com/privkey.pem;
|
|||
|
|
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
# WebSocket 关键配置,ABS必须
|
|||
|
|
proxy_http_version 1.1;
|
|||
|
|
proxy_set_header Upgrade $http_upgrade;
|
|||
|
|
proxy_set_header Connection "upgrade";
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://127.0.0.1:13378;
|
|||
|
|
proxy_buffering off;
|
|||
|
|
client_max_body_size 100M;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 2)Ting‑Reader (ting.example.com) nginx 配置
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
server {
|
|||
|
|
listen 80;
|
|||
|
|
server_name ting.example.com;
|
|||
|
|
return 301 https://$host$request_uri;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
server {
|
|||
|
|
listen 443 ssl http2;
|
|||
|
|
server_name ting.example.com;
|
|||
|
|
|
|||
|
|
ssl_certificate /etc/letsencrypt/live/ting.example.com/fullchain.pem;
|
|||
|
|
ssl_certificate_key /etc/letsencrypt/live/ting.example.com/privkey.pem;
|
|||
|
|
|
|||
|
|
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;
|
|||
|
|
|
|||
|
|
# Ting‑Reader 同样需要WebSocket
|
|||
|
|
proxy_http_version 1.1;
|
|||
|
|
proxy_set_header Upgrade $http_upgrade;
|
|||
|
|
proxy_set_header Connection "upgrade";
|
|||
|
|
|
|||
|
|
location / {
|
|||
|
|
proxy_pass http://127.0.0.1:3000;
|
|||
|
|
proxy_buffering off;
|
|||
|
|
client_max_body_size 100M;
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 单域名子路径模式(不推荐,简单给示例)
|
|||
|
|
|
|||
|
|
> 不建议子路径部署(如 `https://xxx.com/abs`、`https://xxx.com/ting`),两个程序对子路径兼容都一般,容易出现静态资源、websocket异常。优先用**子域名**。
|
|||
|
|
|
|||
|
|
### 使用步骤
|
|||
|
|
|
|||
|
|
1. 将配置写入 nginx sites‑available 下,软链接到 sites‑enabled
|
|||
|
|
2. 检查配置语法:
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
nginx -t
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
3. 重载nginx
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
systemctl reload nginx
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 重要踩坑提示
|
|||
|
|
|
|||
|
|
1. **容器绑定地址**:docker 端口映射必须是 `0.0.0.0:xxxx:xxxx`,不要只绑定 127.0.0.1(如果你nginx不在本机)。
|
|||
|
|
2. 不要直接把容器端口暴露公网,全部走nginx 443 HTTPS。
|
|||
|
|
3. ABS第三方客户端(希声Still、AudioBooth等)填写地址时直接填完整 `https://abs.example.com`,不要带端口。
|
|||
|
|
4. Ting‑Reader网页/PWA访问也直接用 `https://ting.example.com`。
|
|||
|
|
5. 如果你使用 Nginx Proxy Manager(NPM),不需要手写上面配置,网页界面填后端地址,开启Websocket开关即可。
|
|||
|
|
|
|||
|
|
### NPM(Nginx Proxy Manager)界面填写要点
|
|||
|
|
|
|||
|
|
- ABS:Forward Hostname/IP `127.0.0.1`,Port `13378`,勾选 **WebSockets Support**
|
|||
|
|
- Ting‑Reader:Forward Hostname/IP `127.0.0.1`,Port `3000`,勾选 **WebSockets Support**
|
|||
|
|
- 申请SSL证书,强制HTTPS。
|
|||
|
|
|
|||
|
|
> 如果你需要,我可以顺带给一份两者的 Caddy v2 配置(更简单,自动https)。
|
|||
|
|
|
|||
|
|
|
|||
|
|
|
|||
|
|
## audiodock 声仓
|
|||
|
|
|
|||
|
|
https://post.smzdm.com/p/arz6orng/
|
|||
|
|
https://laosu.tech/2026/03/28/%E9%9F%B3%E4%B9%90%E5%92%8C%E6%9C%89%E5%A3%B0%E8%AF%BB%E7%89%A9%E6%92%AD%E6%94%BE%E5%99%A8AudioDock/
|
|||
|
|
https://github.com/NasDock/AudioDock
|