本文引用的文件
本系统是一个“AI有声书生成平台”,采用前后端分离架构:前端基于 uniapp + Vue 3 + TypeScript,后端基于 Koa.js,数据库采用 Prisma + MySQL,音频处理通过 FFmpeg 与对象存储结合。系统支持 TTS 文本转音频、会员体系、书籍批量生成(内容-音频-视频)、视频生成与合并、播放器与播放列表、搜索与偏好设置等能力。
文档与说明
README.md 展示技术栈、API 与快速开始
graph TB
subgraph "前端(uniapp)"
FE_App["应用入口<br/>src/main.ts"]
FE_Utils["网络请求<br/>src/utils/request.ts"]
FE_Router["页面与组件<br/>src/pages/*, src/components/*"]
end
subgraph "后端(Koa.js)"
BE_App["应用入口<br/>server/src/app.ts"]
BE_Modules["业务模块路由<br/>modules/*/*.controller.ts"]
BE_Services["服务与工具<br/>services/*"]
BE_DB["数据模型<br/>prisma/schema.prisma"]
BE_Config["配置<br/>src/config/index.ts"]
end
subgraph "基础设施"
Nginx["Nginx 反向代理<br/>docker-nginx/bookapi.conf"]
Docker["Docker Compose<br/>docker-compose.yml"]
Storage["对象存储/本地存储"]
FFmpeg["FFmpeg 处理器<br/>services/ffmpeg.processor.ts"]
end
FE_App --> FE_Utils
FE_Router --> FE_Utils
FE_Utils --> Nginx
Nginx --> BE_App
BE_App --> BE_Modules
BE_Modules --> BE_Services
BE_Services --> BE_DB
BE_Services --> Storage
BE_Services --> FFmpeg
Docker --> Nginx
图表来源
章节来源
章节来源
系统采用“前端 uniapp + 后端 Koa + 数据库 MySQL + 第三方服务/工具”的分层架构。前端通过 HTTP/HTTPS 与后端交互;后端通过 Prisma 访问 MySQL;音频处理通过 FFmpeg 与对象存储协同;Nginx 作为反向代理统一入口。
graph TB
Client["客户端(H5/小程序)"]
FE["前端 uniapp 应用"]
API["Koa 后端服务"]
DB["MySQL 数据库"]
OSS["对象存储(本地/阿里云OSS)"]
FFMPEG["FFmpeg 处理器"]
Nginx["Nginx 反向代理"]
Client --> FE
FE --> Nginx
Nginx --> API
API --> DB
API --> OSS
API --> FFMPEG
FFMPEG --> OSS
图表来源
页面与组件
页面路由、播放器、骨架屏、下载组件等
sequenceDiagram
participant U as "用户"
participant P as "前端页面"
participant R as "请求封装"
participant N as "Nginx 反代"
participant S as "Koa 后端"
U->>P : 触发操作
P->>R : request(url, options)
R->>R : 注入 Authorization/缓存/重试
R->>N : HTTP 请求
N->>S : 反向代理转发
S-->>R : 返回 {code,data}
R-->>P : 成功/失败处理与提示
P-->>U : 更新界面
图表来源
章节来源
配置与模型
Prisma 模型覆盖用户、书籍、章节、音频、视频、订单、订阅等
classDiagram
class KoaApp {
+中间件链
+路由注册
+静态文件
}
class AuthController {
+发送验证码
+手机号登录
+获取/更新用户信息
}
class TTSController {
+获取音色/服务商
+异步生成音频
+预览音色
+下载信息/批量下载
}
class MemberController {
+权益信息
+会员状态
+创建订单
+模拟支付
+订单列表
}
class BookGenController {
+批量生成书籍
+取消任务
+查询状态
}
class VideoGenController {
+项目管理
+生成视频
+素材管理
+从书籍生成项目
}
KoaApp --> AuthController : "注册路由"
KoaApp --> TTSController : "注册路由"
KoaApp --> MemberController : "注册路由"
KoaApp --> BookGenController : "注册路由"
KoaApp --> VideoGenController : "注册路由"
图表来源
章节来源
流程示意
flowchart TD
Start(["进入处理"]) --> CheckURL["校验输入URL/本地路径"]
CheckURL --> Download["下载到本地临时目录"]
Download --> DecideOp{"操作类型?"}
DecideOp --> |合并音频| Merge["构建文件列表并执行合并"]
DecideOp --> |音视频合并| MergeAV["合并音视频(可选BGM混音)"]
DecideOp --> |获取时长| Probe["ffprobe 获取时长"]
DecideOp --> |格式转换| Convert["按目标格式转换"]
DecideOp --> |裁剪| Trim["按时间段裁剪"]
DecideOp --> |音量调整| Volume["按倍数调整音量"]
Merge & MergeAV & Probe & Convert & Trim & Volume --> Upload["上传至对象存储"]
Upload --> Cleanup["清理临时文件"]
Cleanup --> End(["结束"])
图表来源
章节来源
章节来源
建议在生产环境增加 HTTPS、负载均衡与多实例部署
graph TB
subgraph "容器编排"
D["docker-compose.yml"]
N["Nginx 容器"]
S["后端服务容器"]
end
D --> N
D --> S
N --> S
图表来源
章节来源
数据模型
用户、书籍、章节、音频、视频、订单、订阅、播放记录、收藏、评论、通知、搜索历史、签到、播放列表、草稿、发布任务、素材、反馈等
graph LR
FE["前端 uniapp"] --> API["Koa 后端"]
API --> PRISMA["Prisma"]
PRISMA --> MYSQL["MySQL"]
API --> REDIS["Redis"]
API --> OSS["对象存储"]
API --> FFMPEG["FFmpeg"]
API --> LLM["LangChain/LangGraph"]
图表来源
章节来源
章节来源
该系统以 uniapp 实现跨端一致性体验,以 Koa.js 提供轻量且模块化的后端服务,以 Prisma + MySQL 保障数据结构清晰与扩展性,以 FFmpeg 与对象存储支撑音频/视频处理与分发。通过 Nginx 反向代理与容器化部署,具备良好的可运维性与扩展性。后续可在生产环境引入负载均衡、CDN、更完善的限流与监控体系,并持续优化音频/视频处理的并发与成本。
章节来源