Files
StudyDiary-20261009/02-学习笔记/自建音乐库和有声书库.md
CrazyJasonwell e97be9ac8c commit all
2026-10-09 22:06:40 +08:00

11 KiB
Executable File
Raw Blame History

音乐服务器

  • 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支持。
  1. 播放功能:倍速、睡眠定时、跳过片头片尾、多用户独立进度、根据封面自动变色UI、插件系统(热插拔不用重启容器)。
  2. 资源占用低,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
  1. 使用 certbot 获取 SSL 证书;证书路径 /etc/letsencrypt/live/你的域名/
  2. Nginx 与 docker 服务在同一台机器,后端地址写 127.0.0.1:端口;不在同一台则替换为对应内网IP。
  3. 两个服务都需要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
  1. 重载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