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