跳到正文
Berth

服务器 1.0 已发布 · 应用即将上架

Berth — 为你和家人打造的自托管有声书服务器

Berth 是一款开源有声书服务器,可运行在你自己的 VPS、NAS 或 Docker 中。通过网页后台上传书籍,存放在本地磁盘、任意兼容 S3 的存储或 Google Drive 中,然后在 Android 和 iOS 版 Berth 应用中收听,进度永不丢失。

给仓库点 Star 或 Watch,应用上架时就能收到通知。

应用设计稿

问题

为什么有声书在家庭服务器上总是出问题

  • 文件夹扫描靠猜来构建书库

    大多数自托管服务器通过扫描文件夹来重建书库。一个多余的文件就可能让系列错误合并,把文件挪到 NAS 上还可能清空收听进度。

  • 播放位置会倒退

    在锁屏或蓝牙设备上暂停,或在同步完成前打开应用,都可能重置播放位置,这是有声书应用最常见的抱怨。

  • 离线下载卡住

    下载停滞不前、始终无法变成可播放的书,或者曲目播放顺序错乱。

Berth 的设计让这些问题无从发生:数据库是唯一的事实来源,手机自己保存播放位置。

工作原理

你自己托管的服务器,你选择的存储,每部手机上的应用

Berth 由三部分组成。服务器在数据库中保存书库;音频存放在你选择的存储中;应用负责播放,并记住你停在哪里。

  1. 运行服务器

    一个服务器,内置网页后台。安装在 VPS、NAS 或 Docker 中,通过简短的网页向导完成设置。

  2. 上传书籍

    把文件或整个文件夹拖进网页后台:带章节的 m4b 或 mp3 文件夹都行。保存前可编辑元数据。文件夹结构无关紧要。

  3. 用二维码连接手机

    在后台创建听众并出示二维码。手机扫描二维码或输入代码,书库就出现了。听众无需密码。

音频在 Berth 中如何传输

Berth 服务器

网页后台 · 数据库

书库、进度

Berth 应用

Android · iOS

短时效签名链接

你的存储

本地 · S3 · R2 · Google Drive

CDN

可选

使用兼容 S3 的存储时,音频通过短时效签名链接直接从存储或 CDN 串流,服务器不会成为瓶颈。本地磁盘和 Google Drive 则通过服务器串流。

功能

家庭有声书库所需的一切

存储

  • 本地磁盘
  • 任意 S3:AWS、Cloudflare R2、Backblaze B2、MinIO、Yandex Object Storage 等
  • Cloudflare R2 和 Google Drive 通过向导连接,无需手动折腾密钥
  • 可选在 R2 前加一层 Cloudflare CDN
  • 将 Google Drive 文件夹导入为书籍

Android 和 iOS 播放器应用

  • 后台播放,锁屏和通知栏控制
  • 蓝牙按键、Android Auto 和 CarPlay
  • 睡眠定时:按分钟、到章节结束、声音渐弱、摇一摇延长
  • 为每本书记住播放速度
  • 暂停后继续播放时自动回退几秒
  • 章节跳转和 30 秒快进快退

进度与离线

  • 每隔几秒在手机上保存位置,关掉应用也不会丢失
  • 通过普通 HTTP 在设备间同步
  • 只有服务器上的位置更新时,才会替换本地位置
  • 离线下载经过校验和验证,支持断点续传,顺序正确

家庭与管理

  • 手机用二维码连接,听众无需密码
  • 书籍年龄分级 0+ 到 18+,支持筛选
  • 家庭网络(LAN)和远程(WAN)地址,自动切换
  • 可在后台备份数据库,更新前也会自动备份
  • 开源服务器(Apache-2.0),API 用 OpenAPI 描述

对比

Berth 与 Audiobookshelf、Plex 和 Jellyfin 的对比

这四款都能从你自己的服务器提供有声书。区别在于书库如何构建、文件可以存放在哪里,以及手机如何连接。

Berth 与 Audiobookshelf、Plex 和 Jellyfin 的对比
方面BerthAudiobookshelfPlexJellyfin
定位有声书有声书和播客通用媒体服务器通用媒体服务器
书库来源数据库;书籍通过网页后台上传扫描媒体文件夹扫描媒体文件夹扫描媒体文件夹
文件存放位置本地磁盘、任意 S3、Google Drive本地或挂载的文件系统本地或挂载的文件系统本地或挂载的文件系统
音频分发通过签名链接从存储或 CDN 分发,或通过服务器通过服务器通过服务器通过服务器
听众登录二维码,无需密码用户名和密码Plex 账号用户名和密码,或 Quick Connect
移动应用自有 Android 和 iOS 应用(尚未上架)官方 Android 应用;iOS 应用处于 TestFlight 测试阶段Plex 应用和第三方有声书播放器第三方有声书播放器
服务器许可证Apache-2.0GPL-3.0专有GPL-2.0
成熟度服务器 1.0(2026 年 10 月),应用开发中成熟,社区庞大成熟,商业产品成熟,社区庞大

