From 226b979027a05d371501d64f7ce040a6fe2a60e2 Mon Sep 17 00:00:00 2001
From: ‘liusuyi’ <1951119284@qq.com>
Date: 星期六, 29 七月 2023 14:59:04 +0800
Subject: [PATCH] 优化外部exe程序启动方式

---
 /dev/null                                                              |    3 
 ruoyi-admin/src/main/resources/logback.xml                             |   17 ++++
 ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java             |  100 +++++++++++++++++++++++++
 ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java |   40 +++------
 ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java  |   46 +++--------
 5 files changed, 144 insertions(+), 62 deletions(-)

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 31a8fe7..3bdf604 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
@@ -6,6 +6,7 @@
 import com.ruoyi.media.service.IMediaService;
 import com.ruoyi.utils.forest.MediaClient;
 import com.ruoyi.utils.tools.ArdTool;
+import com.ruoyi.utils.tools.CmdUtils;
 import com.sun.jna.Platform;
 import io.minio.messages.Item;
 import lombok.extern.slf4j.Slf4j;
@@ -43,44 +44,25 @@
     @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";
-            // 鏋勫缓鍚姩鍛戒护锛屼娇鐢╟md /c start鍛戒护鏉ュ惎鍔ㄥ彲鎵ц绋嬪簭骞舵樉绀哄懡浠ゆ彁绀虹绐楀彛
-//                String[] cmd = {"cmd", "/c", "start", exePath,ymlPath};
-//                ProcessBuilder processBuilder = new ProcessBuilder(cmd);
-//                processBuilder.redirectErrorStream(true); // 灏嗛敊璇緭鍑洪噸瀹氬悜鍒版爣鍑嗚緭鍑�
-//                Process process = processBuilder.start();
-            // 濡傛灉浣犳兂绛夊緟绋嬪簭瀹屾垚
-            //  int exitCode = process.waitFor();
+
             List<String> cmd = new ArrayList<>();
             cmd.add(exePath);
             cmd.add(ymlPath);
-            commandStart(cmd);
+            if (CmdUtils.isProcessRunning(processName)) {
+                // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋�
+                CmdUtils.stopProcess(processName);
+            }
+            // 鍚姩鍚庡彴杩涚▼
+             CmdUtils.commandStart(processName,cmd);
+            // 鍚姩cmd绐楀彛
+//            String[] command = {"cmd","/c","start",exePath,ymlPath};
+//            CmdUtils.commandStart(command);
+        }
+    }
 
