diff --git a/src/main/java/com/genersoft/iot/vmp/common/enums/ChannelDataType.java b/src/main/java/com/genersoft/iot/vmp/common/enums/ChannelDataType.java index c2d2a11e0..d00e0ce11 100644 --- a/src/main/java/com/genersoft/iot/vmp/common/enums/ChannelDataType.java +++ b/src/main/java/com/genersoft/iot/vmp/common/enums/ChannelDataType.java @@ -1,21 +1,24 @@ package com.genersoft.iot.vmp.common.enums; +import java.util.HashMap; +import java.util.Map; + /** * 支持的通道数据类型 */ -public enum ChannelDataType { +public class ChannelDataType { - GB28181(1,"国标28181"), - STREAM_PUSH(2,"推流设备"), - STREAM_PROXY(3,"拉流代理"); + public final static int GB28181 = 1; + public final static int STREAM_PUSH = 2; + public final static int STREAM_PROXY = 3; - public final int value; - - public final String desc; - - ChannelDataType(Integer value, String desc) { - this.value = value; - this.desc = desc; + public static Map getDescMap() { + Map map = new HashMap<>(); + map.put("国标28181", ChannelDataType.GB28181); + map.put("推流设备", ChannelDataType.STREAM_PUSH); + map.put("拉流代理", ChannelDataType.STREAM_PROXY); + return map; } + } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelPlayService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelPlayService.java index 1d6e1ebe8..4656116e8 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelPlayService.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/IGbChannelPlayService.java @@ -25,7 +25,7 @@ public interface IGbChannelPlayService { void playPush(CommonGBChannel channel, String platformDeviceId, String platformName, ErrorCallback callback); - void stopPlayPush(CommonGBChannel channel); + void stopPlayPush(CommonGBChannel channel); void pauseRtp(String streamId); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/ISourcePlayService.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/ISourcePlayService.java new file mode 100644 index 000000000..9dad8f364 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/ISourcePlayService.java @@ -0,0 +1,13 @@ +package com.genersoft.iot.vmp.gb28181.service; + +import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; +import com.genersoft.iot.vmp.service.bean.ErrorCallback; + +public interface ISourcePlayService { + + void play(CommonGBChannel channel, Boolean record, ErrorCallback callback); + + void stopPlay(CommonGBChannel channel, String stream); + +} diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelPlayServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelPlayServiceImpl.java index 8a849a28e..20a7897fa 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelPlayServiceImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/GbChannelPlayServiceImpl.java @@ -2,16 +2,17 @@ package com.genersoft.iot.vmp.gb28181.service.impl; import com.genersoft.iot.vmp.common.InviteSessionType; import com.genersoft.iot.vmp.common.StreamInfo; -import com.genersoft.iot.vmp.conf.exception.ControllerException; -import com.genersoft.iot.vmp.conf.exception.ServiceException; -import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.common.enums.ChannelDataType; import com.genersoft.iot.vmp.conf.UserSetting; +import com.genersoft.iot.vmp.conf.exception.ControllerException; +import com.genersoft.iot.vmp.conf.exception.ServiceException; import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; +import com.genersoft.iot.vmp.gb28181.bean.InviteMessageInfo; import com.genersoft.iot.vmp.gb28181.bean.Platform; import com.genersoft.iot.vmp.gb28181.bean.PlayException; import com.genersoft.iot.vmp.gb28181.service.IGbChannelPlayService; import com.genersoft.iot.vmp.gb28181.service.IPlayService; +import com.genersoft.iot.vmp.gb28181.service.ISourcePlayService; import com.genersoft.iot.vmp.service.bean.ErrorCallback; import com.genersoft.iot.vmp.streamProxy.service.IStreamProxyPlayService; import com.genersoft.iot.vmp.streamPush.service.IStreamPushPlayService; @@ -23,6 +24,7 @@ import javax.sip.InvalidArgumentException; import javax.sip.SipException; import javax.sip.message.Response; import java.text.ParseException; +import java.util.Map; @Slf4j @Service @@ -40,6 +42,9 @@ public class GbChannelPlayServiceImpl implements IGbChannelPlayService { @Autowired private UserSetting userSetting; + @Autowired + private Map sourcePlayServiceMap; + @Override public void start(CommonGBChannel channel, InviteMessageInfo inviteInfo, Platform platform, ErrorCallback callback) { @@ -48,6 +53,7 @@ public class GbChannelPlayServiceImpl implements IGbChannelPlayService { throw new PlayException(Response.SERVER_INTERNAL_ERROR, "server internal error"); } log.info("[点播通用通道] 类型:{}, 通道: {}({})", inviteInfo.getSessionName(), channel.getGbName(), channel.getGbDeviceId()); + if ("Play".equalsIgnoreCase(inviteInfo.getSessionName())) { play(channel, platform, userSetting.getRecordSip(), callback); }else if ("Playback".equals(inviteInfo.getSessionName())) { @@ -119,6 +125,17 @@ public class GbChannelPlayServiceImpl implements IGbChannelPlayService { @Override public void play(CommonGBChannel channel, Platform platform, Boolean record, ErrorCallback callback) { log.info("[通用通道] 播放, 类型: {}, 编号:{}", channel.getDataType(), channel.getGbDeviceId()); + Integer dataType = channel.getDataType(); + ISourcePlayService sourceChannelPlayService = sourcePlayServiceMap.get("SourceChannelPlayService" + dataType); + if (sourceChannelPlayService == null) { + // 通道数据异常 + log.error("[点播通用通道] 类型编号: {} 不支持实时流预览", dataType); + throw new PlayException(Response.BUSY_HERE, "channel not support"); + } + sourceChannelPlayService.play(channel, record, callback); + + + if (channel.getDataType() == ChannelDataType.GB28181.value) { // 国标通道 playGbDeviceChannel(channel, record, callback); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/SourcePlayServiceForGbImpl.java b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/SourcePlayServiceForGbImpl.java new file mode 100644 index 000000000..5c9a4ed0b --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/service/impl/SourcePlayServiceForGbImpl.java @@ -0,0 +1,22 @@ +package com.genersoft.iot.vmp.gb28181.service.impl; + +import com.genersoft.iot.vmp.common.StreamInfo; +import com.genersoft.iot.vmp.common.enums.ChannelDataType; +import com.genersoft.iot.vmp.gb28181.bean.CommonGBChannel; +import com.genersoft.iot.vmp.gb28181.service.ISourcePlayService; +import com.genersoft.iot.vmp.service.bean.ErrorCallback; +import org.springframework.stereotype.Service; + +@Service("SourcePlayService" + ChannelDataType.GB28181) +public class SourcePlayServiceForGbImpl implements ISourcePlayService { + + @Override + public void play(CommonGBChannel channel, Boolean record, ErrorCallback callback) { + + } + + @Override + public void stopPlay(CommonGBChannel channel, String stream) { + + } +} 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 3ffc9e310..ee2f9da4a 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 @@ -339,10 +339,11 @@ public class ServerController { @Operation(summary = "获取系统接入的数据类型", security = @SecurityRequirement(name = JwtUtils.HEADER)) public List> getDataType() { List> result = new LinkedList<>(); - for (ChannelDataType item : ChannelDataType.values()) { + Map descMap = ChannelDataType.getDescMap(); + for (String key : descMap.keySet()) { Map map = new LinkedHashMap<>(); - map.put("key", item.desc); - map.put("value", item.value); + map.put("key", key); + map.put("value", descMap.get(key)); result.add(map); } return result;