From f9ab13a14590d310937de7d78a36ee599dce750b Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 13 十月 2020 17:16:38 +0800 Subject: [PATCH] 添加通道音频设置 添加media配置 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java | 114 ++++++++++++++++++++++++++++++-------------------------- 1 files changed, 61 insertions(+), 53 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 fd5ca37..927168f 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 @@ -10,7 +10,6 @@ import javax.sip.InvalidArgumentException; import javax.sip.RequestEvent; -import javax.sip.ServerTransaction; import javax.sip.SipException; import javax.sip.message.Request; import javax.sip.message.Response; @@ -22,10 +21,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.common.VideoManagerConstants; -import com.genersoft.iot.vmp.gb28181.SipLayer; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.bean.RecordInfo; @@ -35,7 +32,7 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; -import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor; +import com.genersoft.iot.vmp.gb28181.transmit.request.SIPRequestAbstractProcessor; import com.genersoft.iot.vmp.gb28181.utils.DateUtil; import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; @@ -43,41 +40,31 @@ /** * @Description:MESSAGE璇锋眰澶勭悊鍣� - * @author: songww + * @author: swwheihei * @date: 2020骞�5鏈�3鏃� 涓嬪崍5:32:41 */ -@Component -public class MessageRequestProcessor implements ISIPRequestProcessor { +public class MessageRequestProcessor extends SIPRequestAbstractProcessor { private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class); - private ServerTransaction transaction; - - private SipLayer layer; - - @Autowired private SIPCommander cmder; - @Autowired private IVideoManagerStorager storager; - @Autowired private EventPublisher publisher; - @Autowired private RedisUtil redis; - @Autowired private DeferredResultHolder deferredResultHolder; - @Autowired private DeviceOffLineDetector offLineDetector; private final static String CACHE_RECORDINFO_KEY = "CACHE_RECORDINFO_"; + private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; + private static final String MESSAGE_CONFIG_DOWNLOAD = "ConfigDownload"; private static final String MESSAGE_CATALOG = "Catalog"; private static final String MESSAGE_DEVICE_INFO = "DeviceInfo"; - private static final String MESSAGE_KEEP_ALIVE = "Keepalive"; private static final String MESSAGE_ALARM = "Alarm"; private static final String MESSAGE_RECORD_INFO = "RecordInfo"; // private static final String MESSAGE_BROADCAST = "Broadcast"; @@ -89,26 +76,19 @@ * 澶勭悊MESSAGE璇锋眰 * * @param evt - * @param layer - * @param transaction */ @Override - public void process(RequestEvent evt, SipLayer layer) { - - this.layer = layer; - this.transaction = layer.getServerTransaction(evt); - - Request request = evt.getRequest(); - SAXReader reader = new SAXReader(); - Document xml; + public void process(RequestEvent evt) { + try { - xml = reader.read(new ByteArrayInputStream(request.getRawContent())); - Element rootElement = xml.getRootElement(); - String cmd = rootElement.element("CmdType").getStringValue(); - + Element rootElement = getRootElement(evt); + String cmd = XmlUtil.getText(rootElement,"CmdType"); + if (MESSAGE_KEEP_ALIVE.equals(cmd)) { logger.info("鎺ユ敹鍒癒eepAlive娑堟伅"); processMessageKeepAlive(evt); + } else if (MESSAGE_CONFIG_DOWNLOAD.equals(cmd)) { + logger.info("鎺ユ敹鍒癈onfigDownload娑堟伅"); } else if (MESSAGE_CATALOG.equals(cmd)) { logger.info("鎺ユ敹鍒癈atalog娑堟伅"); processMessageCatalogList(evt); @@ -125,7 +105,6 @@ } catch (DocumentException e) { e.printStackTrace(); } - } /** @@ -146,7 +125,7 @@ device.setManufacturer(XmlUtil.getText(rootElement,"Manufacturer")); device.setModel(XmlUtil.getText(rootElement,"Model")); device.setFirmware(XmlUtil.getText(rootElement,"Firmware")); - storager.update(device); + storager.updateDevice(device); RequestMessage msg = new RequestMessage(); msg.setDeviceId(deviceId); @@ -165,6 +144,7 @@ private void processMessageCatalogList(RequestEvent evt) { try { Element rootElement = getRootElement(evt); + String s = rootElement.toString(); Element deviceIdElement = rootElement.element("DeviceID"); String deviceId = deviceIdElement.getText().toString(); Element deviceListElement = rootElement.element("DeviceList"); @@ -176,11 +156,6 @@ Device device = storager.queryVideoDevice(deviceId); if (device == null) { return; - } - Map<String, DeviceChannel> channelMap = device.getChannelMap(); - if (channelMap == null) { - channelMap = new HashMap<String, DeviceChannel>(5); - device.setChannelMap(channelMap); } // 閬嶅巻DeviceList while (deviceListIterator.hasNext()) { @@ -194,13 +169,13 @@ String channelName = channdelNameElement != null ? channdelNameElement.getText().toString() : ""; Element statusElement = itemDevice.element("Status"); String status = statusElement != null ? statusElement.getText().toString() : "ON"; - DeviceChannel deviceChannel = channelMap.containsKey(channelDeviceId) ? channelMap.get(channelDeviceId) : new DeviceChannel(); + DeviceChannel deviceChannel = new DeviceChannel(); deviceChannel.setName(channelName); deviceChannel.setChannelId(channelDeviceId); - if(status.equals("ON")) { + if(status.equals("ON") || status.equals("On")) { deviceChannel.setStatus(1); } - if(status.equals("OFF")) { + if(status.equals("OFF") || status.equals("Off")) { deviceChannel.setStatus(0); } @@ -211,7 +186,7 @@ deviceChannel.setBlock(XmlUtil.getText(itemDevice,"Block")); deviceChannel.setAddress(XmlUtil.getText(itemDevice,"Address")); deviceChannel.setParental(itemDevice.element("Parental") == null? 0:Integer.parseInt(XmlUtil.getText(itemDevice,"Parental"))); - deviceChannel.setParentId(XmlUtil.getText(itemDevice,"ParentId")); + deviceChannel.setParentId(XmlUtil.getText(itemDevice,"ParentID")); deviceChannel.setSafetyWay(itemDevice.element("SafetyWay") == null? 0:Integer.parseInt(XmlUtil.getText(itemDevice,"SafetyWay"))); deviceChannel.setRegisterWay(itemDevice.element("RegisterWay") == null? 1:Integer.parseInt(XmlUtil.getText(itemDevice,"RegisterWay"))); deviceChannel.setCertNum(XmlUtil.getText(itemDevice,"CertNum")); @@ -224,17 +199,23 @@ deviceChannel.setPassword(XmlUtil.getText(itemDevice,"Password")); deviceChannel.setLongitude(itemDevice.element("Longitude") == null? 0.00:Double.parseDouble(XmlUtil.getText(itemDevice,"Longitude"))); deviceChannel.setLatitude(itemDevice.element("Latitude") == null? 0.00:Double.parseDouble(XmlUtil.getText(itemDevice,"Latitude"))); - channelMap.put(channelDeviceId, deviceChannel); + deviceChannel.setPTZType(itemDevice.element("PTZType") == null? 0:Integer.parseInt(XmlUtil.getText(itemDevice,"PTZType"))); + deviceChannel.setHasAudio(false); // 榛樿鍚湁闊抽涓篺alse + storager.updateChannel(device.getDeviceId(), deviceChannel); } // 鏇存柊 - storager.update(device); + storager.updateDevice(device); + RequestMessage msg = new RequestMessage(); msg.setDeviceId(deviceId); msg.setType(DeferredResultHolder.CALLBACK_CMD_CATALOG); msg.setData(device); deferredResultHolder.invokeResult(msg); + + // 鍥炲200 + responseAck(evt); } - } catch (DocumentException e) { + } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { e.printStackTrace(); } } @@ -251,13 +232,15 @@ Device device = storager.queryVideoDevice(deviceId); if (device == null) { + // TODO 涔熷彲鑳芥槸閫氶亾 +// storager.queryChannel(deviceId) return; } device.setName(XmlUtil.getText(rootElement,"DeviceName")); device.setManufacturer(XmlUtil.getText(rootElement,"Manufacturer")); device.setModel(XmlUtil.getText(rootElement,"Model")); device.setFirmware(XmlUtil.getText(rootElement,"Firmware")); - storager.update(device); + storager.updateDevice(device); cmder.catalogQuery(device); } catch (DocumentException e) { e.printStackTrace(); @@ -272,15 +255,11 @@ try { Element rootElement = getRootElement(evt); String deviceId = XmlUtil.getText(rootElement,"DeviceID"); - Request request = evt.getRequest(); - Response response = null; if (offLineDetector.isOnline(deviceId)) { - response = layer.getMessageFactory().createResponse(Response.OK,request); + responseAck(evt); publisher.onlineEventPublish(deviceId, VideoManagerConstants.EVENT_ONLINE_KEEPLIVE); } else { - response = layer.getMessageFactory().createResponse(Response.BAD_REQUEST,request); } - transaction.sendResponse(response); } catch (ParseException | SipException | InvalidArgumentException | DocumentException e) { e.printStackTrace(); } @@ -372,12 +351,41 @@ } } + private void responseAck(RequestEvent evt) throws SipException, InvalidArgumentException, ParseException { + Response response = getMessageFactory().createResponse(Response.OK,evt.getRequest()); + getServerTransaction(evt).sendResponse(response); + } + private Element getRootElement(RequestEvent evt) throws DocumentException { Request request = evt.getRequest(); SAXReader reader = new SAXReader(); - reader.setEncoding("GB2312"); + reader.setEncoding("gbk"); Document xml = reader.read(new ByteArrayInputStream(request.getRawContent())); return xml.getRootElement(); } + public void setCmder(SIPCommander cmder) { + this.cmder = cmder; + } + + public void setStorager(IVideoManagerStorager storager) { + this.storager = storager; + } + + public void setPublisher(EventPublisher publisher) { + this.publisher = publisher; + } + + public void setRedis(RedisUtil redis) { + this.redis = redis; + } + + public void setDeferredResultHolder(DeferredResultHolder deferredResultHolder) { + this.deferredResultHolder = deferredResultHolder; + } + + public void setOffLineDetector(DeviceOffLineDetector offLineDetector) { + this.offLineDetector = offLineDetector; + } + } -- Gitblit v1.8.0