# 媒体数据模型 **本文档引用的文件** - [schema.prisma](file://server/prisma/schema.prisma) - [video-generator.types.ts](file://server/src/modules/video-generator/video-generator.types.ts) - [video-generator.service.ts](file://server/src/modules/video-generator/video-generator.service.ts) - [tts.service.ts](file://server/src/modules/tts/tts.service.ts) - [storage.service.ts](file://server/src/services/storage.service.ts) - [ffmpeg.processor.ts](file://server/src/services/ffmpeg.processor.ts) - [cache.ts](file://server/src/middleware/cache.ts) - [book.rrbrr.com.conf](file://book.rrbrr.com.conf) - [oss.service.ts](file://server/src/services/oss.service.ts) ## 目录 1. [简介](#简介) 2. [项目结构](#项目结构) 3. [核心组件](#核心组件) 4. [架构概览](#架构概览) 5. [详细组件分析](#详细组件分析) 6. [依赖关系分析](#依赖关系分析) 7. [性能考虑](#性能考虑) 8. [故障排除指南](#故障排除指南) 9. [结论](#结论) ## 简介 AI有声书生成平台的媒体数据模型设计围绕两个核心实体展开:AudioRecord音频记录模型和VideoProject视频项目模型。这些模型不仅存储媒体文件的基本元数据,还负责管理整个生成流程的状态转换。 音频记录模型AudioRecord专门用于追踪TTS(文本转语音)生成过程,包含音频文件的元数据、生成状态、音色参数等关键信息。视频项目模型VideoProject则负责管理视频生成项目的完整生命周期,从草稿状态到最终完成的全过程。 该系统采用统一的存储抽象层,支持本地存储和OSS(对象存储服务)两种模式,确保媒体文件的可靠存储和高效分发。同时,通过Redis缓存机制和CDN加速,实现了媒体资源的高性能访问。 ## 项目结构 平台采用模块化的架构设计,主要分为以下几个核心模块: ```mermaid 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](file://server/prisma/schema.prisma#L354-L375) - [video-generator.types.ts:1-308](file://server/src/modules/video-generator/video-generator.types.ts#L1-L308) - [tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715) **章节来源** - [schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) - [video-generator.types.ts:1-308](file://server/src/modules/video-generator/video-generator.types.ts#L1-L308) ## 核心组件 ### 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](file://server/prisma/schema.prisma#L354-L375) - [tts.service.ts:236-255](file://server/src/modules/tts/tts.service.ts#L236-L255) ### 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](file://server/prisma/schema.prisma#L196-L220) - [video-generator.types.ts:97-115](file://server/src/modules/video-generator/video-generator.types.ts#L97-L115) ## 架构概览 平台采用分层架构设计,确保各层职责清晰、耦合度低: ```mermaid 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](file://server/src/modules/tts/tts.service.ts#L200-L280) - [video-generator.service.ts:152-312](file://server/src/modules/video-generator/video-generator.service.ts#L152-L312) - [storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278) ## 详细组件分析 ### TTS音频生成流程 TTS音频生成是一个复杂的异步处理流程,涉及多个步骤和状态转换: ```mermaid 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](file://server/src/modules/tts/tts.service.ts#L285-L542) - [tts.service.ts:480-495](file://server/src/modules/tts/tts.service.ts#L480-L495) **处理流程详解:** 1. **初始化阶段**: 创建AudioRecord记录,设置初始状态为"processing" 2. **文本分段**: 根据TTS提供商能力进行智能文本分段 3. **并行生成**: 使用并发策略提高生成效率 4. **云端处理**: 支持云端TTS提供商的异步处理 5. **本地合并**: 将多个音频片段合并为完整音频 6. **质量检测**: 计算音频时长和文件大小 7. **状态更新**: 更新数据库记录和文件系统状态 **章节来源** - [tts.service.ts:285-542](file://server/src/modules/tts/tts.service.ts#L285-L542) ### 视频生成项目管理 视频生成项目采用状态驱动的管理模式,支持复杂的视频制作配置: ```mermaid stateDiagram-v2 [*] --> 草稿 草稿 --> 处理中 : 开始生成 处理中 --> 已完成 : 生成成功 处理中 --> 失败 : 生成失败 已完成 --> [*] 失败 --> 草稿 : 重新生成 失败 --> [*] : 放弃项目 ``` **图表来源** - [video-generator.types.ts:8-9](file://server/src/modules/video-generator/video-generator.types.ts#L8-L9) - [video-generator.service.ts:152-312](file://server/src/modules/video-generator/video-generator.service.ts#L152-L312) **配置管理:** 视频项目支持丰富的配置选项: - **图片配置**: 支持多张图片轮播,包含显示时长、转场效果、Ken Burns效果 - **音频配置**: 支持音频文件、起始时间、结束时间、音量控制 - **背景音乐**: 支持BGM配置,包括循环播放、淡入淡出效果 - **字幕配置**: 支持字幕文本、字体样式、颜色、位置等 - **视频参数**: 支持分辨率、帧率、码率、格式等 **章节来源** - [video-generator.types.ts:20-93](file://server/src/modules/video-generator/video-generator.types.ts#L20-L93) ### 存储系统架构 平台采用统一的存储抽象层,支持多种存储后端: ```mermaid 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](file://server/src/services/storage.service.ts#L13-L278) - [oss.service.ts:13-204](file://server/src/services/oss.service.ts#L13-L204) **存储策略:** 1. **统一接口**: 提供一致的存储接口,屏蔽底层差异 2. **动态切换**: 支持运行时切换存储后端 3. **类型识别**: 自动识别OSS和本地存储URL 4. **签名访问**: 支持OSS签名URL生成 5. **批量操作**: 支持文件和目录的批量管理 **章节来源** - [storage.service.ts:1-278](file://server/src/services/storage.service.ts#L1-L278) ### 缓存与分发策略 平台采用多层次的缓存和分发策略,确保媒体资源的高效访问: ```mermaid 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](file://server/src/middleware/cache.ts#L1-L97) - [book.rrbrr.com.conf:17-33](file://book.rrbrr.com.conf#L17-L33) **缓存配置:** - **用户信息缓存**: TTL 300秒,按用户ID缓存 - **音色列表缓存**: TTL 3600秒,全局音色列表 - **书籍详情缓存**: TTL 600秒,按书籍ID缓存 - **热门书籍缓存**: TTL 300秒,热门内容缓存 - **会员权益缓存**: TTL 3600秒,会员相关数据 **静态资源优化:** - **缓存头设置**: 设置合理的Cache-Control头 - **压缩传输**: 支持Gzip压缩 - **CDN加速**: 通过CDN分发静态资源 - **过期时间**: 设置长期有效的过期时间 **章节来源** - [cache.ts:1-97](file://server/src/middleware/cache.ts#L1-L97) - [book.rrbrr.com.conf:17-33](file://book.rrbrr.com.conf#L17-L33) ## 依赖关系分析 平台的依赖关系呈现清晰的层次化结构: ```mermaid 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](file://server/prisma/schema.prisma#L1-L472) - [tts.service.ts:1-715](file://server/src/modules/tts/tts.service.ts#L1-L715) - [video-generator.service.ts:1-341](file://server/src/modules/video-generator/video-generator.service.ts#L1-L341) **依赖特点:** 1. **低耦合高内聚**: 各模块职责明确,接口清晰 2. **可替换性**: 存储和缓存服务支持插件化替换 3. **扩展性**: 新增功能模块不影响现有架构 4. **监控性**: 集成日志和监控服务 **章节来源** - [schema.prisma:1-472](file://server/prisma/schema.prisma#L1-L472) ## 性能考虑 平台在设计时充分考虑了性能优化: ### 存储性能优化 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](file://server/src/modules/tts/tts.service.ts#L544-L597) - [video-generator.service.ts:291-312](file://server/src/modules/video-generator/video-generator.service.ts#L291-L312) - [storage.service.ts:120-153](file://server/src/services/storage.service.ts#L120-L153) ## 结论 AI有声书生成平台的媒体数据模型设计体现了现代Web应用的最佳实践。通过精心设计的AudioRecord和VideoProject模型,平台实现了对音频和视频生成流程的完整追踪和管理。 系统的核心优势包括: 1. **完整的生命周期管理**: 从草稿到完成的全流程状态追踪 2. **灵活的存储架构**: 支持多种存储后端的统一抽象 3. **高效的缓存策略**: 多层次缓存确保高性能访问 4. **可靠的错误处理**: 完善的错误检测和恢复机制 5. **可扩展的架构**: 模块化设计支持功能扩展 通过这些设计,平台能够稳定地处理大规模的媒体生成任务,为用户提供优质的AI有声书体验。未来可以在以下方面继续优化: - 进一步完善状态管理机制 - 增强实时监控和告警功能 - 优化资源利用率和成本控制 - 扩展更多TTS和视频生成算法 - 加强安全性和权限控制