依据截至 2026 年 10 月的公开文档和问题跟踪记录。Audiobookshelf、Plex 和 Jellyfin 都是成熟、广泛使用的项目;Berth 于 2026 年 10 月发布了首个服务器版本,其应用尚未上架。

常见问题

常见问题

Berth 是什么?

Berth 是一款自托管有声书服务器,自带移动应用。你在自己的硬件上运行服务器,通过网页后台上传书籍,选择文件存放位置,家人在 Android 或 iOS 上收听。

现在就能安装 Berth 吗?

服务器可以:1.0 版本可在 Linux 服务器、NAS 或 Raspberry Pi(amd64 和 arm64)上通过 Docker 运行。移动应用尚未上架,给 GitHub 仓库点 Star 或 Watch,上架时就能收到通知。

Berth 开源吗?

Berth 服务器以 Apache-2.0 许可证开源,代码仓库公开在 GitHub 上。其 API 用 OpenAPI 描述,因此可以开发第三方客户端;官方移动应用是一个独立的闭源项目。

Berth 和 Audiobookshelf 有什么不同?

Berth 把书库保存在数据库中,而不是靠扫描文件夹重建,因此文件结构、多余的文件或迁移存储都不会破坏书籍或进度。它还能把音频存放在兼容 S3 的存储或 Google Drive 中,而不仅限于本地磁盘。Audiobookshelf 很成熟,支持播客,社区庞大;Berth 是新项目,专注于有声书。

Berth 支持哪些存储?

本地磁盘、任意兼容 S3 的存储(AWS S3、Cloudflare R2、Backblaze B2、MinIO、Yandex Object Storage、Wasabi、Hetzner 等)以及 Google Drive。Cloudflare R2 和 Google Drive 可通过引导向导连接。

可以把有声书存放在 Google Drive 中吗?

可以。Berth 以最小的 drive.file 权限连接 Google Drive,因此只能看到它自己创建的文件。来自 Drive 的音频通过你的 Berth 服务器串流和下载。

收听进度会在设备间同步吗?

会。应用每隔几秒在手机上保存每本书的位置,并同步到服务器;只有服务器上的位置更新时,才会替换本地位置。已下载的书可离线播放。

Berth 支持 Android Auto 和 CarPlay 吗?

支持,两者都包含在第一个版本中:可以浏览“继续收听”、书库和下载内容,并在车上控制播放。

家人如何连接?

管理员在网页后台出示二维码;手机扫描二维码或输入短代码(如 BRTH-7K2Q)即可连接。听众无需密码,管理员可以撤销任何设备。

Berth 支持哪些音频格式?

第一个版本支持内嵌章节的 m4b 有声书和 mp3 文件夹。章节和曲目顺序保存在数据库中,而不是从文件名推断。

可以从 Audiobookshelf 迁移吗?

第一个版本还不行。书籍可通过网页后台上传或导入 Google Drive 文件夹来添加;Audiobookshelf 导入工具考虑在首个版本之后推出。

状态

状态与路线图

服务器 1.0 已发布;应用正在收尾。上架日期尚未确定,关注仓库即可获取最新动态。

第一个版本(进行中)

  • 带网页后台和设置向导的服务器
  • 通过网页上传:带章节的 m4b、mp3 文件夹
  • 存储:本地、S3、Cloudflare R2 向导、Google Drive
  • Android 和 iOS 应用,用二维码连接
  • 后台播放、锁屏、蓝牙
  • Android Auto 和 CarPlay
  • 睡眠定时、每本书独立速度、暂停后回退
  • 进度同步和离线下载
  • 年龄分级和筛选
  • 数据库备份

第一个版本之后

  • 桌面应用
  • 平板布局
  • 播客
  • 从 Audiobookshelf 导入
  • 儿童档案和访问规则
  • 带笔记的书签和收听统计

安装

安装

Berth 可在 Linux 服务器、NAS 或 Raspberry Pi 上通过 Docker 运行。以下命令会在 8080 端口启动它;更新、备份和 HTTPS 的说明见 GitHub 上的 README。

bashamd64 · arm64
$ mkdir berth && cd berth
$ curl -fsSLO https://raw.githubusercontent.com/joveptesg/berth/main/docker-compose.yml
$ docker compose up -d
$ docker compose logs berth
# 然后打开服务器地址,输入日志中的设置码