项目学习:仿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);
                }
            }
        });
    }
相关推荐
handler0112 小时前
Git 核心指令速查
linux·c语言·c++·笔记·git·学习
噜噜噜阿鲁~12 小时前
python学习笔记 | 8.3、函数式编程-匿名函数
笔记·python·学习
星幻元宇VR12 小时前
VR单人地震体验平台助力防灾减灾教育
科技·学习·安全·vr·虚拟现实
minstbe12 小时前
【AI本体论研究学习】本体的核心元素:类、属性、实例与关系——拆解 OWL/RDF 四大基石
人工智能·学习
YJlio12 小时前
Windows Internals 读书笔记 10.3.3:Task Scheduler 架构详解
人工智能·windows·笔记·python·学习·chatgpt·架构
hopetomorrow12 小时前
学习路之PHP --PHP 常用扩展及作用表
开发语言·学习·php
嵌入式小企鹅12 小时前
嵌入式面试宝典
学习·面试·嵌入式·嵌入式工程师·高薪offer
卖芒果的潇洒农民12 小时前
NVMe 2.3协议学习
学习
jiayong2313 小时前
国内外视频/图像大模型与智能体工具平台竞品对比
ai·音视频·agent
小糖学代码13 小时前
LLM系列:2.pytorch入门:9.神经网络的学习
人工智能·python·深度学习·神经网络·学习·机器学习