| 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); } } 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(); 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); } } } 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>