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