ard-work/src/main/java/com/ruoyi/media/service/impl/MediaService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ard-work/src/main/java/com/ruoyi/media/service/impl/WebrtcService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ard-work/src/main/java/com/ruoyi/utils/tools/CmdUtils.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
lib/webrtc/setup.bat | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
ruoyi-admin/src/main/resources/logback.xml | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
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"; // æå»ºå¯å¨å½ä»¤ï¼ä½¿ç¨cmd /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(); //æ£å¸¸ä¿¡æ¯åé误信æ¯åå¹¶è¾åº builder.redirectErrorStream(true); builder.command(command); //å¼å§æ§è¡å½ä»¤ Process process = null; try { process = builder.start(); //å¦æä½ æ³è·åå°æ§è¡å®åçä¿¡æ¯ï¼é£ä¹ä¸é¢ç代ç 乿¯éè¦ç // 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/"; 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); cmd.add("-o"); if (CmdUtils.isProcessRunning(processName)) { // è¿ç¨å·²ç»å¨è¿è¡ï¼ç»æè¯¥è¿ç¨ CmdUtils.stopProcess(processName); } } public static void commandStart(List<String> command) { command.forEach(v -> System.out.print(v + " ")); System.out.println(); System.out.println(); ProcessBuilder builder = new ProcessBuilder(); //æ£å¸¸ä¿¡æ¯åé误信æ¯åå¹¶è¾åº builder.redirectErrorStream(true); builder.command(command); //å¼å§æ§è¡å½ä»¤ Process process = null; try { process = builder.start(); // //å¦æä½ æ³è·åå°æ§è¡å®åçä¿¡æ¯ï¼é£ä¹ä¸é¢ç代ç 乿¯éè¦ç // String line = ""; // BufferedReader br = new BufferedReader(new InputStreamReader(process.getInputStream())); // while ((line = br.readLine()) != null) { // System.out.println(line); // } } catch (IOException e) { e.printStackTrace(); // å¯å¨åå°è¿ç¨ CmdUtils.commandStart(processName,cmd); // å¯å¨cmdçªå£ // String[] command = {"cmd", "/c", "start", exePath, "-H127.0.0.1:8000", "-o"}; // CmdUtils.commandStart(command); } } } 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(); //æ£å¸¸ä¿¡æ¯åé误信æ¯åå¹¶è¾åº builder.redirectErrorStream(true); builder.command(command); //å¼å§æ§è¡å½ä»¤ Process process = null; try { process = builder.start(); //å¦æä½ æ³è·åå°æ§è¡å®åçä¿¡æ¯ï¼é£ä¹ä¸é¢ç代ç 乿¯éè¦ç // 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(); //å¦æä½ æ³è·åå°æ§è¡å®åçä¿¡æ¯ï¼é£ä¹ä¸é¢ç代ç 乿¯éè¦ç 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(); } } // æ£æ¥æå®åç§°çè¿ç¨æ¯å¦æ£å¨è¿è¡ 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) { //æå»ºå¯å¨å½ä»¤ï¼ä½¿ç¨cmd /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(); } } } lib/webrtc/setup.bat
ÎļþÒÑɾ³ý 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>