基于微服务的视频点播平台
项目地址:田广伟/基于微服务播放器
项目概述: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 # 转码服务实现
今天的更新就到这里,如有错误欢迎评论区指出