项目学习:仿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);
                }
            }
        });
    }
相关推荐
aqi0012 小时前
FFmpeg开发笔记(八十四)使用国产的librestreaming实现RTMP直播
ffmpeg·音视频·直播·流媒体
筏.k14 小时前
FFmpeg 核心 API 系列:音频重采样 SwrContext 完全指南(新API版本)
ffmpeg·音视频
张晓~1833994812114 小时前
碰一碰发视频 系统源码 /PHP 语言开发方案
开发语言·线性代数·矩阵·aigc·php·音视频·文心一言
涤生z14 小时前
list.
开发语言·数据结构·c++·学习·算法·list
励志不掉头发的内向程序员14 小时前
【Linux系列】掌控 Linux 的脉搏:深入理解进程控制
linux·运维·服务器·开发语言·学习
光影少年16 小时前
云计算生态及学习方向和就业领域方向
学习·云计算
好奇龙猫16 小时前
[AI学习:SPIN -win-安装SPIN-工具过程 SPIN win 电脑安装=accoda 环境-第四篇:代码修复]
人工智能·学习
luckyPian16 小时前
学习go语言
开发语言·学习·golang
chenzhou__16 小时前
MYSQL学习笔记(个人)(第十五天)
linux·数据库·笔记·学习·mysql
JJJJ_iii19 小时前
【机器学习01】监督学习、无监督学习、线性回归、代价函数
人工智能·笔记·python·学习·机器学习·jupyter·线性回归