项目学习:仿b站的视频网站项目06 -发布视频01

概括

这章内容主要是截止到项目视频p17,以下主要提供这几章用用到的一些枚举变量和工具方法。

枚举变量

VideoFileTransferResultEnum,代码如下:

java 复制代码
public enum VideoFileTransferResultEnum {
    TRANSFER(1,"转码中"),
    SUCCESS(1,"转码成功"),
    FAIL(1,"转码失败");
    private Integer status;

    private String desc;
    VideoFileTransferResultEnum(Integer status,String desc){
        this.status = status;
        this.desc = desc;
    }

    public Integer getStatus() {
        return status;
    }

    public String getDesc() {
        return desc;
    }
}

VideoFileUpdateTypeEnum,代码如下:

java 复制代码
public enum VideoFileUpdateTypeEnum {
    NO_UPDATE(0,"无更新"),
    UPDATE(1,"有更新");

    private Integer status;
    private String desc;

    VideoFileUpdateTypeEnum(Integer status,String desc){
        this.status = status;
        this.desc = desc;
    }

    public Integer getStatus() {
        return status;
    }

    public String getDesc() {
        return desc;
    }
}

VideoStatusEnum,代码如下:

java 复制代码
public enum VideoStatusEnum {
    STATUS0(0,"转码中"),
    STATUS1(1,"转码失败"),
    STATUS2(2,"待审核"),
    STATUS3(3,"审核成功"),
    STATUS4(4,"审核不通关");

    private Integer status;
    private String desc;

    VideoStatusEnum(Integer status, String desc) {
        this.status = status;
        this.desc = desc;
    }
    public Integer getStatus() {
        return status;
    }

    public String getDesc() {
        return desc;
    }
    public static VideoStatusEnum getEnumByStatus(Integer status) {
        for (VideoStatusEnum videoStatusEnum : VideoStatusEnum.values()) {
            if (videoStatusEnum.getStatus().equals(status)) {
                return videoStatusEnum;
            }
        }
        return null;
    }
}

工具类

RedisComponent,代码添加如下:

主要是增加了将上传信息添加到消息队列中,然后设置一个消费者不停的去消费信息,从而达到异步文件上传和文件删除的效果。

因为如果说删除的文件量很大,并且请求量高的情况下,会造成速度的缺失,这个时候只需要先将数据库中的数据进行删除,之后再用消费者去获取需要删除的视频的文件地址慢慢去删除即可。

java 复制代码
 public void delVideoFileInfo(String userId,String uploadId){
        redisUtils.delete(Constants.REDIS_KEY_UPLOADING_FILE + userId + uploadId);

    }

    public void addFile2DelQueue(String videoId, List<String> deleteFileList) {
        redisUtils.lpushAll(Constants.REDIS_KEY_FILE_DEL + videoId , deleteFileList,Constants.REDIS_KEY_EXPIRE_ONE_DAY * 7);

    }

    public void addFile2TransferQueue(List<VideoInfoFilePost> addFileList) {
        redisUtils.lpushAll(Constants.REDIS_KEY_QUEUE_TRANSFER , addFileList,0);

    }

    public VideoInfoFilePost getFileFromTransferQueue() {
        return (VideoInfoFilePost) redisUtils.rpop(Constants.REDIS_KEY_QUEUE_TRANSFER);
    }

ExecuteQueueTask,代码添加如下:

java 复制代码
    private ExecutorService executorService = Executors.newFixedThreadPool(Constants.LENGTH_2);

    @Resource
    private RedisComponent redisComponent;

    @Resource
    private VideoInfoPostService videoInfoPostService;

    @PostConstruct
    public void consumTransferFileQueue() {
        executorService.execute(() -> {
            while (true) {
                try{
                    VideoInfoFilePost videoInfoFile = redisComponent.getFileFromTransferQueue();
                    if (videoInfoFile ==null){
                        Thread.sleep(1500);
                        continue;
                    }
                    videoInfoPostService.transferVideoFile(videoInfoFile);
                }catch (Exception e){
                    log.error("获取转码文件队列信息失败",e);
                }
            }
        });
    }
相关推荐
_Kayo_3 小时前
VUE2 学习笔记6 vue数据监测原理
vue.js·笔记·学习
chenchihwen3 小时前
大模型应用班-第2课 DeepSeek使用与提示词工程课程重点 学习ollama 安装 用deepseek-r1:1.5b 分析PDF 内容
人工智能·学习
源码_V_saaskw3 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨3 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
悠哉悠哉愿意5 小时前
【电赛学习笔记】MaxiCAM 项目实践——与单片机的串口通信
笔记·python·单片机·嵌入式硬件·学习·视觉检测
快乐肚皮6 小时前
ZooKeeper学习专栏(五):Java客户端开发(原生API)详解
学习·zookeeper·java-zookeeper
慕y2746 小时前
Java学习第七十二部分——Zookeeper
java·学习·java-zookeeper
★YUI★7 小时前
学习游戏制作记录(剑投掷技能)7.26
学习·游戏·unity·c#
蓝桉8027 小时前
opencv学习(图像金字塔)
人工智能·opencv·学习
rannn_1118 小时前
Java学习|黑马笔记|Day23】网络编程、反射、动态代理
java·笔记·后端·学习