diff --git a/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java b/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java index e259b4e9a..105b8117b 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java +++ b/src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java @@ -7,6 +7,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.ServerKeepaliveData; import com.genersoft.iot.vmp.media.zlm.dto.StreamMediaInfo; import com.genersoft.iot.vmp.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.service.bean.SSRCInfo; +import com.genersoft.iot.vmp.vmanager.bean.FFmpegCmdInfo; import com.genersoft.iot.vmp.vmanager.bean.RecordFile; import java.util.List; @@ -98,4 +99,6 @@ public interface IMediaServerService { * 获取媒体流的信息 */ StreamMediaInfo getMediaInfo(String mediaServerId, String app, String stream); + + List getFFmpegCMDList(String mediaServerID); } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java index 5d4c4706e..d94395612 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java @@ -26,6 +26,7 @@ import com.genersoft.iot.vmp.utils.DateUtil; import com.genersoft.iot.vmp.utils.JsonUtil; import com.genersoft.iot.vmp.utils.redis.RedisUtil; import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; +import com.genersoft.iot.vmp.vmanager.bean.FFmpegCmdInfo; import com.genersoft.iot.vmp.vmanager.bean.RecordFile; import okhttp3.OkHttpClient; import okhttp3.Request; @@ -783,4 +784,25 @@ public class MediaServerServiceImpl implements IMediaServerService { } return streamMediaInfo; } + + @Override + public List getFFmpegCMDList(String mediaServerId) { + MediaServerItem mediaServerItem = mediaServerMapper.queryOne(mediaServerId); + if (mediaServerItem == null) { + throw new ControllerException(ErrorCode.ERROR100.getCode(), "MediaServer不存在"); + } + List result = new ArrayList<>(); + JSONObject mediaServerConfigResuly = zlmresTfulUtils.getMediaServerConfig(mediaServerItem); + if (mediaServerConfigResuly != null && mediaServerConfigResuly.getInteger("code") == 0 + && mediaServerConfigResuly.getJSONArray("data").size() > 0){ + JSONObject mediaServerConfig = mediaServerConfigResuly.getJSONArray("data").getJSONObject(0); + + for (String key : mediaServerConfig.keySet()) { + if (key.startsWith("ffmpeg.cmd")){ + result.add(new FFmpegCmdInfo(key, mediaServerConfig.getString(key))); + } + } + } + return result; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java index 9a4e0b2d6..bf4549e50 100755 --- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamProxyServiceImpl.java @@ -258,9 +258,8 @@ public class StreamProxyServiceImpl implements IStreamProxyService { if (path.indexOf("/", 1) < 0) { throw new ControllerException(ErrorCode.ERROR100.getCode(), "解析DstUrl失败, 至少两层路径"); } - int appIndex = path.indexOf("/", 1); - String app = path.substring(1, appIndex); - String stream = path.substring(path.indexOf(app)); + String app = path.substring(1, path.indexOf("/", 2)); + String stream = path.substring(path.indexOf("/", 2) + 1); param.setApp(app); param.setStream(stream); } catch (MalformedURLException e) { diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/bean/FFmpegCmdInfo.java b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/FFmpegCmdInfo.java new file mode 100644 index 000000000..cddb92aeb --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/bean/FFmpegCmdInfo.java @@ -0,0 +1,28 @@ +package com.genersoft.iot.vmp.vmanager.bean; + +public class FFmpegCmdInfo { + private String key; + + private String value; + + public FFmpegCmdInfo(String key, String value) { + this.key = key; + this.value = value; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java index 0a8c85315..e88c989d0 100755 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/server/ServerController.java @@ -18,10 +18,7 @@ import com.genersoft.iot.vmp.media.zlm.dto.StreamMediaInfo; import com.genersoft.iot.vmp.service.*; import com.genersoft.iot.vmp.service.bean.MediaServerLoad; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; -import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; -import com.genersoft.iot.vmp.vmanager.bean.ResourceBaseInfo; -import com.genersoft.iot.vmp.vmanager.bean.ResourceInfo; -import com.genersoft.iot.vmp.vmanager.bean.SystemConfigInfo; +import com.genersoft.iot.vmp.vmanager.bean.*; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.security.SecurityRequirement; @@ -95,6 +92,13 @@ public class ServerController { return mediaServerService.getAllOnline(); } + @GetMapping(value = "/media_server/ffmpeg_cmd/list") + @ResponseBody + @Operation(summary = "ffmpeg_cmd列表", security = @SecurityRequirement(name = JwtUtils.HEADER)) + public List getFFmpegCMDList(String mediaServerId) { + return mediaServerService.getFFmpegCMDList(mediaServerId); + } + @GetMapping(value = "/media_server/one/{id}") @ResponseBody @Operation(summary = "停止视频回放", security = @SecurityRequirement(name = JwtUtils.HEADER))