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