Files
wwjcloud-nest-v1/.trae/documents/aiqiyi_video_app_technical_architecture.md
2025-11-16 22:13:57 +08:00

13 KiB
Raw Permalink Blame History

1. 架构设计

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

响应示例:

{
  "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. 服务器架构设计

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 用户相关数据模型

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 内容相关数据模型

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)

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)

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)

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

  • 预加载策略:智能预加载、按需加载、优先级加载

  • 多码率适配:根据网络自动选择清晰度

  • 断点续传:支持大文件断点续传,提升用户体验