媒体数据模型.md 16 KB

媒体数据模型

本文档引用的文件

  • schema.prisma
  • video-generator.types.ts
  • video-generator.service.ts
  • tts.service.ts
  • storage.service.ts
  • ffmpeg.processor.ts
  • cache.ts
  • book.rrbrr.com.conf
  • oss.service.ts

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构概览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考虑
  8. 故障排除指南
  9. 结论

简介

AI有声书生成平台的媒体数据模型设计围绕两个核心实体展开:AudioRecord音频记录模型和VideoProject视频项目模型。这些模型不仅存储媒体文件的基本元数据,还负责管理整个生成流程的状态转换。

音频记录模型AudioRecord专门用于追踪TTS(文本转语音)生成过程,包含音频文件的元数据、生成状态、音色参数等关键信息。视频项目模型VideoProject则负责管理视频生成项目的完整生命周期,从草稿状态到最终完成的全过程。

该系统采用统一的存储抽象层,支持本地存储和OSS(对象存储服务)两种模式,确保媒体文件的可靠存储和高效分发。同时,通过Redis缓存机制和CDN加速,实现了媒体资源的高性能访问。

项目结构

平台采用模块化的架构设计,主要分为以下几个核心模块:

graph TB
subgraph "数据层"
PRISMA[Prisma ORM]
SCHEMA[schema.prisma]
end
subgraph "业务逻辑层"
TTS[TTS服务模块]
VIDEO[视频生成模块]
AUDIO[AUDIO服务模块]
end
subgraph "基础设施层"
STORAGE[存储服务]
CACHE[缓存服务]
REDIS[Redis缓存]
OSS[对象存储服务]
end
subgraph "前端接口层"
API[API控制器]
CLIENT[客户端应用]
end
SCHEMA --> PRISMA
PRISMA --> TTS
PRISMA --> VIDEO
PRISMA --> AUDIO
TTS --> STORAGE
VIDEO --> STORAGE
AUDIO --> STORAGE
STORAGE --> REDIS
STORAGE --> OSS
API --> TTS
API --> VIDEO
API --> AUDIO
CLIENT --> API

图表来源

  • schema.prisma:354-375
  • video-generator.types.ts:1-308
  • tts.service.ts:1-715

章节来源

  • schema.prisma:1-472
  • video-generator.types.ts:1-308

核心组件

AudioRecord音频记录模型

AudioRecord模型是TTS生成流程的核心数据载体,负责追踪每个音频生成任务的完整生命周期。

核心字段说明:

  • audioId: 唯一标识符,使用UUID格式,确保全局唯一性
  • userId: 关联用户标识,支持匿名用户场景
  • title: 音频标题,默认"未命名音频"
  • text: 原始文本内容,支持长文本存储
  • wordCount: 字符统计,用于计费和分析
  • voiceId: 音色标识,默认"cherry"
  • voiceParams: 音色参数配置的JSON序列化存储
  • audioUrl: 最终音频文件URL
  • audioDuration: 音频时长(秒)
  • audioSize: 文件大小(字节)
  • status: 生成状态,默认"processing"
  • errorMsg: 错误信息存储

状态管理:

  • draft: 草稿状态
  • processing: 处理中
  • completed: 已完成
  • failed: 失败

章节来源

  • schema.prisma:354-375
  • tts.service.ts:236-255

VideoProject视频项目模型

VideoProject模型管理视频生成项目的完整生命周期,支持复杂的视频制作配置。

核心字段说明:

  • id: 主键标识
  • userId: 用户关联
  • title: 项目标题
  • description: 项目描述
  • coverUrl: 封面图片URL
  • configJson: 视频配置的JSON存储
  • outputUrl: 生成的视频URL
  • duration: 视频时长(秒)
  • fileSize: 文件大小(字节)
  • bookId: 关联的书籍ID
  • chapterId: 关联的章节ID
  • status: 项目状态
  • progress: 进度百分比
  • errorMsg: 错误信息

状态管理:

  • draft: 草稿
  • processing: 处理中
  • completed: 已完成
  • failed: 失败

