基于微服务的视频点播平台

项目地址:田广伟/基于微服务播放器

项目概述https://gitee.com/tgwTTT/based-on-microservice-player

这是一个采用微服务架构设计的在线视频播放平台,采用 C++17 开发,使用 gRPC 作为服务间通信协议。项目实现了完整的用户管理、视频上传转码、弹幕互动、搜索推荐等功能。

项目总体框架如上图

## 核心服务组件

### 1. 用户服务 (svc_user)

**会话管理**: 临时登录、会话登录

**认证方式**: 邮箱验证码登录、密码登录

**用户信息**: 头像设置、昵称修改、密码管理

**关注功能**: 关注/取消关注用户

**权限管理**: 管理员的增删改查,支持超级管理员和普通管理员

### 2. 视频服务 (svc_video)

**视频管理**: 新增、删除、审核、上架/下架

**互动功能**: 点赞、播放、弹幕

**列表查询**:

  – 用户视频列表

  – 主页视频列表(按上传时间)

  – 分类/标签视频列表

  – 搜索视频列表

**审核流程**: 审核中 → 审核通过上架 / 审核驳回

### 3. 文件服务 (svc_file)

**图片上传/下载**: 用户头像、视频封面

**视频上传/下载**: 原始视频文件

**存储后端**: FastDFS 分布式文件系统

### 4. 转码服务 (svc_transcode)

**HLS 转码**: 将视频转换为 HLS 格式用于流媒体播放

**消息驱动**: 通过 RabbitMQ 接收转码任务

**异步处理**: 转码完成后自动更新视频状态

### 5. 网关服务 (svc_gateway)

**协议转换**: HTTP/gRPC 请求路由

**服务发现**: 从 etcd 获取各服务地址

**负载均衡**: 客户端请求分发

技术栈:C++、Protobuf、gRPC、MySQL、Redis、Elasticsearch、RabbitMQ、CMake、Docker、FFmpeg

子服务实现

Gateway Service (svc_gateway)

职责

  • 接收客户端HTTP/gRPC请求
  • Session鉴权
  • 请求路由到后端服务
  • 聚合后端响应

目录结构

svc_gateway/
├── CMakeLists.txt
└── source/
    └── gateway.cc    # 网关实现

4.2 User Service (svc_user)

职责

  • 用户注册与登录认证
  • 用户信息管理
  • 关注关系管理
  • 管理员权限控制

核心功能

功能说明
临时登录生成SessionId,标识访客
会话登录SessionId换取用户身份
验证码登录邮箱验证码认证
密码登录账号密码认证
关注用户建立关注关系
管理员CRUD管理员账户管理

目录结构

svc_user/
├── CMakeLists.txt
└── source/
    └── user.cc      # 用户服务实现

4.3 Video Service (svc_video)

职责

  • 视频元信息管理
  • 视频审核流程
  • 点赞/播放计数
  • 弹幕管理
  • 视频搜索索引

核心功能

功能说明
发布视频上传视频创建元信息
审核视频管理员审核通过/驳回
视频上架/下架控制视频可见性
点赞/取消点赞用户互动
播放记录增加播放计数
弹幕发送/获取实时弹幕

目录结构

svc_video/
├── CMakeLists.txt
└── source/
    └── video.cc     # 视频服务实现

4.4 File Service (svc_file)

职责

  • 接收文件上传
  • 对接FastDFS存储
  • 文件下载服务

目录结构

svc_file/
├── CMakeLists.txt
├── client/          # FastDFS客户端封装
└── source/
    └── file.cc     # 文件服务实现

4.5 Transcode Service (svc_transcode)

职责

  • 监听转码消息队列
  • 执行视频HLS转码
  • 更新视频状态

工作流程

1. Video Service发布转码消息到RabbitMQ
   │
   ▼
2. Transcode Service消费消息
   │
   ▼
3. 从FastDFS下载原始视频
   │
   ▼
4. FFmpeg转码为HLS格式
   │
   ▼
5. 上传HLS文件到FastDFS
   │
   ▼
6. 更新视频元信息状态
   │
   ▼
7. 写入ES搜索索引

目录结构

svc_transcode/
├── CMakeLists.txt
└── source/
    └── transcode.cc  # 转码服务实现

今天的更新就到这里,如有错误欢迎评论区指出

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注