From 658bec3ecc0453fce36b083bf6cbe03ee495d611 Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: Sun, 10 Jan 2021 20:14:11 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9B=BD=E6=A0=87=E7=BA=A7=E8=81=94--=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E9=80=9A=E9=81=93003-=E5=89=8D=E7=AB=AF=E9=A1=B5?= =?UTF-8?q?=E9=9D=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../genersoft/iot/vmp/VManageBootstrap.java | 2 +- .../transmit/cmd/impl/SIPCommander.java | 18 ++- .../vmp/media/zlm/ZLMHttpHookListener.java | 16 ++- .../vmp/storager/IVideoManagerStorager.java | 18 +++ .../vmp/storager/dao/DeviceChannelMapper.java | 20 +++ .../storager/dao/patformChannelMapper.java | 7 + .../impl/VideoManagerStoragerImpl.java | 18 +++ .../vmp/vmanager/device/DeviceController.java | 7 - .../vmanager/platform/PlatformController.java | 35 +++++ .../vmanager/platform/bean/ChannelReduce.java | 78 ++++++++++++ .../platform/bean/UpdateChannelParam.java | 24 ++++ src/main/resources/wvp.sqlite | Bin 32768 -> 36864 bytes web_src/src/components/ParentPlatformList.vue | 5 +- .../src/components/gb28181/chooseChannel.vue | 119 +++++++---------- .../components/gb28181/chooseChannelForGb.vue | 120 ++++++++++++++++++ 15 files changed, 397 insertions(+), 90 deletions(-) create mode 100644 src/main/java/com/genersoft/iot/vmp/storager/dao/patformChannelMapper.java create mode 100644 src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/ChannelReduce.java create mode 100644 src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/UpdateChannelParam.java create mode 100644 web_src/src/components/gb28181/chooseChannelForGb.vue diff --git a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java index 990f003b..e3a82ec1 100644 --- a/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java +++ b/src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java @@ -8,7 +8,7 @@ import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class VManageBootstrap extends LogManager { - public static void main(String[] args) { + public static void main(String[] args) { SpringApplication.run(VManageBootstrap.class, args); } } diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index dd6ac9d2..4a76e9aa 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -77,6 +77,9 @@ public class SIPCommander implements ISIPCommander { @Value("${media.seniorSdp}") private boolean seniorSdp; + @Value("${media.autoApplyPlay}") + private boolean autoApplyPlay; + @Autowired private ZLMHttpHookSubscribe subscribe; @@ -287,8 +290,12 @@ public class SIPCommander implements ISIPCommander { @Override public void playStreamCmd(Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent) { try { - - String ssrc = streamSession.createPlaySsrc(); + String ssrc = ""; + if (rtpEnable) { + ssrc = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); + }else { + ssrc = streamSession.createPlaySsrc(); + } String streamId = null; if (rtpEnable) { streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId); @@ -408,7 +415,12 @@ public class SIPCommander implements ISIPCommander { , SipSubscribe.Event errorEvent) { try { MediaServerConfig mediaInfo = redisCatchStorage.getMediaInfo(); - String ssrc = streamSession.createPlayBackSsrc(); + String ssrc = null; + if (rtpEnable) { + ssrc = String.format("gb_playback_%s_%s", device.getDeviceId(), channelId); + }else { + ssrc = streamSession.createPlayBackSsrc(); + } String streamId = String.format("%08x", Integer.parseInt(ssrc)).toUpperCase(); // 添加订阅 JSONObject subscribeKey = new JSONObject(); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index 66ee1b04..9fc64c72 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -82,13 +82,10 @@ public class ZLMHttpHookListener { @ResponseBody @PostMapping(value = "/on_flow_report", produces = "application/json;charset=UTF-8") public ResponseEntity onFlowReport(@RequestBody JSONObject json){ - - if (logger.isDebugEnabled()) { - logger.debug("ZLM HOOK on_flow_report API调用,参数:" + json.toString()); - } + + logger.debug("ZLM HOOK on_flow_report API调用,参数:" + json.toString()); // TODO Auto-generated method stub - JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); @@ -234,8 +231,13 @@ public class ZLMHttpHookListener { if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_shell_login API调用,参数:" + json.toString()); } - // TODO Auto-generated method stub - + // TODO 如果是带有rtpstream则开启按需拉流 + String app = json.getString("app"); + String stream = json.getString("stream"); + + ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, json); + if (subscribe != null) subscribe.response(json); + JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); diff --git a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java index 99ff837d..b4d0c9b6 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java @@ -7,7 +7,11 @@ import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; import com.github.pagehelper.PageInfo; +import gov.nist.javax.sip.stack.NioTcpMessageProcessor; + +import javax.swing.event.ChangeEvent; /** * @Description:视频设备数据存储接口 @@ -200,4 +204,18 @@ public interface IVideoManagerStorager { * 所有平台离线 */ void outlineForAllParentPlatform(); + + /** + * 查询通道信息, 不区分设备 + */ + PageInfo queryChannelListInAll(int page, int count, String query, Boolean online, Boolean channelType, String parentChannelId); + + + /** + * 更新上级平台的通道信息 + * @param platformId + * @param channelReduces + * @return + */ + int updateChannelForGB(String platformId, List channelReduces); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java index 24a3f848..115cacb3 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceChannelMapper.java @@ -1,6 +1,8 @@ package com.genersoft.iot.vmp.storager.dao; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; +import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; +import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; import org.apache.ibatis.annotations.*; import java.util.List; @@ -82,4 +84,22 @@ public interface DeviceChannelMapper { @Update(value = {"UPDATE device_channel SET streamId=#{streamId} WHERE deviceId=#{deviceId} AND channelId=#{channelId}"}) void startPlay(String deviceId, String channelId, String streamId); + + + @Select(value = {" "}) + + List queryChannelListInAll(String query, Boolean online, Boolean hasSubChannel, String parentChannelId); } diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/patformChannelMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/patformChannelMapper.java new file mode 100644 index 00000000..9b10ece4 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/patformChannelMapper.java @@ -0,0 +1,7 @@ +package com.genersoft.iot.vmp.storager.dao; + +import org.mapstruct.Mapper; + +@Mapper +public interface patformChannelMapper { +} diff --git a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java index b783238b..546a3e49 100644 --- a/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java +++ b/src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java @@ -9,6 +9,7 @@ import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.dao.DeviceChannelMapper; import com.genersoft.iot.vmp.storager.dao.DeviceMapper; import com.genersoft.iot.vmp.storager.dao.ParentPlatformMapper; +import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import org.springframework.beans.factory.annotation.Autowired; @@ -16,6 +17,7 @@ import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import org.springframework.transaction.annotation.Transactional; /** * @Description:视频设备数据存储-jdbc实现 @@ -270,4 +272,20 @@ public class VideoManagerStoragerImpl implements IVideoManagerStorager { public void outlineForAllParentPlatform() { platformMapper.outlineForAllParentPlatform(); } + + + @Override + public PageInfo queryChannelListInAll(int page, int count, String query, Boolean online, + Boolean channelType, String parentChannelId) { + PageHelper.startPage(page, count); + List all = deviceChannelMapper.queryChannelListInAll(query, online, channelType, parentChannelId); + return new PageInfo<>(all); + } + + + @Transactional + @Override + public int updateChannelForGB(String platformId, List channelReduces) { + return 0; + } } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java index d64b6327..17d1e7d0 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceController.java @@ -61,13 +61,6 @@ public class DeviceController { return storager.queryVideoDeviceList(page, count); } - /** - * 分页查询通道数 - * @param deviceId 设备id - * @param page 当前页 - * @param count 每页条数 - * @return 通道列表 - */ /** * 分页查询通道数 * diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java index ee77f012..0823c493 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/PlatformController.java @@ -1,10 +1,13 @@ package com.genersoft.iot.vmp.vmanager.platform; +import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; +import com.genersoft.iot.vmp.vmanager.platform.bean.UpdateChannelParam; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -15,6 +18,9 @@ import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*; import com.genersoft.iot.vmp.conf.SipConfig; +import java.util.List; +import java.util.Map; + @CrossOrigin @RestController @@ -142,5 +148,34 @@ public class PlatformController { return new ResponseEntity<>(String.valueOf(parentPlatform != null), HttpStatus.OK); } + @RequestMapping("/platforms/channelList") + @ResponseBody + public PageInfo channelList(int page, int count, + @RequestParam(required = false) String query, + @RequestParam(required = false) Boolean online, + @RequestParam(required = false) Boolean channelType){ + + if (logger.isDebugEnabled()) { + logger.debug("查询所有所有通道API调用"); + } + + PageInfo channelReduces = storager.queryChannelListInAll(page, count, query, online, channelType, null); + + return channelReduces; + } + + + @RequestMapping("/platforms/updateChannelForGB") + @ResponseBody + public ResponseEntity updateChannelForGB(@RequestBody UpdateChannelParam param){ + + if (logger.isDebugEnabled()) { + logger.debug("给上级平台添加国标通道API调用"); + } + int result = storager.updateChannelForGB(param.getPlatformId(), param.getChannelReduces()); + + return new ResponseEntity<>(String.valueOf(result > 0), HttpStatus.OK); + } + } diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/ChannelReduce.java b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/ChannelReduce.java new file mode 100644 index 00000000..275e0f77 --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/ChannelReduce.java @@ -0,0 +1,78 @@ +package com.genersoft.iot.vmp.vmanager.platform.bean; + +/** + * 精简的channel信息展示,主要是选择通道的时候展示列表使用 + */ +public class ChannelReduce { + + /** + * 通道id + */ + private String channelId; + + /** + * 设备id + */ + private String deviceId; + + /** + * 通道名 + */ + private String name; + + /** + * 生产厂商 + */ + private String manufacturer; + + /** + * wan地址 + */ + private String hostAddress; + + /** + * 子节点数 + */ + private int subCount; + + + public String getChannelId() { + return channelId; + } + + public void setChannelId(String channelId) { + this.channelId = channelId; + } + + public String getDeviceId() { + return deviceId; + } + + public void setDeviceId(String deviceId) { + this.deviceId = deviceId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getManufacturer() { + return manufacturer; + } + + public void setManufacturer(String manufacturer) { + this.manufacturer = manufacturer; + } + + public String getHostAddress() { + return hostAddress; + } + + public void setHostAddress(String hostAddress) { + this.hostAddress = hostAddress; + } +} diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/UpdateChannelParam.java b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/UpdateChannelParam.java new file mode 100644 index 00000000..34192cad --- /dev/null +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/platform/bean/UpdateChannelParam.java @@ -0,0 +1,24 @@ +package com.genersoft.iot.vmp.vmanager.platform.bean; + +import java.util.List; + +public class UpdateChannelParam { + private String platformId; + private List channelReduces; + + public String getPlatformId() { + return platformId; + } + + public void setPlatformId(String platformId) { + this.platformId = platformId; + } + + public List getChannelReduces() { + return channelReduces; + } + + public void setChannelReduces(List channelReduces) { + this.channelReduces = channelReduces; + } +} diff --git a/src/main/resources/wvp.sqlite b/src/main/resources/wvp.sqlite index f31609fafe4d4acea259c8702da96bfff6432751..b72a3735fc0b857647cfc8a20df0fc5c8e2c7e79 100644 GIT binary patch delta 209 zcmZo@U}{*vG(lSM6axbTClJHHv57jyvZomI>~HdNtz_U}d&0oW#u>poo$U$FNv^#- zP5iN&1qGfmZ%$-Mci1F~n6N#L>yeRY3_RJz0fa%c!KXAXSMo#5E#Bhl^7wCABOwIn^@-Ap%nj O6XVicBv7zOK>z?zB0bCi delta 82 zcmZozz|_#dG(lSMBm)Bj2N1)+(TO_7(kB`8>~HdNtz=+ld&0oW#u>poo$U$FNv^#- fO`8P;o-=PwWJ%>@VzSxTXu&kefO9ja!1sIr8B-No diff --git a/web_src/src/components/ParentPlatformList.vue b/web_src/src/components/ParentPlatformList.vue index 39aeb3cb..98907dbe 100644 --- a/web_src/src/components/ParentPlatformList.vue +++ b/web_src/src/components/ParentPlatformList.vue @@ -95,7 +95,6 @@ export default { } }, mounted() { - this.$refs.chooseChannelDialog.openDialog() this.initData(); this.updateLooper = setInterval(this.initData, 10000); }, @@ -138,7 +137,9 @@ export default { }); }, chooseChannel: function(platform) { - this.$refs.chooseChannelDialog.openDialog() + this.$refs.chooseChannelDialog.openDialog(platform.deviceGBId, ()=>{ + this.initData() + }) }, initData: function() { this.getPlatformList(); diff --git a/web_src/src/components/gb28181/chooseChannel.vue b/web_src/src/components/gb28181/chooseChannel.vue index e5cb09c8..9796eb43 100644 --- a/web_src/src/components/gb28181/chooseChannel.vue +++ b/web_src/src/components/gb28181/chooseChannel.vue @@ -1,63 +1,36 @@ + +