From f0afca8e5611e46557f69cd22850c630388d329f Mon Sep 17 00:00:00 2001
From: xiaoyong931011 <15274802129@163.com>
Date: Wed, 22 Dec 2021 14:46:31 +0800
Subject: [PATCH] Merge branch 'master' of http://120.27.238.55:7000/r/xc-video
---
src/main/java/cc/mrbird/febs/common/utils/FileUtil.java | 34 +++++++++++
src/main/java/cc/mrbird/febs/video/controller/CommonController.java | 16 +++++
src/main/java/cc/mrbird/febs/video/service/IVideoMasterSourceService.java | 2
src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterSourceServiceImpl.java | 35 +++++++++++
src/main/java/cc/mrbird/febs/video/entity/VideoMasterSourceEntity.java | 5 +
pom.xml | 34 +++++++++++
6 files changed, 125 insertions(+), 1 deletions(-)
diff --git a/pom.xml b/pom.xml
index 57c559f..ed17d46 100644
--- a/pom.xml
+++ b/pom.xml
@@ -270,6 +270,40 @@
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-amqp</artifactId>
</dependency>
+
+ <!-- jave 核心依赖 -->
+ <dependency>
+ <groupId>ws.schild</groupId>
+ <artifactId>jave-core</artifactId>
+ <version>2.4.6</version>
+ </dependency>
+
+ <!-- 根据不同操作系统引入不同FFmpeg包 -->
+
+ <!-- window32位 FFmpeg -->
+ <dependency>
+ <groupId>ws.schild</groupId>
+ <artifactId>jave-native-win32</artifactId>
+ <version>2.4.6</version>
+ </dependency>
+ <!-- window64位 FFmpeg -->
+ <dependency>
+ <groupId>ws.schild</groupId>
+ <artifactId>jave-native-win64</artifactId>
+ <version>2.4.6</version>
+ </dependency>
+ <!-- linux64位 FFmpeg -->
+ <dependency>
+ <groupId>ws.schild</groupId>
+ <artifactId>jave-native-linux64</artifactId>
+ <version>2.4.6</version>
+ </dependency>
+ <!-- macos64位 FFmpeg -->
+ <dependency>
+ <groupId>ws.schild</groupId>
+ <artifactId>jave-native-osx64</artifactId>
+ <version>2.4.6</version>
+ </dependency>
</dependencies>
<build>
diff --git a/src/main/java/cc/mrbird/febs/common/utils/FileUtil.java b/src/main/java/cc/mrbird/febs/common/utils/FileUtil.java
index 69a5d5d..9cc622c 100644
--- a/src/main/java/cc/mrbird/febs/common/utils/FileUtil.java
+++ b/src/main/java/cc/mrbird/febs/common/utils/FileUtil.java
@@ -1,10 +1,16 @@
package cc.mrbird.febs.common.utils;
import cc.mrbird.febs.common.entity.FebsConstant;
+import cc.mrbird.febs.common.exception.FebsException;
import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableList;
import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.io.FilenameUtils;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.StringUtils;
+import ws.schild.jave.EncoderException;
+import ws.schild.jave.MultimediaInfo;
+import ws.schild.jave.MultimediaObject;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
@@ -23,6 +29,8 @@
public class FileUtil {
private static final int BUFFER = 1024 * 8;
+ private static ImmutableList<String> videoSuffixList = ImmutableList.of("mp4", "mov", "avi", "mkv", "m4v", "wmv",
+ "asf", "asx", "rm", "rmvb", "3gp", "dat", "flv", "vob");
/**
* 压缩文件或目录
@@ -162,4 +170,30 @@
}
}
}
+
+ public static boolean isVideo(File file) {
+ return videoSuffixList.contains(FilenameUtils.getExtension(file.getName()));
+ }
+
+ /**
+ * 获取视频时长(秒)
+ *
+ * @param file
+ * @return
+ */
+ public static Integer getVideoTimeSecond(File file) {
+ if (!isVideo(file)){
+ throw new FebsException("不是视频");
+ }
+
+ MultimediaObject multimediaObject = new MultimediaObject(file);
+ MultimediaInfo info = null;
+ try {
+ info = multimediaObject.getInfo();
+ } catch (EncoderException e) {
+ log.error("视频异常:", e);
+ throw new FebsException("视频处理异常");
+ }
+ return (int) Math.ceil((double) info.getDuration() / 1000);
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/video/controller/CommonController.java b/src/main/java/cc/mrbird/febs/video/controller/CommonController.java
index 662ea12..785d190 100644
--- a/src/main/java/cc/mrbird/febs/video/controller/CommonController.java
+++ b/src/main/java/cc/mrbird/febs/video/controller/CommonController.java
@@ -2,6 +2,7 @@
import cc.mrbird.febs.common.entity.FebsResponse;
import cc.mrbird.febs.common.exception.FebsException;
+import cc.mrbird.febs.common.utils.FileUtil;
import cn.hutool.core.lang.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -11,6 +12,9 @@
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartRequest;
+import ws.schild.jave.EncoderException;
+import ws.schild.jave.MultimediaInfo;
+import ws.schild.jave.MultimediaObject;
import java.io.File;
import java.io.IOException;
@@ -98,5 +102,15 @@
return fileUrlMap;
}
-
+
+ public static void main(String[] args) throws EncoderException {
+ File file = new File("http://120.27.238.55:8000/video/20211216/9c7d8952-aadb-4fa1-b9c7-a07ab414a394.mp4");
+
+ boolean directory = file.isDirectory();
+ boolean video = FileUtil.isVideo(file);
+ MultimediaObject multimediaObject = new MultimediaObject(file);
+ MultimediaInfo info = multimediaObject.getInfo();
+ int duration = (int) Math.ceil((double) info.getDuration() / 1000);
+ System.out.println(duration);
+ }
}
diff --git a/src/main/java/cc/mrbird/febs/video/entity/VideoMasterSourceEntity.java b/src/main/java/cc/mrbird/febs/video/entity/VideoMasterSourceEntity.java
index 038815d..284b790 100644
--- a/src/main/java/cc/mrbird/febs/video/entity/VideoMasterSourceEntity.java
+++ b/src/main/java/cc/mrbird/febs/video/entity/VideoMasterSourceEntity.java
@@ -33,6 +33,11 @@
private String timeLength;
/**
+ * 视频时长(秒)
+ */
+ private Integer timeSecond;
+
+ /**
* 是否同步修改
*/
@TableField(exist = false)
diff --git a/src/main/java/cc/mrbird/febs/video/service/IVideoMasterSourceService.java b/src/main/java/cc/mrbird/febs/video/service/IVideoMasterSourceService.java
index 07f974e..1cb68aa 100644
--- a/src/main/java/cc/mrbird/febs/video/service/IVideoMasterSourceService.java
+++ b/src/main/java/cc/mrbird/febs/video/service/IVideoMasterSourceService.java
@@ -10,6 +10,8 @@
IPage<VideoMasterSourceEntity> findInPage(VideoMasterSourceEntity source, QueryRequest queryRequest);
+ void addSource(VideoMasterSourceEntity source);
+
void modifySourceById(VideoMasterSourceEntity source);
void delSource(String ids);
diff --git a/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterSourceServiceImpl.java b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterSourceServiceImpl.java
index 207399f..b67a20f 100644
--- a/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterSourceServiceImpl.java
+++ b/src/main/java/cc/mrbird/febs/video/service/impl/VideoMasterSourceServiceImpl.java
@@ -2,19 +2,23 @@
import cc.mrbird.febs.common.entity.QueryRequest;
import cc.mrbird.febs.common.utils.AppContants;
+import cc.mrbird.febs.common.utils.FileUtil;
import cc.mrbird.febs.video.entity.VideoMasterSourceEntity;
import cc.mrbird.febs.video.mapper.VideoMasterItemsMapper;
import cc.mrbird.febs.video.mapper.VideoMasterSourceMapper;
import cc.mrbird.febs.video.service.IVideoMasterSourceService;
+import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
+import java.io.File;
import java.util.Date;
import java.util.List;
@@ -29,6 +33,12 @@
private final VideoMasterItemsMapper videoMasterItemsMapper;
+ @Value("${system.images.path}")
+ private String baseSavePath;
+
+ @Value("${system.images.url}")
+ private String baseUrl;
+
@Override
public IPage<VideoMasterSourceEntity> findInPage(VideoMasterSourceEntity source, QueryRequest queryRequest) {
Page<VideoMasterSourceEntity> page = new Page<>(queryRequest.getPageNum(), queryRequest.getPageSize());
@@ -36,10 +46,21 @@
return this.baseMapper.selectInPage(source, page);
}
+ @Override
+ public void addSource(VideoMasterSourceEntity source) {
+ Integer second = getVideoTimeLength(source.getUrl());
+ source.setTimeSecond(second);
+ source.setTimeLength(timeFormat(second));
+ this.baseMapper.insert(source);
+ }
+
@Transactional
@Override
public void modifySourceById(VideoMasterSourceEntity source) {
+ Integer second = getVideoTimeLength(source.getUrl());
source.setUpdatedTime(new Date());
+ source.setTimeSecond(second);
+ source.setTimeLength(timeFormat(second));
this.baseMapper.updateById(source);
// 同步修改 即将所有关联到这个资源的视频中的url更新为最新url
@@ -53,4 +74,18 @@
List<String> idList = StrUtil.split(ids, ',');
this.baseMapper.updateDelFlag(AppContants.FLAG_INT_Y, idList);
}
+
+ private Integer getVideoTimeLength(String url) {
+ Assert.notBlank(url);
+
+ String filePath = baseSavePath + url.replaceAll(baseUrl, "");
+ File file = new File(filePath);
+ return FileUtil.getVideoTimeSecond(file);
+ }
+
+ private String timeFormat(Integer time) {
+ int minutes = time / 60;
+ int second = time - time * 60;
+ return minutes + ":" + second;
+ }
}
--
Gitblit v1.9.1