章节来源

  • schema.prisma:196-220
  • video-generator.types.ts:97-115

架构概览

平台采用分层架构设计,确保各层职责清晰、耦合度低:

graph TB
subgraph "表现层"
WEB[Web界面]
MOBILE[移动端应用]
API[RESTful API]
end
subgraph "控制层"
TTS_CONTROLLER[TTS控制器]
VIDEO_CONTROLLER[视频控制器]
AUDIO_CONTROLLER[音频控制器]
end
subgraph "服务层"
TTS_SERVICE[TTS服务]
VIDEO_SERVICE[视频服务]
AUDIO_SERVICE[音频服务]
STORAGE_SERVICE[存储服务]
CACHE_SERVICE[缓存服务]
end
subgraph "数据持久层"
DATABASE[(MySQL数据库)]
REDIS_CACHE[(Redis缓存)]
OSS_STORAGE[(OSS存储)]
end
WEB --> API
MOBILE --> API
API --> TTS_CONTROLLER
API --> VIDEO_CONTROLLER
API --> AUDIO_CONTROLLER
TTS_CONTROLLER --> TTS_SERVICE
VIDEO_CONTROLLER --> VIDEO_SERVICE
AUDIO_CONTROLLER --> AUDIO_SERVICE
TTS_SERVICE --> STORAGE_SERVICE
VIDEO_SERVICE --> STORAGE_SERVICE
AUDIO_SERVICE --> STORAGE_SERVICE
STORAGE_SERVICE --> DATABASE
STORAGE_SERVICE --> REDIS_CACHE
STORAGE_SERVICE --> OSS_STORAGE
TTS_SERVICE --> CACHE_SERVICE
VIDEO_SERVICE --> CACHE_SERVICE
AUDIO_SERVICE --> CACHE_SERVICE

图表来源

  • tts.service.ts:200-280
  • video-generator.service.ts:152-312
  • storage.service.ts:1-278

详细组件分析

TTS音频生成流程

TTS音频生成是一个复杂的异步处理流程,涉及多个步骤和状态转换:

sequenceDiagram
participant Client as 客户端
participant TTS as TTS服务
participant Provider as TTS提供商
participant Merger as 音频合并器
participant Storage as 存储服务
participant DB as 数据库
Client->>TTS : generateAudio()
TTS->>DB : 创建AudioRecord记录
TTS->>Provider : 生成音频片段
Provider-->>TTS : 返回音频数据
TTS->>Merger : 合并音频片段
Merger-->>TTS : 返回合并后的音频
TTS->>Storage : 上传音频文件
Storage-->>TTS : 返回文件URL
TTS->>DB : 更新AudioRecord状态
DB-->>TTS : 确认更新
TTS-->>Client : 返回生成结果

图表来源

  • tts.service.ts:285-542
  • tts.service.ts:480-495

处理流程详解:

  1. 初始化阶段: 创建AudioRecord记录,设置初始状态为"processing"
  2. 文本分段: 根据TTS提供商能力进行智能文本分段
  3. 并行生成: 使用并发策略提高生成效率
  4. 云端处理: 支持云端TTS提供商的异步处理
  5. 本地合并: 将多个音频片段合并为完整音频
  6. 质量检测: 计算音频时长和文件大小
  7. 状态更新: 更新数据库记录和文件系统状态

章节来源

  • tts.service.ts:285-542

视频生成项目管理

视频生成项目采用状态驱动的管理模式,支持复杂的视频制作配置:

stateDiagram-v2
[*] --> 草稿
草稿 --> 处理中 : 开始生成
处理中 --> 已完成 : 生成成功
处理中 --> 失败 : 生成失败
已完成 --> [*]
失败 --> 草稿 : 重新生成
失败 --> [*] : 放弃项目

图表来源

  • video-generator.types.ts:8-9
  • video-generator.service.ts:152-312

配置管理:

