From 56859d09df8d4226882d43934acf32d60a3b51d7 Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期二, 30 三月 2021 18:46:34 +0800 Subject: [PATCH] 添加推流列表和拉流代理,下一步与国标关联 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 106 +++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 87 insertions(+), 19 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java index 16698f9..5a24202 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java @@ -4,11 +4,17 @@ import java.text.ParseException; import java.util.*; +import javax.sip.address.SipURI; + import javax.sip.header.FromHeader; import javax.sip.header.HeaderAddress; +import javax.sip.header.ToHeader; import javax.sip.InvalidArgumentException; +import javax.sip.ListeningPoint; +import javax.sip.ObjectInUseException; import javax.sip.RequestEvent; import javax.sip.SipException; +import javax.sip.SipProvider; import javax.sip.message.Request; import javax.sip.message.Response; @@ -36,6 +42,7 @@ import com.genersoft.iot.vmp.utils.redis.RedisUtil; import com.genersoft.iot.vmp.vmanager.platform.bean.ChannelReduce; +import gov.nist.javax.sip.SipStackImpl; import gov.nist.javax.sip.address.AddressImpl; import gov.nist.javax.sip.address.SipUri; @@ -86,7 +93,7 @@ private static final String MESSAGE_ALARM = "Alarm"; private static final String MESSAGE_RECORD_INFO = "RecordInfo"; private static final String MESSAGE_MEDIA_STATUS = "MediaStatus"; - // private static final String MESSAGE_BROADCAST = "Broadcast"; + private static final String MESSAGE_BROADCAST = "Broadcast"; private static final String MESSAGE_DEVICE_STATUS = "DeviceStatus"; private static final String MESSAGE_DEVICE_CONTROL = "DeviceControl"; private static final String MESSAGE_DEVICE_CONFIG = "DeviceConfig"; @@ -116,7 +123,7 @@ logger.info("鎺ユ敹鍒癈atalog娑堟伅"); processMessageCatalogList(evt); } else if (MESSAGE_DEVICE_INFO.equals(cmd)) { - //DeviceInfo娑堟伅澶勭悊 + // DeviceInfo娑堟伅澶勭悊 processMessageDeviceInfo(evt); } else if (MESSAGE_DEVICE_STATUS.equals(cmd)) { // DeviceStatus娑堟伅澶勭悊 @@ -142,6 +149,9 @@ } else if (MESSAGE_PRESET_QUERY.equals(cmd)) { logger.info("鎺ユ敹鍒癙resetQuery娑堟伅"); processMessagePresetQuery(evt); + } else if (MESSAGE_BROADCAST.equals(cmd)) { + // Broadcast娑堟伅澶勭悊 + processMessageBroadcast(evt); } else { logger.info("鎺ユ敹鍒版秷鎭細" + cmd); responseAck(evt); @@ -286,24 +296,51 @@ deferredResultHolder.invokeResult(msg); } else { // 姝ゅ鏄笂绾у彂鍑虹殑DeviceControl鎸囦护 - if (XmlUtil.getText(rootElement, "TeleBoot").equals("Boot") && false) { // 杩滅▼鍚姩鍔熻兘锛氶渶瑕佸湪閲嶆柊鍚姩绋嬪簭鍚庡厛瀵筍ipStack瑙g粦 - String platformId = ((SipUri) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser(); - logger.info("鎵ц杩滅▼鍚姩鍛戒护"); - ParentPlatform parentPlatform = storager.queryParentPlatById(platformId); - cmderFroPlatform.unregister(parentPlatform, null, null); - - Thread restartThread = new Thread(new Runnable() { - @Override - public void run() { - try { - Thread.sleep(1000); - VManageBootstrap.restart(); - } catch (InterruptedException ignored) { + String platformId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(FromHeader.NAME)).getAddress().getURI()).getUser(); + String targetGBId = ((SipURI) ((HeaderAddress) evt.getRequest().getHeader(ToHeader.NAME)).getAddress().getURI()).getUser(); + // 杩滅▼鍚姩鍔熻兘 + if (!XmlUtil.isEmpty(XmlUtil.getText(rootElement, "TeleBoot"))) { + if (deviceId.equals(targetGBId)) { + // 杩滅▼鍚姩鏈钩鍙帮細闇�瑕佸湪閲嶆柊鍚姩绋嬪簭鍚庡厛瀵筍ipStack瑙g粦 + logger.info("鎵ц杩滅▼鍚姩鏈钩鍙板懡浠�"); + ParentPlatform parentPlatform = storager.queryParentPlatById(platformId); + cmderFroPlatform.unregister(parentPlatform, null, null); + + Thread restartThread = new Thread(new Runnable() { + @Override + public void run() { + try { + Thread.sleep(3000); + SipProvider up = (SipProvider) SpringBeanFactory.getBean("udpSipProvider"); + SipStackImpl stack = (SipStackImpl)up.getSipStack(); + stack.stop(); + Iterator listener = stack.getListeningPoints(); + while (listener.hasNext()) { + stack.deleteListeningPoint((ListeningPoint) listener.next()); + } + Iterator providers = stack.getSipProviders(); + while (providers.hasNext()) { + stack.deleteSipProvider((SipProvider) providers.next()); + } + VManageBootstrap.restart(); + } catch (InterruptedException ignored) { + } catch (ObjectInUseException e) { + e.printStackTrace(); + } } - } - }); - restartThread.setDaemon(false); - restartThread.start(); + }); + + restartThread.setDaemon(false); + restartThread.start(); + } else { + // 杩滅▼鍚姩鎸囧畾璁惧 + } + } + // 浜戝彴/鍓嶇鎺у埗鍛戒护 + if (!XmlUtil.isEmpty(XmlUtil.getText(rootElement,"PTZCmd")) && !deviceId.equals(targetGBId)) { + String cmdString = XmlUtil.getText(rootElement,"PTZCmd"); + Device device = storager.queryVideoDeviceByPlatformIdAndChannelId(platformId, deviceId); + cmder.fronEndCmd(device, deviceId, cmdString); } } } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { @@ -862,6 +899,37 @@ } } + /** + * 澶勭悊AudioBroadcast璇煶骞挎挱Message + * + * @param evt + */ + private void processMessageBroadcast(RequestEvent evt) { + try { + Element rootElement = getRootElement(evt); + String deviceId = XmlUtil.getText(rootElement, "DeviceID"); + // 鍥炲200 OK + responseAck(evt); + if (rootElement.getName().equals("Response")) { + // 姝ゅ鏄鏈钩鍙板彂鍑築roadcast鎸囦护鐨勫簲绛� + JSONObject json = new JSONObject(); + XmlUtil.node2Json(rootElement, json); + if (logger.isDebugEnabled()) { + logger.debug(json.toJSONString()); + } + RequestMessage msg = new RequestMessage(); + msg.setDeviceId(deviceId); + msg.setType(DeferredResultHolder.CALLBACK_CMD_BROADCAST); + msg.setData(json); + deferredResultHolder.invokeResult(msg); + } else { + // 姝ゅ鏄笂绾у彂鍑虹殑Broadcast鎸囦护 + } + } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { + e.printStackTrace(); + } + } + /*** * 鍥炲200 OK -- Gitblit v1.8.0