java视频播放网站
文章目录
- Java_Vedio
- 环境安装
- 系统启动
- 项目地址
Java_Vedio
这是一个简单的视频播放网站,由springboot+redis+mysql+rocketmq来构建服务(项目的名称vedio拼写打错,正确的应该是video)。
环境安装
redis是作为记录分片上传的索引,以实现断点续传的功能;记录上传任务的开始,设置过期时间,时间到会通知系统删除过期分片
mysql是作为成功上传的记录,当再次上传时,如果在数据库检索出相同的哈希,则直接提示上传成功(秒传)。
rocketmq是作为服务解耦的消息队列,把项目拆成两个服务,一个uplaod,负责上传分片的保存、过期的清理、全部视频的获取和返回播放,一个process,负责分片的合并、视频封面的生成、.m3u8格式的转换、合并完成的分片处理;
ffmpeg是安装在springboot项目运行的环境中,在windows运行项目就在windows装ffmpeg,在linux运行就在linux安装ffmpeg。
redis、mysql、rocketmq都是采用docker容器,利用docker-compose来管理
安装docker和docker-compose后要进行换源,在/etc/docker/daemon.json中写入:
{"registry-mirrors": ["https://docker.m.daocloud.io","https://docker.imgdb.de","https://docker-0.unsee.tech","https://docker.hlmirror.com","https://docker.1ms.run","https://func.ink","https://lispy.org","https://docker.xiaogenban1993.com"]
}
或者在网上找其他的镜像源
在启动镜像前,要先做一点mysql和redis的配置
mkdir /root/docker/mysql_data/vedio
mkdir /root/docker/redis/conf
mkdir /root/docker/redis/data
cd /root/docker/redis/conf
touch redis.conf
echo "protected-mode no" >redis.conf
echo "appendonly yes" >>redis.conf
echo "requirepass 123456" >> redis.conf
cd /root/
docker-compose.yaml:
version: '3.8'services:namesrv:image: apache/rocketmq:4.9.6container_name: rmqnamesrvports:- 9876:9876networks:- rocketmqcommand: sh mqnamesrvbroker:image: apache/rocketmq:4.9.6container_name: rmqbrokerports:- 10909:10909- 10911:10911- 10912:10912environment:- NAMESRV_ADDR=rmqnamesrv:9876volumes:- ./broker.conf:/home/rocketmq/rocketmq-4.9.6/conf/broker.confdepends_on:- namesrvnetworks:- rocketmqcommand: sh mqbroker -c /home/rocketmq/rocketmq-4.9.6/conf/broker.confvedio_mysql:container_name: vedio_mysqlimage: mysql:8.0.43environment:MYSQL_ROOT_PASSWORD: 123456TZ: Asia/ShanghaiMYSQL_DATABASE: vedio_mysql # 自动创建数据库MYSQL_CHARSET: utf8mb4volumes:- /root/docker/mysql_data/vedio:/var/lib/mysql # 数据持久化- /etc/localtime:/etc/localtime- /root/docker/init.sql:/docker-entrypoint-initdb.d/init.sql # 挂载初始化脚本ports:- "3306:3306"networks:- defaulthealthcheck: # 健康检查test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]interval: 5stimeout: 3sretries: 5vedio_redis:container_name: vedio_redisimage: redis:latestvolumes:- /root/docker/redis/data:/data # 数据持久化- /root/docker/redis/conf/redis.conf:/etc/redis/redis.confports:- "6379:6379"restart: alwaysnetworks:- defaultcommand: ["redis-server","/etc/redis/redis.conf"]networks:rocketmq:driver: bridge
通过docker-compose -f docker-compose.yaml up -d
会自动去仓库拉取对应的镜像
上述命令可能不一定正确,只需要镜像可以启动即可,镜像版本不一定要绝对正确,mysql是8.0以上就好
mybatis-plus使得查询和插入mysql变得很简单,很多都不需要写代码。
系统启动
vscode打开项目,打开java_upload的App.java文件,点击run就可以启动java_upload,java_process同理。
效果:
前端的计算哈希如果视频文件太大(可能是100MB),就会导致缓冲区溢出。
项目可能还会更新用户登录、视频搜索、日志收集、弹幕等功能;
项目地址
https://github.com/MoonShinesSeas/java_vedio
https://gitee.com/diskcache/java_vedio