视频项目支持丰富的配置选项:

  • 图片配置: 支持多张图片轮播,包含显示时长、转场效果、Ken Burns效果
  • 音频配置: 支持音频文件、起始时间、结束时间、音量控制
  • 背景音乐: 支持BGM配置,包括循环播放、淡入淡出效果
  • 字幕配置: 支持字幕文本、字体样式、颜色、位置等
  • 视频参数: 支持分辨率、帧率、码率、格式等

章节来源

  • video-generator.types.ts:20-93

存储系统架构

平台采用统一的存储抽象层,支持多种存储后端:

classDiagram
class StorageService {
-storageType : StorageType
+uploadAudio(localPath, audioId) string
+uploadVideo(localPath, videoId) string
+uploadCover(localPath, bookId) string
+downloadFile(url) Buffer
+deleteFile(url) void
+getSignedUrl(url, expires) string
}
class OSSService {
-client : OSS
-bucket : string
-cdnDomain : string
+uploadFile(localPath, objectKey) string
+downloadFile(objectKey) Buffer
+getSignedUrl(objectKey, expires) string
}
class LocalStorage {
+uploadFile(localPath, category, id) string
+downloadFile(url) Buffer
+deleteFile(url) void
}
StorageService --> OSSService : 使用
StorageService --> LocalStorage : 使用

图表来源

  • storage.service.ts:13-278
  • oss.service.ts:13-204

存储策略:

  1. 统一接口: 提供一致的存储接口,屏蔽底层差异
  2. 动态切换: 支持运行时切换存储后端
  3. 类型识别: 自动识别OSS和本地存储URL
  4. 签名访问: 支持OSS签名URL生成
  5. 批量操作: 支持文件和目录的批量管理

章节来源

  • storage.service.ts:1-278

缓存与分发策略

平台采用多层次的缓存和分发策略,确保媒体资源的高效访问:

flowchart TD
Request[请求到达] --> CacheCheck{Redis缓存检查}
CacheCheck --> |命中| ReturnCache[返回缓存数据]
CacheCheck --> |未命中| ProcessRequest[处理请求]
ProcessRequest --> GenerateContent[生成内容]
GenerateContent --> StoreCache[存储到Redis]
StoreCache --> ReturnContent[返回内容]
subgraph "静态资源分发"
Static[静态资源] --> Nginx[Nginx服务器]
Nginx --> CDN[CDN缓存]
CDN --> Client[客户端]
end
subgraph "动态内容缓存"
Dynamic[动态内容] --> RedisCache[Redis缓存]
RedisCache --> Client
end

图表来源

  • cache.ts:1-97
  • book.rrbrr.com.conf:17-33

缓存配置:

  • 用户信息缓存: TTL 300秒,按用户ID缓存
  • 音色列表缓存: TTL 3600秒,全局音色列表
  • 书籍详情缓存: TTL 600秒,按书籍ID缓存
  • 热门书籍缓存: TTL 300秒,热门内容缓存
  • 会员权益缓存: TTL 3600秒,会员相关数据

静态资源优化:

  • 缓存头设置: 设置合理的Cache-Control头
  • 压缩传输: 支持Gzip压缩
  • CDN加速: 通过CDN分发静态资源
  • 过期时间: 设置长期有效的过期时间

章节来源

  • cache.ts:1-97
  • book.rrbrr.com.conf:17-33

依赖关系分析

平台的依赖关系呈现清晰的层次化结构:

graph TB
subgraph "外部依赖"
MYSQL[MySQL数据库]
REDIS[Redis缓存]
OSS[阿里云OSS]
NGINX[Nginx服务器]
end
subgraph "内部模块"
PRISMA[Prisma ORM]
TTS[TTS服务]
VIDEO[视频服务]
AUDIO[AUDIO服务]
STORAGE[存储服务]
CACHE[缓存服务]
end
subgraph "核心服务"
WS[WebSocket服务]
QUEUE[队列服务]
LOG[日志服务]
end
MYSQL --> PRISMA
REDIS --> CACHE
OSS --> STORAGE
NGINX --> STATIC[静态资源]
PRISMA --> TTS
PRISMA --> VIDEO
PRISMA --> AUDIO
TTS --> STORAGE
VIDEO --> STORAGE
AUDIO --> STORAGE
CACHE --> REDIS
STORAGE --> OSS
STORAGE --> MYSQL
TTS --> WS
VIDEO --> WS
AUDIO --> WS
TTS --> QUEUE
VIDEO --> QUEUE
AUDIO --> QUEUE

