视频托管到腾讯云(客户端上传)、获取播放视频的签名
涉及知识点:
mysql、springBoot、mybatisPlus、微服务(只需理解nacos服务中心、gateway网关即可,其他的这里没用上)、了解vue生命周期、了解ElementUI基本使用,了解前后分离开发。
场景:
做一个游戏直播平台项目,需要让用户上传视频,如果上传到服务器就会使得服务器端磁盘压力特别大。选择将用户上传的视频托管给腾讯云的点播服务,从而彻底解决服务器磁盘压力问题。
腾讯云提供了服务器端上传视频和客户端上传视频,因为上传视频涉及磁盘的读取(一定要使用客户端上传),所以我们选择使用node.js实现客户端上传视频。
使用客户端上传视频必须向后端获取上传视频的凭证。
上传视频成功后其他用户可以观看,为了保护视频版权,需要获取播放视频的凭证。
客户端上传视频必须解决的问题:
(1)前端获取到后端上传视频的凭证后,表示用户获得了上传视频的权限,用户可以无限上传。前端要做好防止用户恶意上传的解决措施。
(2)用户执行updata操作上传新的视频时,成功上传新的视频需要删除旧的视频,避免腾讯云中出现不会再复用的旧视频,占用不必要的资源。
分析后端需要的接口:
接口1:获取客户端上传视频的凭证。
接口2:根据视频的FIleID删除腾讯云中的视频。
接口3:获取播放视频的凭证。
数据库中视频表(video)的设计:
sql脚本代码:
CREATE TABLE `video` (
`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',
`user_id` bigint(20) NOT NULL DEFAULT '0' COMMENT '用户ID',
`title` varchar(50) NOT NULL COMMENT '视频标题',
`video_source_id` varchar(100) DEFAULT NULL COMMENT '云端视频资源',
`video_original_name` varchar(100) DEFAULT NULL COMMENT '原始文件名称',
`sort` int(10) unsigned NOT NULL DEFAULT '0' COMMENT '排序字段',
`clickRate` bigint(20) unsigned NOT NULL DEFAULT '0' COMMENT '点击量',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`is_deleted` tinyint(3) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=42 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT COMMENT='直播回放';
表的视图:
代码实现:
一、后端代码
(1)添加相关的maven依赖
<!--腾讯云 vod点播服务对应依赖-->
<dependency>
<groupId>com.qcloud</groupId>
<artifactId>vod_api</artifactId>
<version>2.1.4</version>
<exclusions>
<exclusion>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 腾讯点播服务获取播放签名的依赖 -->
<dependency>
<groupId>com.auth0</groupId>
<artifactId>java-jwt</artifactId>
<version>4.2.2</version>
</dependency>
(2)application.properties配置文件
# 服务端口
server.port=8202
# 服务名
spring.application.name=service-live
# 环境设置:dev、test、prod
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/yxzb_live?characterEncoding=utf-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
#这里可以先扫描mapper文件,后面使用到mapper文件,不会出现找不到的问题
mybatis-plus.mapper-locations=classpath:com/gzcslgxy/yxzb/live/mapper/xml/*.xml
#(secretid密钥id、secretkey密钥key)用于上传视频;
tencent.cos.file.secretid=xxxxxxxxxxxxxxxxxxxx
tencent.cos.file.secretkey=xxxxxxxxxxxxxxxxxxxx
#腾讯云点播服务,配置appId,用于上传和删除、播放视频
tencent.video.appid=1317892833
(3)工具类ConstantProperti