# 仿照B站的视频+弹幕系统 **Repository Path**: giteeofzhangyida/bilibili ## Basic Information - **Project Name**: 仿照B站的视频+弹幕系统 - **Description**: 记录自己做仿B站项目的代码,以及自己针对该项目的一些优化 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 11 - **Forks**: 2 - **Created**: 2022-09-14 - **Last Updated**: 2025-03-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 仿bilibili的视频+弹幕系统 ## 项目介绍 本项目是一个基于 SpringBoot 2.x,类似于 B 站的高性能+视频流后端项目,实现了前后端分离。 主要实现功能有: 1. 用户服务:例如用户登录, 用户关注,用户点赞,发送动态等 2. 视频弹幕系统:例如mp4文件上传到服务器,在线播放视频,实时加载弹幕 ## 软件架构 ### 开发环境 1. Windows 64位(如果电脑是Mac也可以,我是用的Windows 64位) 2. IntelliJ IDEA 2021.2.3(我使用的是旗舰版的,旗舰版的功能还是比社区版多的) 3. JDK 1.8 (JDK1.8是写项目的Java最低限度版本了) 4. Maven 3.6.3 5. CentOS 7(我这里是在本地安装虚拟机,你也可以使用云服务器) ### 涉及技术和中间件 SpringBoot + MySQL + MyBatis + JWT + Redis + FastDFS + RocketMQ + WebSocket + ElasticSearch JWT:使用JWT来实现双 token 的用户登录和身份验证 Redis:使用 Redis 实现用户的动态提醒,视频文件的分片上传,缓存弹幕数据 FastDFS:这是一个国人开源的文件服务器,可以用来实现文件存储服务,本项目的视频文件就是保存在这里。同时FastDFS 是部署在 Linux 上面。[这里是它的安装文档](https://github.com/happyfish100/fastdfs/wiki),本项目只用单机部署FastDFS即可。 RocketMQ : - 动态提醒:up主发布动态时,动态消息会放进 RocketMQ, 然后 RocketMQ 会把动态消息放进 Redis 里,由up主的粉丝从Redis里获取动态消息,达到动态提醒的功能。 - 实时推送弹幕:用户在线观看视频时,可能会发送弹幕。此时弹幕会放进 RocketMQ 里,由 RocketMQ 把弹幕实时推送给正在观看该视频的所有人(包括发送弹幕的人),所有人都可以在前端实时看到弹幕。 WebSocket:因为弹幕系统会对所有正在观看视频的用户实时推送弹幕,所以后端可以选择短连接或长连接进行通信。 - 短连接:所有观看视频的客户端不断轮询,若有新的弹幕产生,则拉取它进行展示。这样的效率很低,因为HTTP协议只能由客户端向服务端发起,所以必须不停访问后端接口才能知道有没有新的弹幕产生,非常浪费资源 - 长连接:如果有新弹幕产生时,后端能主动推送弹幕给客户端,那显然是一件很好的事。所以长连接通信就是一个很好的方案,所谓长连接就是客户端和服务端能保持长时间的连接,既能由客户端发起通信,也能服务端发起通信。而 WebSocket 协议就是实现长连接的关键 ElasticSearch:使用 ElasticSearch 搜索引擎,实现用户和视频的全局搜索 ### 开发模式 本项目采用经典的MVC架构,也就是常见的Controller层,Service层和Dao层。每一层用一个子模块表示。 - imooc-bilibili-api:Controller层 - imooc-bilibili-service:Service层 - imooc-bilibili-dao:Dao层 ### 提醒 启动本项目前,需要在电脑安装 Redis + FastDFS + RocketMQ + ElasticSearch 这四个中间件。其中,Redis,RocketMQ 和 ElasticSearch 都是有 Windows 版本的,你可以在Windows安装,也可以都在Linux安装。安装方法在网上都有,自行查找。