From 08674069805545af85ef872e28ee28e5fdc30cee Mon Sep 17 00:00:00 2001 From: ‘liusuyi’ <1951119284@qq.com> Date: 星期五, 04 八月 2023 13:19:11 +0800 Subject: [PATCH] 优化minio工具类 集成webrtc-streamer部署启动 集成minio部署启动 集成mediaMtx部署启动 --- ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageHelper.java | 2 ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java | 53 ++++++++-- ard-work/src/main/java/com/ruoyi/media/service/impl/MinioService.java | 70 ++++++++++++++ ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageInfo.java | 2 ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java | 21 +++- ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java | 48 ++++++-- ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java | 45 ++++++--- lib/minio/minio.exe | 0 8 files changed, 193 insertions(+), 48 deletions(-) diff --git a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java index 85f91d9..46a3ded 100644 --- a/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java +++ b/ard-work/src/main/java/com/ruoyi/device/hiksdk/util/minio/MinioUtils.java @@ -1,5 +1,6 @@ package com.ruoyi.device.hiksdk.util.minio; +import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.utils.uuid.IdUtils; import com.ruoyi.device.hiksdk.config.MinioClientSingleton; import io.minio.*; @@ -32,6 +33,10 @@ public static boolean exitsBucket(String bucketName) { boolean found = false; try { + if(StringUtils.isEmpty(bucketName)) + { + return false; + } BucketExistsArgs bucketExistsArgs = BucketExistsArgs.builder().bucket(bucketName).build(); found = MinioClientSingleton.getMinioClient().bucketExists(bucketExistsArgs); } catch (Exception ex) { @@ -45,6 +50,10 @@ */ public static boolean createBucket(String bucketName) { try { + if(StringUtils.isEmpty(bucketName)) + { + return false; + } /*鍒涘缓妗�*/ MakeBucketArgs makeBucketArgs = MakeBucketArgs.builder().bucket(bucketName).build(); MinioClientSingleton.getMinioClient().makeBucket(makeBucketArgs); @@ -133,6 +142,10 @@ log.error("minio鐢熸垚澶辨晥url寮傚父", ex.getMessage()); } } + else + { + createBucket(bucketName); + } return url; } @@ -145,6 +158,10 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ public static String putObjectAndGetUrl(String bucketName, MultipartFile file) { + if(!exitsBucket(bucketName)) + { + createBucket(bucketName); + } //鍒ゆ柇鏂囦欢鏄惁涓虹┖ if (null == file || 0 == file.getSize()) { log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖"); @@ -197,6 +214,10 @@ * @淇敼浜哄拰鍏跺畠淇℃伅 */ public static String putObjectAndGetUrl(String bucketName, String folder, MultipartFile file) { + if(!exitsBucket(bucketName)) + { + createBucket(bucketName); + } //鍒ゆ柇鏂囦欢鏄惁涓虹┖ if (null == file || 0 == file.getSize()) { log.error("涓婁紶minio鏂囦欢鏈嶅姟鍣ㄩ敊璇紝涓婁紶鏂囦欢涓虹┖"); @@ -351,6 +372,10 @@ */ public static boolean uploadObject(String bucketName, String objectName, InputStream stream, long size, String contextType) { try { + if(!exitsBucket(bucketName)) + { + createBucket(bucketName); + } PutObjectArgs putObjectArgs = PutObjectArgs.builder() .bucket(bucketName) .object(objectName) @@ -375,6 +400,10 @@ */ public static boolean uploadObject(String bucketName, String objectName, File file, String contextType) { try { + if(!exitsBucket(bucketName)) + { + createBucket(bucketName); + } FileInputStream fileInputStream = new FileInputStream(file); PutObjectArgs putObjectArgs = PutObjectArgs.builder() .bucket(bucketName) @@ -400,13 +429,9 @@ */ public static boolean uploadObject(String bucketName, String objectName, MultipartFile multipartFile, String contextType) { try { - if (bucketName.isEmpty()) { - log.error("bucket鍚嶇О涓虹┖"); - return false; - } - if (objectName.isEmpty()) { - log.error("瀵硅薄鍚嶇О涓虹┖"); - return false; + if(!exitsBucket(bucketName)) + { + createBucket(bucketName); } InputStream inputStream = multipartFile.getInputStream(); PutObjectArgs putObjectArgs = PutObjectArgs.builder() @@ -433,6 +458,10 @@ */ public static boolean uploadObject(String bucketName, MultipartFile multipartFile, String contextType) { try { + if(!exitsBucket(bucketName)) + { + createBucket(bucketName); + } if (multipartFile == null) { log.error("涓婁紶鏂囦欢涓虹┖"); return false; @@ -461,11 +490,11 @@ * @param localFilePathName * @return */ - public static boolean uploadObject(String bulkName, String objectName, String localFilePathName, String contextType) { + public static boolean uploadObject(String bucketName, String objectName, String localFilePathName, String contextType) { try { - if (!exitsBucket(bulkName)) { - log.debug(bulkName + "涓嶅瓨鍦�"); - return false; + if(!exitsBucket(bucketName)) + { + createBucket(bucketName); } File file = new File(localFilePathName); if (!file.exists()) { @@ -473,7 +502,7 @@ return false; } UploadObjectArgs uploadObjectArgs = UploadObjectArgs.builder() - .bucket(bulkName) + .bucket(bucketName) .object(objectName) .filename(localFilePathName) .contentType(contextType) diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java index 3bdf604..d10da3b 100644 --- a/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java +++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java @@ -15,6 +15,7 @@ import org.springframework.stereotype.Service; import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; import javax.annotation.Resource; import java.io.BufferedReader; import java.io.File; @@ -33,33 +34,47 @@ * @Version: 1.0 **/ @Service -@Slf4j +@Slf4j(topic = "cmd") public class MediaService implements IMediaService { @Resource MediaClient mediaClient; @Value("${mediamtx.host}") String mediamtxHost; + @Value("${mediamtx.enabled}") + Boolean mediamtxEnabled; + + String processName = "mediamtx.exe"; @PostConstruct public void initMediaMtx() { - if (Platform.isWindows()) { - String processName="mediamtx.exe"; - String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "mediamtx" + File.separator + "mediamtx.exe"; - String ymlPath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "mediamtx" + File.separator + "mediamtx.yml"; + if (mediamtxEnabled) { + if (Platform.isWindows()) { + String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "mediamtx" + File.separator + "mediamtx.exe"; + String ymlPath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "mediamtx" + File.separator + "mediamtx.yml"; - List<String> cmd = new ArrayList<>(); - cmd.add(exePath); - cmd.add(ymlPath); - if (CmdUtils.isProcessRunning(processName)) { - // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� - CmdUtils.stopProcess(processName); - } - // 鍚姩鍚庡彴杩涚▼ - CmdUtils.commandStart(processName,cmd); - // 鍚姩cmd绐楀彛 + List<String> cmd = new ArrayList<>(); + cmd.add(exePath); + cmd.add(ymlPath); + if (CmdUtils.isProcessRunning(processName)) { + // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� + CmdUtils.stopProcess(processName); + } + // 鍚姩鍚庡彴杩涚▼ + CmdUtils.commandStart(processName, cmd, null); + // 鍚姩cmd绐楀彛 // String[] command = {"cmd","/c","start",exePath,ymlPath}; // CmdUtils.commandStart(command); + } + } + } + + @PreDestroy + public void destroyMediaMtx() { + log.info("閿�姣乵ediaMtx"); + if (CmdUtils.isProcessRunning(processName)) { + // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� + CmdUtils.stopProcess(processName); } } diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/MinioService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/MinioService.java new file mode 100644 index 0000000..3c41b6c --- /dev/null +++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/MinioService.java @@ -0,0 +1,70 @@ +package com.ruoyi.media.service.impl; + +import com.ruoyi.utils.tools.CmdUtils; +import com.sun.jna.Platform; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Component; + +import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; +import java.io.File; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +/** + * @Description: + * @ClassName: MinioService + * @Author: 鍒樿嫃涔� + * @Date: 2023骞�08鏈�04鏃�10:32:40 + * @Version: 1.0 + **/ +@Component +@Slf4j(topic = "cmd") +public class MinioService { + String processName = "minio.exe"; + @Value("${minio.path}") + String minioPath; + @Value("${minio.accessKey}") + String accessKey; + @Value("${minio.secretKey}") + String secretKey; + @Value("${minio.enabled}") + Boolean minioEnabled; + + @PostConstruct + public void init() { + if (minioEnabled) { + if (Platform.isWindows()) { + String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "minio" + File.separator + processName; + List<String> cmd = new ArrayList<>(); + cmd.add(exePath); + cmd.add("server"); + cmd.add(minioPath); + if (CmdUtils.isProcessRunning(processName)) { + // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� + CmdUtils.stopProcess(processName); + } + // 鍚姩鍚庡彴杩涚▼ + Map<String, String> envMap = new HashMap<>(); + envMap.put("MINIO_ROOT_USER", accessKey); + envMap.put("MINIO_ROOT_PASSWORD", secretKey); + CmdUtils.commandStart(processName, cmd, envMap); + // 鍚姩cmd绐楀彛 +// String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"}; +// CmdUtils.commandStart(command); + } + } + } + + @PreDestroy + public void destroyMediaMtx() { + log.info("閿�姣乵inio"); + if (CmdUtils.isProcessRunning(processName)) { + // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� + CmdUtils.stopProcess(processName); + } + } +} diff --git a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java b/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java index 41dc8c6..28c0053 100644 --- a/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java +++ b/ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java @@ -2,9 +2,12 @@ import com.ruoyi.utils.tools.CmdUtils; import com.sun.jna.Platform; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import javax.annotation.PostConstruct; +import javax.annotation.PreDestroy; import java.io.BufferedReader; import java.io.File; import java.io.IOException; @@ -20,25 +23,42 @@ * @Version: 1.0 **/ @Component +@Slf4j(topic = "cmd") public class WebrtcService { + String processName = "webrtc-streamer.exe"; + @Value("${webrtc.host}") + String webrtcHost; + @Value("${webrtc.enabled}") + Boolean webrtcEnabled; + @PostConstruct public void init() { - if (Platform.isWindows()) { - String processName = "webrtc-streamer.exe"; // 鏇挎崲涓哄疄闄呯殑exe绋嬪簭鍚嶇О - String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "webrtc" + File.separator + processName; - List<String> cmd = new ArrayList<>(); - cmd.add(exePath); - cmd.add("-H127.0.0.1:8000"); - cmd.add("-o"); - if (CmdUtils.isProcessRunning(processName)) { - // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� - CmdUtils.stopProcess(processName); - } - // 鍚姩鍚庡彴杩涚▼ - CmdUtils.commandStart(processName,cmd); - // 鍚姩cmd绐楀彛 + if (webrtcEnabled) { + if (Platform.isWindows()) { + String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "webrtc" + File.separator + processName; + List<String> cmd = new ArrayList<>(); + cmd.add(exePath); + cmd.add("-H" + webrtcHost); + cmd.add("-o"); + if (CmdUtils.isProcessRunning(processName)) { + // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� + CmdUtils.stopProcess(processName); + } + // 鍚姩鍚庡彴杩涚▼ + CmdUtils.commandStart(processName, cmd, null); + // 鍚姩cmd绐楀彛 // String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"}; // CmdUtils.commandStart(command); + } + } + } + + @PreDestroy + public void destroyMediaMtx() { + log.info("閿�姣亀ebrtc-streamer"); + if (CmdUtils.isProcessRunning(processName)) { + // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋� + CmdUtils.stopProcess(processName); } } } diff --git a/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageHelper.java b/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageHelper.java index fdd31a4..503605b 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageHelper.java +++ b/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageHelper.java @@ -1,7 +1,7 @@ package com.ruoyi.utils.pagehelper; /** - * @Description: + * @Description: 鍒嗛〉甯姪绫� * @ClassName: JpaPageHelper * @Author: 鍒樿嫃涔� * @Date: 2023骞�07鏈�31鏃�10:42:16 diff --git a/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageInfo.java b/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageInfo.java index eb5a424..1da9f0a 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageInfo.java +++ b/ard-work/src/main/java/com/ruoyi/utils/pagehelper/JpaPageInfo.java @@ -2,7 +2,7 @@ import java.util.List; /** - * @Description: + * @Description: 鍒嗛〉淇℃伅绫� * @ClassName: JpaPageInfo * @Author: 鍒樿嫃涔� * @Date: 2023骞�07鏈�31鏃�10:42:40 diff --git a/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java b/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java index 60a9915..3204542 100644 --- a/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java +++ b/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java @@ -7,6 +7,7 @@ import java.io.InputStreamReader; import java.nio.charset.Charset; import java.util.List; +import java.util.Map; /** * @Description: cmd鍛戒护宸ュ叿绫� @@ -18,10 +19,20 @@ @Slf4j(topic = "cmd") public class CmdUtils { //鍚姩鍛戒护1 - public static void commandStart(String processName, List<String> command) { - log.debug("鍚姩澶栭儴绋嬪簭:" + processName); - command.forEach(v -> log.debug(v + " ")); + public static void commandStart(String processName, List<String> command, Map<String, String> env) { + log.debug("鍚姩澶栭儴绋嬪簭:銆�" + processName+"銆�"); +// command.forEach(v -> log.debug(v + " ")); + log.debug(String.join(" ", command)); ProcessBuilder builder = new ProcessBuilder(); + + // 鑾峰彇瀛愯繘绋嬬殑鐜鍙橀噺鏄犲皠 + if (env != null) { + env.entrySet().forEach(entry -> { + log.debug(entry.getKey() + ":" + entry.getValue()); + }); + Map<String, String> envMap = builder.environment(); + envMap.putAll(env); + } //姝e父淇℃伅鍜岄敊璇俊鎭悎骞惰緭鍑� builder.redirectErrorStream(true); builder.command(command); @@ -36,13 +47,13 @@ // System.out.println(line); // } } catch (IOException e) { - e.printStackTrace(); + log.error("cmd寮傚父:" + e.getMessage()); } } // 缁撴潫鎸囧畾鍚嶇О鐨勮繘绋� public static void stopProcess(String processName) { - log.debug("灏濊瘯缁撴潫杩涚▼:"+processName); + log.debug("灏濊瘯缁撴潫杩涚▼:" + processName); ProcessBuilder builder = new ProcessBuilder("taskkill", "/F", "/IM", processName); Process process; try { diff --git a/lib/minio/minio.exe b/lib/minio/minio.exe new file mode 100644 index 0000000..8365da9 --- /dev/null +++ b/lib/minio/minio.exe Binary files differ -- Gitblit v1.9.3