Files
wwjcloud-nest-v1/.trae/documents/aiqiyi_video_app_technical_architecture.md

550 lines
13 KiB
Markdown
Raw Normal View History

2025-11-16 22:13:57 +08:00
## 1. 架构设计
```mermaid
graph TD
A[用户设备] --> B[uniapp-x跨平台应用]
B --> C[微信小程序]
B --> D[iOS App]
B --> E[Android App]
B --> F[H5 Web]
C --> G[微信API]
D --> H[iOS原生API]
E --> I[Android原生API]
F --> J[浏览器API]
G --> K[业务服务层]
H --> K
I --> K
J --> K
K --> L[内容分发网络CDN]
K --> M[后端API服务]
K --> N[实时通信服务]
M --> O[(数据库)]
M --> P[(Redis缓存)]
M --> Q[(对象存储)]
subgraph "前端层"
B
C
D
E
F
end
subgraph "平台适配层"
G
H
I
J
end
subgraph "服务层"
K
L
M
N
O
P
Q
end
```
## 2. 技术描述
### 前端技术栈
* **跨平台框架**: uniapp-x (Vue3 + TypeScript)
* **状态管理**: Pinia (替代Vuex)
* **UI组件库**: uView-plus (uniapp生态组件库)
* **构建工具**: Vite (开发环境) + Webpack (生产环境)
* **样式方案**: SCSS + CSS变量 + Flex布局
* **图标方案**: iconfont + 本地SVG图标
* **动画库**: CSS3动画 + uni.createAnimation API
### 后端技术栈
* **API服务**: Node.js + Express/Koa2
* **数据库**: MySQL 8.0 (主数据库)
* **缓存**: Redis 6.0 (会话缓存 + 热点数据)
* **文件存储**: 阿里云OSS / 腾讯云COS
* **CDN加速**: 阿里云CDN / 腾讯云CDN
* **实时通信**: WebSocket + Socket.io
* **消息队列**: Redis Pub/Sub (轻量级)
### 第三方服务
* **视频服务**: 腾讯云点播 / 阿里云视频点播
* **音频服务**: 腾讯云音视频 / 网易云信
* **推送服务**: 个推 / 极光推送
* **登录认证**: 微信登录 + 手机号验证码
* **支付服务**: 微信支付 + 支付宝支付
## 3. 路由定义
### 底部导航路由
| 路由路径 | 页面名称 | 功能描述 |
| ------------------------------ | ---- | ------------- |
| /pages/index/index | 首页 | 推荐内容聚合,个性化内容流 |
| /pages/short-video/short-video | 短视频 | 沉浸式竖屏短视频播放 |
| /pages/long-video/long-video | 长视频 | 影视综等长视频内容分类 |
| /pages/music/music | 音乐 | 在线音乐播放和歌单管理 |
| /pages/novel/novel | 小说 | 电子书阅读和书架管理 |
| /pages/profile/profile | 我的 | 个人中心和相关设置 |
### 功能页面路由
| 路由路径 | 页面名称 | 功能描述 |
| -------------------------- | ---- | ----------- |
| /pages/search/search | 搜索页 | 全局内容搜索和智能联想 |
| /pages/player/player | 播放器 | 视频/音乐播放控制页面 |
| /pages/detail/detail | 详情页 | 内容详细信息展示 |
| /pages/category/category | 分类页 | 内容分类筛选和浏览 |
| /pages/reader/reader | 阅读器 | 小说阅读界面 |
| /pages/bookshelf/bookshelf | 书架 | 用户收藏的小说管理 |
| /pages/history/history | 历史记录 | 观看/收听/阅读历史 |
| /pages/settings/settings | 设置页 | 应用设置和偏好配置 |
| /pages/login/login | 登录页 | 用户登录和注册 |
| /pages/vip/vip | 会员页 | VIP会员开通和管理 |
### 子页面路由
| 路由路径 | 页面名称 | 功能描述 |
| --------------------------- | ---- | -------- |
| /pages/profile/edit-profile | 编辑资料 | 用户个人信息编辑 |
| /pages/profile/favorites | 我的收藏 | 收藏内容管理 |
| /pages/profile/download | 离线下载 | 离线内容管理 |
| /pages/music/playlist | 歌单详情 | 音乐歌单详细页面 |
| /pages/long-video/series | 剧集列表 | 电视剧分集选择 |
| /pages/short-video/upload | 上传视频 | 短视频上传发布 |
## 4. API定义
### 4.1 用户认证相关API
#### 用户登录
```
POST /api/auth/login
```
请求参数:
| 参数名 | 类型 | 必填 | 描述 |
| -------- | ------ | -- | -------------------------- |
| mobile | string | 是 | 手机号 |
| code | string | 是 | 短信验证码 |
| platform | string | 是 | 平台类型wechat/ios/android/h5 |
响应示例:
```json
{
"code": 200,
"message": "登录成功",
"data": {
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"userInfo": {
"userId": "123456",
"nickname": "用户昵称",
"avatar": "https://example.com/avatar.jpg",
"vipLevel": 1,
"expireTime": "2024-12-31 23:59:59"
}
}
}
```
#### 获取验证码
```
POST /api/auth/sendCode
```
请求参数:
| 参数名 | 类型 | 必填 | 描述 |
| ------ | ------ | -- | -------------------- |
| mobile | string | 是 | 手机号 |
| type | string | 是 | 验证码类型login/register |
### 4.2 内容相关API
#### 获取首页推荐内容
```
GET /api/content/recommend
```
请求参数:
| 参数名 | 类型 | 必填 | 描述 |
| ----------- | ------ | -- | -------------------------- |
| page | number | 否 | 页码默认1 |
| pageSize | number | 否 | 每页数量默认20 |
| contentType | string | 否 | 内容类型all/video/music/novel |
#### 获取短视频列表
```
GET /api/short-video/list
```
请求参数:
| 参数名 | 类型 | 必填 | 描述 |
| -------- | ------ | -- | --------- |
| lastId | string | 否 | 最后一条视频ID |
| count | number | 否 | 获取数量默认10 |
| category | string | 否 | 视频分类 |
#### 获取长视频分类
```
GET /api/long-video/category
```
#### 获取音乐歌单
```
GET /api/music/playlist
```
#### 获取小说分类
```
GET /api/novel/category
```
### 4.3 播放相关API
#### 获取视频播放地址
```
GET /api/player/video/url
```
请求参数:
| 参数名 | 类型 | 必填 | 描述 |
| ------- | ------ | -- | ----------------- |
| videoId | string | 是 | 视频ID |
| quality | string | 否 | 清晰度auto/hd/sd/ld |
#### 获取音乐播放地址
```
GET /api/player/music/url
```
#### 记录播放进度
```
POST /api/player/progress
```
### 4.4 用户行为API
#### 点赞/取消点赞
```
POST /api/interact/like
```
#### 收藏/取消收藏
```
POST /api/interact/favorite
```
#### 发表评论
```
POST /api/interact/comment
```
#### 关注/取消关注
```
POST /api/interact/follow
```
### 4.5 搜索相关API
#### 搜索建议
```
GET /api/search/suggest
```
#### 搜索结果
```
GET /api/search/result
```
## 5. 服务器架构设计
```mermaid
graph TD
A[客户端请求] --> B[API网关层]
B --> C[负载均衡器]
C --> D[应用服务集群]
D --> E[用户服务]
D --> F[内容服务]
D --> G[播放服务]
D --> H[推荐服务]
E --> I[(用户数据库)]
F --> J[(内容数据库)]
G --> K[(播放记录)]
H --> L[(Redis缓存)]
D --> M[消息队列]
M --> N[日志服务]
M --> O[统计服务]
subgraph "网关层"
B
C
end
subgraph "应用层"
D
E
F
G
H
end
subgraph "数据层"
I
J
K
L
end
subgraph "服务层"
M
N
O
end
```
## 6. 数据模型
### 6.1 用户相关数据模型
```mermaid
erDiagram
USER ||--o{ USER_PROFILE : has
USER ||--o{ USER_VIP : has
USER ||--o{ USER_FAVORITE : has
USER ||--o{ USER_HISTORY : has
USER ||--o{ USER_FOLLOW : follows
USER {
string userId PK
string mobile UK
string password
string nickname
string avatar
integer status
datetime createTime
datetime updateTime
}
USER_PROFILE {
string userId PK
string gender
date birthday
string city
string signature
integer level
integer experience
}
USER_VIP {
string userId PK
integer vipLevel
datetime startTime
datetime expireTime
boolean autoRenew
}
USER_FAVORITE {
string id PK
string userId FK
string contentId FK
string contentType
datetime createTime
}
USER_HISTORY {
string id PK
string userId FK
string contentId FK
string contentType
integer progress
datetime lastPlayTime
}
```
### 6.2 内容相关数据模型
```mermaid
erDiagram
CONTENT ||--o{ CONTENT_DETAIL : has
CONTENT ||--o{ CONTENT_TAG : has
CONTENT ||--o{ CONTENT_STAT : has
CONTENT ||--o{ COMMENT : has
CONTENT {
string contentId PK
string title
string cover
string contentType
string category
integer duration
string tags
integer status
datetime publishTime
}
CONTENT_DETAIL {
string contentId PK
string description
string director
string actors
string area
integer year
float rating
integer episodeCount
}
CONTENT_TAG {
string id PK
string contentId FK
string tagName
integer weight
}
CONTENT_STAT {
string contentId PK
integer viewCount
integer likeCount
integer favoriteCount
integer commentCount
integer shareCount
}
```
### 6.3 数据库表结构示例
#### 用户表 (users)
```sql
CREATE TABLE users (
user_id VARCHAR(32) PRIMARY KEY COMMENT '用户ID',
mobile VARCHAR(11) UNIQUE NOT NULL COMMENT '手机号',
password VARCHAR(64) NOT NULL COMMENT '密码',
nickname VARCHAR(50) NOT NULL COMMENT '昵称',
avatar VARCHAR(255) COMMENT '头像URL',
status TINYINT DEFAULT 1 COMMENT '状态1正常 0禁用',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
INDEX idx_mobile (mobile),
INDEX idx_status (status)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';
```
#### 内容表 (contents)
```sql
CREATE TABLE contents (
content_id VARCHAR(32) PRIMARY KEY COMMENT '内容ID',
title VARCHAR(100) NOT NULL COMMENT '标题',
cover VARCHAR(255) COMMENT '封面URL',
content_type VARCHAR(20) NOT NULL COMMENT '内容类型video/music/novel',
category VARCHAR(50) COMMENT '分类',
duration INT COMMENT '时长(秒)',
tags TEXT COMMENT '标签,逗号分隔',
status TINYINT DEFAULT 1 COMMENT '状态1正常 0下架',
publish_time DATETIME COMMENT '发布时间',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
INDEX idx_type_category (content_type, category),
INDEX idx_status_time (status, publish_time DESC),
INDEX idx_tags (tags(100))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='内容表';
```
#### 用户历史记录表 (user\_history)
```sql
CREATE TABLE user_history (
id VARCHAR(32) PRIMARY KEY COMMENT '记录ID',
user_id VARCHAR(32) NOT NULL COMMENT '用户ID',
content_id VARCHAR(32) NOT NULL COMMENT '内容ID',
content_type VARCHAR(20) NOT NULL COMMENT '内容类型',
progress INT DEFAULT 0 COMMENT '播放进度(秒)',
last_play_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '最后播放时间',
create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
UNIQUE KEY uk_user_content (user_id, content_id),
INDEX idx_user_time (user_id, last_play_time DESC),
INDEX idx_content_type (content_type)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户播放历史表';
```
## 7. 性能优化方案
### 7.1 前端优化
* **资源压缩**:图片压缩、代码混淆、分包加载
* **懒加载**:图片懒加载、组件懒加载、路由懒加载
* **缓存策略**:接口缓存、图片缓存、离线包机制
* **渲染优化**:虚拟列表、防抖节流、异步渲染
### 7.2 后端优化
* **数据库优化**:索引优化、查询优化、分库分表
* **缓存策略**Redis缓存、CDN缓存、浏览器缓存
* **接口优化**:接口合并、数据压缩、分页加载
* **并发处理**:连接池、异步处理、队列机制
### 7.3 内容分发优化
* **CDN加速**静态资源CDN、视频CDN、音频CDN
* **预加载策略**:智能预加载、按需加载、优先级加载
* **多码率适配**:根据网络自动选择清晰度
* **断点续传**:支持大文件断点续传,提升用户体验