图表来源

  • schema.prisma:1-472
  • tts.service.ts:1-715
  • video-generator.service.ts:1-341

依赖特点:

  1. 低耦合高内聚: 各模块职责明确,接口清晰
  2. 可替换性: 存储和缓存服务支持插件化替换
  3. 扩展性: 新增功能模块不影响现有架构
  4. 监控性: 集成日志和监控服务

章节来源

  • schema.prisma:1-472

性能考虑

平台在设计时充分考虑了性能优化:

存储性能优化

  1. 异步上传: 采用异步方式上传媒体文件,避免阻塞主线程
  2. 批量操作: 支持批量文件操作,减少网络往返
  3. 压缩传输: 自动压缩音频和视频文件,减少带宽消耗
  4. 分块上传: 大文件采用分块上传策略

缓存策略

  1. 多级缓存: Redis缓存 + CDN缓存 + 浏览器缓存
  2. 智能过期: 不同类型数据设置不同的过期时间
  3. 预热机制: 热门内容提前加载到缓存
  4. 失效策略: 支持缓存失效和更新

并发处理

  1. 并发生成: 支持多个音频和视频的并行生成
  2. 资源池: 管理TTS提供商的连接池
  3. 限流控制: 防止过度并发导致的资源耗尽
  4. 优雅降级: 在资源紧张时自动降级处理

故障排除指南

常见问题及解决方案

音频生成失败

  1. 检查TTS提供商配置

    • 验证API密钥有效性
    • 检查配额限制
    • 确认网络连接
  2. 查看错误日志

    • 检查TTS服务日志
    • 查看数据库状态更新
    • 分析存储服务错误
  3. 重试机制

    • 支持自动重试
    • 额度限制时切换提供商
    • 失败后清理临时文件

视频生成异常

  1. 配置验证

    • 检查视频配置JSON格式
    • 验证素材URL有效性
    • 确认FFmpeg安装和配置
  2. 资源检查

    • 确认磁盘空间充足
    • 检查内存使用情况
    • 验证网络带宽
  3. 进度监控

    • 实时监控生成进度
    • 检测僵尸任务
    • 自动清理失败任务

存储问题

  1. OSS连接问题

    • 验证OSS配置参数
    • 检查网络连通性
    • 确认权限设置
  2. 本地存储问题

    • 检查磁盘空间
    • 验证目录权限
    • 确认文件系统完整性

缓存问题

  1. Redis连接

    • 检查Redis服务状态
    • 验证连接参数
    • 监控内存使用
  2. 缓存一致性

    • 实施缓存失效策略
    • 处理缓存穿透
    • 避免缓存雪崩

章节来源

  • tts.service.ts:544-597
  • video-generator.service.ts:291-312
  • storage.service.ts:120-153

结论

AI有声书生成平台的媒体数据模型设计体现了现代Web应用的最佳实践。通过精心设计的AudioRecord和VideoProject模型,平台实现了对音频和视频生成流程的完整追踪和管理。

系统的核心优势包括:

  1. 完整的生命周期管理: 从草稿到完成的全流程状态追踪
  2. 灵活的存储架构: 支持多种存储后端的统一抽象
  3. 高效的缓存策略: 多层次缓存确保高性能访问
  4. 可靠的错误处理: 完善的错误检测和恢复机制
  5. 可扩展的架构: 模块化设计支持功能扩展

通过这些设计,平台能够稳定地处理大规模的媒体生成任务,为用户提供优质的AI有声书体验。未来可以在以下方面继续优化:

  • 进一步完善状态管理机制
  • 增强实时监控和告警功能
  • 优化资源利用率和成本控制
  • 扩展更多TTS和视频生成算法
  • 加强安全性和权限控制