-        }
-    }
-    public static void commandStart(List<String> command) {
-        command.forEach(v -> System.out.print(v + " "));
-        System.out.println();
-        System.out.println();
-        ProcessBuilder builder = new ProcessBuilder();
-        //姝e父淇℃伅鍜岄敊璇俊鎭悎骞惰緭鍑�
-        builder.redirectErrorStream(true);
-        builder.command(command);
-        //寮�濮嬫墽琛屽懡浠�
-        Process process = null;
-        try {
-            process = builder.start();
-            //濡傛灉浣犳兂鑾峰彇鍒版墽琛屽畬鍚庣殑淇℃伅锛岄偅涔堜笅闈㈢殑浠g爜涔熸槸闇�瑕佺殑
-//            String line = "";
-//            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
-//            while ((line = br.readLine()) != null) {
-//                System.out.println(line);
-//            }
-        } catch (IOException e) {
-            e.printStackTrace();
-        }
-    }
     @Override
     public String addPath(String name, String rtspPath, String mode) {
         String rtspUrl = "rtsp://" + mediamtxHost + ":7554/";
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 299d2e3..41dc8c6 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
@@ -1,5 +1,6 @@
 package com.ruoyi.media.service.impl;
 
+import com.ruoyi.utils.tools.CmdUtils;
 import com.sun.jna.Platform;
 import org.springframework.stereotype.Component;
 
@@ -23,36 +24,21 @@
     @PostConstruct
     public void init() {
         if (Platform.isWindows()) {
-            // String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "webrtc" + File.separator + "setup.bat";
-            // String[] cmd = {"cmd", "/c", "start", exePath};
-            String exePath = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "webrtc" + File.separator + "webrtc-streamer.exe";
+            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("-o");
             cmd.add("-H127.0.0.1:8000");
-            commandStart(cmd);
-        }
-    }
-    public static void commandStart(List<String> command) {
-        command.forEach(v -> System.out.print(v + " "));
-        System.out.println();
-        System.out.println();
-        ProcessBuilder builder = new ProcessBuilder();
-        //姝e父淇℃伅鍜岄敊璇俊鎭悎骞惰緭鍑�
-        builder.redirectErrorStream(true);
-        builder.command(command);
-        //寮�濮嬫墽琛屽懡浠�
-        Process process = null;
-        try {
-           process = builder.start();
-//            //濡傛灉浣犳兂鑾峰彇鍒版墽琛屽畬鍚庣殑淇℃伅锛岄偅涔堜笅闈㈢殑浠g爜涔熸槸闇�瑕佺殑
-//            String line = "";
-//            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
-//            while ((line = br.readLine()) != null) {
-//                System.out.println(line);
-//            }
-       } catch (IOException e) {
-            e.printStackTrace();
+            cmd.add("-o");
+            if (CmdUtils.isProcessRunning(processName)) {
+                // 杩涚▼宸茬粡鍦ㄨ繍琛岋紝缁撴潫璇ヨ繘绋�
+                CmdUtils.stopProcess(processName);
+            }
+            // 鍚姩鍚庡彴杩涚▼
+             CmdUtils.commandStart(processName,cmd);
+            // 鍚姩cmd绐楀彛
+//            String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"};
+//            CmdUtils.commandStart(command);
         }
     }
 }
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
new file mode 100644
index 0000000..60a9915
--- /dev/null
+++ b/ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java
@@ -0,0 +1,100 @@
+package com.ruoyi.utils.tools;
+
+import lombok.extern.slf4j.Slf4j;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.nio.charset.Charset;
+import java.util.List;
+
+/**
+ * @Description: cmd鍛戒护宸ュ叿绫�
+ * @ClassName: CmdUtils
+ * @Author: 鍒樿嫃涔�
+ * @Date: 2023骞�07鏈�29鏃�13:24:21
+ * @Version: 1.0
+ **/
+@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 + " "));
+        ProcessBuilder builder = new ProcessBuilder();
+        //姝e父淇℃伅鍜岄敊璇俊鎭悎骞惰緭鍑�
+        builder.redirectErrorStream(true);
+        builder.command(command);
+        //寮�濮嬫墽琛屽懡浠�
+        Process process = null;
+        try {
+            process = builder.start();
+            //濡傛灉浣犳兂鑾峰彇鍒版墽琛屽畬鍚庣殑淇℃伅锛岄偅涔堜笅闈㈢殑浠g爜涔熸槸闇�瑕佺殑
+//            String line = "";
+//            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream()));
+//            while ((line = br.readLine()) != null) {
+//                System.out.println(line);
+//            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    // 缁撴潫鎸囧畾鍚嶇О鐨勮繘绋�
+    public static void stopProcess(String processName) {
+        log.debug("灏濊瘯缁撴潫杩涚▼:"+processName);
+        ProcessBuilder builder = new ProcessBuilder("taskkill", "/F", "/IM", processName);
+        Process process;
+        try {
+            process = builder.start();
+            //濡傛灉浣犳兂鑾峰彇鍒版墽琛屽畬鍚庣殑淇℃伅锛岄偅涔堜笅闈㈢殑浠g爜涔熸槸闇�瑕佺殑
+            String line = "";
+            BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream(), Charset.forName("GBK")));
+            while ((line = br.readLine()) != null) {
+                log.debug("鍥炴樉:" + line);
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+
+    // 妫�鏌ユ寚瀹氬悕绉扮殑杩涚▼鏄惁姝e湪杩愯
+    public static boolean isProcessRunning(String processName) {
+        try {
+            ProcessBuilder builder = new ProcessBuilder("tasklist");
+            Process process = builder.start();
+            BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
+            String line;
+            while ((line = reader.readLine()) != null) {
+                if (line.contains(processName)) {
+                    log.debug("杩涚▼" + processName + "宸插瓨鍦�");
+                    return true;
+                }
+            }
+            reader.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        log.debug("杩涚▼" + processName + "涓嶅瓨鍦�");
+        return false;
+    }
+
+    //鍚姩鍛戒护2
+    public static void commandStart(String[] command) {
+        //鏋勫缓鍚姩鍛戒护锛屼娇鐢╟md /c start鍛戒护鏉ュ惎鍔ㄥ彲鎵ц绋嬪簭骞舵樉绀哄懡浠ゆ彁绀虹绐楀彛
+        ProcessBuilder processBuilder = new ProcessBuilder(command);
+        processBuilder.redirectErrorStream(true); // 灏嗛敊璇緭鍑洪噸瀹氬悜鍒版爣鍑嗚緭鍑�
+        Process process = null;
+        try {
+            process = processBuilder.start();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        //濡傛灉浣犳兂绛夊緟绋嬪簭瀹屾垚
+        try {
+            int exitCode = process.waitFor();
+        } catch (InterruptedException e) {
+            e.printStackTrace();
+        }
+    }
+}
diff --git a/lib/webrtc/setup.bat b/lib/webrtc/setup.bat
deleted file mode 100644
index 16a4bff..0000000
--- a/lib/webrtc/setup.bat
+++ /dev/null
@@ -1,3 +0,0 @@
-cd %~dp0
-
-start /b webrtc-streamer.exe -o
\ No newline at end of file
diff --git a/ruoyi-admin/src/main/resources/logback.xml b/ruoyi-admin/src/main/resources/logback.xml
index bb1f319..197ae9d 100644
--- a/ruoyi-admin/src/main/resources/logback.xml
+++ b/ruoyi-admin/src/main/resources/logback.xml
@@ -185,6 +185,19 @@
             <pattern>${log.pattern}</pattern>
         </encoder>
     </appender>
+    <!--cmd鍛戒护鏃ュ織杈撳嚭-->
+    <appender name="cmd" class="ch.qos.logback.core.rolling.RollingFileAppender">
+        <file>${log.path}/cmd.log</file>
+        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
+            <!--鎸夊ぉ鍥炴粴daily-->
+            <fileNamePattern>${log.path}/cmd.%d{yyyy-MM-dd}.log</fileNamePattern>
+            <!--鏃ュ織鏈�澶х殑鍘嗗彶60澶�-->
+            <maxHistory>60</maxHistory>
+        </rollingPolicy>
+        <encoder>
+            <pattern>${log.pattern}</pattern>
+        </encoder>
+    </appender>
     <!-- 绯荤粺妯″潡鏃ュ織绾у埆鎺у埗  -->
     <logger name="com.ruoyi" level="info"/>
     <!-- Spring鏃ュ織绾у埆鎺у埗  -->
@@ -239,4 +252,8 @@
     <logger name="rongCloud" level="DEBUG">
         <appender-ref ref="rongCloud"/>
     </logger>
+    <!--cmd鏃ュ織鎵撳嵃绛夌骇-->
+    <logger name="cmd" level="DEBUG">
+        <appender-ref ref="cmd"/>
+    </logger>
 </configuration> 
\ No newline at end of file

--
Gitblit v1.9.3