src/main/java/com/genersoft/iot/vmp/VManageBootstrap.java
@@ -3,7 +3,6 @@ import java.util.logging.LogManager; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.common; /** * @Description:TODO(这里用一句话描述这个类的作用) * @Description: 定义常量 * @author: swwheihei * @date: 2019年5月30日 下午3:04:04 * src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java
@@ -4,7 +4,7 @@ import org.springframework.context.annotation.Configuration; /** * @Description:TODO(这里用一句话描述这个类的作用) * @Description: 获取数据库配置 * @author: swwheihei * @date: 2020年5月6日 下午2:46:00 */ src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -149,8 +149,6 @@ } } } // } else if (status == Response.TRYING) { // trying不会回复 } else if ((status >= 100) && (status < 200)) { // 增加其它无需回复的响应,如101、180等 } else { src/main/java/com/genersoft/iot/vmp/gb28181/auth/DigestServerAuthenticationHelper.java
@@ -91,8 +91,10 @@ long time = date.getTime(); Random rand = new Random(); long pad = rand.nextLong(); String nonceString = (new Long(time)).toString() + (new Long(pad)).toString(); // String nonceString = (new Long(time)).toString() // + (new Long(pad)).toString(); String nonceString = Long.valueOf(time).toString() + Long.valueOf(pad).toString(); byte mdbytes[] = messageDigest.digest(nonceString.getBytes()); // Convert the mdbytes array into a hex string. return toHexString(mdbytes); @@ -191,7 +193,7 @@ // 客户端随机数,这是一个不透明的字符串值,由客户端提供,并且客户端和服务器都会使用,以避免用明文文本。 // 这使得双方都可以查验对方的身份,并对消息的完整性提供一些保护 String cNonce = authHeader.getCNonce(); //String cNonce = authHeader.getCNonce(); // nonce计数器,是一个16进制的数值,表示同一nonce下客户端发送出请求的数量 int nc = authHeader.getNonceCount(); src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.gb28181.bean; import gov.nist.javax.sip.header.SIPDate; //import gov.nist.javax.sip.header.SIPDate; import java.util.List; src/main/java/com/genersoft/iot/vmp/gb28181/bean/WvpSipDate.java
@@ -10,6 +10,11 @@ */ public class WvpSipDate extends SIPDate { /** * */ private static final long serialVersionUID = 1L; private Calendar javaCal; public WvpSipDate(long timeMillis) { src/main/java/com/genersoft/iot/vmp/gb28181/event/SipSubscribe.java
@@ -1,21 +1,13 @@ package com.genersoft.iot.vmp.gb28181.event; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import javax.sip.ResponseEvent; import javax.sip.message.Request; import java.util.EventObject; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @Component public class SipSubscribe { private final static Logger logger = LoggerFactory.getLogger(SipSubscribe.class); private Map<String, SipSubscribe.Event> errorSubscribes = new ConcurrentHashMap<>(); src/main/java/com/genersoft/iot/vmp/gb28181/event/alarm/AlarmEvent.java
@@ -10,6 +10,11 @@ */ public class AlarmEvent extends ApplicationEvent { /** * */ private static final long serialVersionUID = 1L; public AlarmEvent(Object source) { super(source); } src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java
@@ -3,18 +3,17 @@ import org.springframework.context.ApplicationEvent; /** * @Description:TODO(这里用一句话描述这个类的作用) * @Description: 离线事件类 * @author: swwheihei * @date: 2020年5月6日 上午11:33:13 */ public class OfflineEvent extends ApplicationEvent { /** * @Title: OutlineEvent * @Description: TODO(这里用一句话描述这个方法的作用) * @param: @param source * @throws */ /** * */ private static final long serialVersionUID = 1L; public OfflineEvent(Object source) { super(source); } src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
@@ -3,18 +3,17 @@ import org.springframework.context.ApplicationEvent; /** * @Description:TODO(这里用一句话描述这个类的作用) * @Description: 在线事件类 * @author: swwheihei * @date: 2020年5月6日 上午11:32:56 */ public class OnlineEvent extends ApplicationEvent { /** * @Title: OnlineEvent * @Description: TODO(这里用一句话描述这个方法的作用) * @param: @param source * @throws */ /** * */ private static final long serialVersionUID = 1L; public OnlineEvent(Object source) { super(source); } src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
@@ -8,10 +8,9 @@ import javax.sip.message.Response; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import org.slf4j.Logger; import org.slf4j.LoggerFactory; // import org.slf4j.Logger; // import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.conf.SipConfig; @@ -40,14 +39,14 @@ import com.genersoft.iot.vmp.utils.redis.RedisUtil; /** * @Description:TODO(这里用一句话描述这个类的作用) * @Description: SIP信令处理分配 * @author: swwheihei * @date: 2020年5月3日 下午4:24:37 */ @Component public class SIPProcessorFactory { private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class); // private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class); @Autowired private SipConfig sipConfig; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
@@ -1,6 +1,5 @@ package com.genersoft.iot.vmp.gb28181.transmit.callback; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -10,10 +9,11 @@ import org.springframework.web.context.request.async.DeferredResult; /** * @Description:TODO(这里用一句话描述这个类的作用) * @Description: 异步请求处理 * @author: swwheihei * @date: 2020年5月8日 下午7:59:05 */ @SuppressWarnings(value = {"rawtypes", "unchecked"}) @Component public class DeferredResultHolder { src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java
@@ -1,7 +1,7 @@ package com.genersoft.iot.vmp.gb28181.transmit.callback; /** * @Description:TODO(这里用一句话描述这个类的作用) * @Description: 请求信息定义 * @author: swwheihei * @date: 2020年5月8日 下午1:09:18 */ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -1,6 +1,5 @@ package com.genersoft.iot.vmp.gb28181.transmit.cmd; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -18,7 +18,6 @@ import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.Host; /** * @Description:摄像头命令request创造器 TODO 冗余代码太多待优化 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -1,21 +1,18 @@ package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl; import java.text.ParseException; import java.util.UUID; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.sip.*; import javax.sip.address.SipURI; import javax.sip.header.CallIdHeader; import javax.sip.header.Header; import javax.sip.header.ViaHeader; import javax.sip.message.Request; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe; import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/NotifyRequestProcessor.java
@@ -50,17 +50,11 @@ private final static Logger logger = LoggerFactory.getLogger(MessageRequestProcessor.class); private SIPCommander cmder; private IVideoManagerStorager storager; private IRedisCatchStorage redisCatchStorage; private EventPublisher publisher; private RedisUtil redis; private DeferredResultHolder deferredResultHolder; private DeviceOffLineDetector offLineDetector; @@ -68,8 +62,8 @@ private static final String NOTIFY_ALARM = "Alarm"; private static final String NOTIFY_MOBILE_POSITION = "MobilePosition"; @Override public void process(RequestEvent evt) { @Override public void process(RequestEvent evt) { try { Element rootElement = getRootElement(evt); String cmd = XmlUtil.getText(rootElement, "CmdType"); @@ -87,18 +81,19 @@ logger.info("接收到消息:" + cmd); response200Ok(evt); } } catch (DocumentException | SipException |InvalidArgumentException | ParseException e) { } catch (DocumentException | SipException | InvalidArgumentException | ParseException e) { e.printStackTrace(); } } } /** * 处理MobilePosition移动位置Notify * * @param evt */ private void processNotifyMobilePosition(RequestEvent evt) { try { //回复 200 OK // 回复 200 OK Element rootElement = getRootElement(evt); MobilePosition mobilePosition = new MobilePosition(); Element deviceIdElement = rootElement.element("DeviceID"); @@ -112,8 +107,8 @@ mobilePosition.setDeviceId(XmlUtil.getText(rootElement, "DeviceID")); mobilePosition.setTime(XmlUtil.getText(rootElement, "Time")); mobilePosition.setLongitude(Double.parseDouble(XmlUtil.getText(rootElement, "Longitude"))); mobilePosition.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude"))); if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Speed"))) { mobilePosition.setLatitude(Double.parseDouble(XmlUtil.getText(rootElement, "Latitude"))); if (NumericUtil.isDouble(XmlUtil.getText(rootElement, "Speed"))) { mobilePosition.setSpeed(Double.parseDouble(XmlUtil.getText(rootElement, "Speed"))); } else { mobilePosition.setSpeed(0.0); @@ -147,6 +142,7 @@ /*** * 处理alarm设备报警Notify * * @param evt */ private void processNotifyAlarm(RequestEvent evt) { @@ -180,7 +176,7 @@ deviceAlarm.setLatitude(0.00); } if ( deviceAlarm.getAlarmMethod().equals("4")) { if (deviceAlarm.getAlarmMethod().equals("4")) { MobilePosition mobilePosition = new MobilePosition(); mobilePosition.setDeviceId(deviceAlarm.getDeviceId()); mobilePosition.setTime(deviceAlarm.getAlarmTime()); @@ -245,7 +241,7 @@ DeviceChannel deviceChannel = new DeviceChannel(); deviceChannel.setName(channelName); deviceChannel.setChannelId(channelDeviceId); // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理 // ONLINE OFFLINE HIKVISION DS-7716N-E4 NVR的兼容性处理 if (status.equals("ON") || status.equals("On") || status.equals("ONLINE")) { deviceChannel.setStatus(1); } @@ -259,29 +255,34 @@ deviceChannel.setCivilCode(XmlUtil.getText(itemDevice, "CivilCode")); deviceChannel.setBlock(XmlUtil.getText(itemDevice, "Block")); deviceChannel.setAddress(XmlUtil.getText(itemDevice, "Address")); if (XmlUtil.getText(itemDevice, "Parental") == null || XmlUtil.getText(itemDevice, "Parental") == "") { if (XmlUtil.getText(itemDevice, "Parental") == null || XmlUtil.getText(itemDevice, "Parental") == "") { deviceChannel.setParental(0); } else { deviceChannel.setParental(Integer.parseInt(XmlUtil.getText(itemDevice, "Parental"))); } } deviceChannel.setParentId(XmlUtil.getText(itemDevice, "ParentID")); if (XmlUtil.getText(itemDevice, "SafetyWay") == null || XmlUtil.getText(itemDevice, "SafetyWay")== "") { if (XmlUtil.getText(itemDevice, "SafetyWay") == null || XmlUtil.getText(itemDevice, "SafetyWay") == "") { deviceChannel.setSafetyWay(0); } else { deviceChannel.setSafetyWay(Integer.parseInt(XmlUtil.getText(itemDevice, "SafetyWay"))); } if (XmlUtil.getText(itemDevice, "RegisterWay") == null || XmlUtil.getText(itemDevice, "RegisterWay") =="") { if (XmlUtil.getText(itemDevice, "RegisterWay") == null || XmlUtil.getText(itemDevice, "RegisterWay") == "") { deviceChannel.setRegisterWay(1); } else { deviceChannel.setRegisterWay(Integer.parseInt(XmlUtil.getText(itemDevice, "RegisterWay"))); } deviceChannel.setCertNum(XmlUtil.getText(itemDevice, "CertNum")); if (XmlUtil.getText(itemDevice, "Certifiable") == null || XmlUtil.getText(itemDevice, "Certifiable") == "") { if (XmlUtil.getText(itemDevice, "Certifiable") == null || XmlUtil.getText(itemDevice, "Certifiable") == "") { deviceChannel.setCertifiable(0); } else { deviceChannel.setCertifiable(Integer.parseInt(XmlUtil.getText(itemDevice, "Certifiable"))); } if (XmlUtil.getText(itemDevice, "ErrCode") == null || XmlUtil.getText(itemDevice, "ErrCode") == "") { if (XmlUtil.getText(itemDevice, "ErrCode") == null || XmlUtil.getText(itemDevice, "ErrCode") == "") { deviceChannel.setErrCode(0); } else { deviceChannel.setErrCode(Integer.parseInt(XmlUtil.getText(itemDevice, "ErrCode"))); @@ -289,7 +290,7 @@ deviceChannel.setEndTime(XmlUtil.getText(itemDevice, "EndTime")); deviceChannel.setSecrecy(XmlUtil.getText(itemDevice, "Secrecy")); deviceChannel.setIpAddress(XmlUtil.getText(itemDevice, "IPAddress")); if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") =="") { if (XmlUtil.getText(itemDevice, "Port") == null || XmlUtil.getText(itemDevice, "Port") == "") { deviceChannel.setPort(0); } else { deviceChannel.setPort(Integer.parseInt(XmlUtil.getText(itemDevice, "Port"))); @@ -305,7 +306,8 @@ } else { deviceChannel.setLatitude(0.00); } if (XmlUtil.getText(itemDevice, "PTZType") == null || XmlUtil.getText(itemDevice, "PTZType") == "") { if (XmlUtil.getText(itemDevice, "PTZType") == null || XmlUtil.getText(itemDevice, "PTZType") == "") { deviceChannel.setPTZType(0); } else { deviceChannel.setPTZType(Integer.parseInt(XmlUtil.getText(itemDevice, "PTZType"))); @@ -330,9 +332,9 @@ } } /*** /*** * 回复200 OK * * @param evt * @throws SipException * @throws InvalidArgumentException @@ -343,7 +345,7 @@ getServerTransaction(evt).sendResponse(response); } private Element getRootElement(RequestEvent evt) throws DocumentException { private Element getRootElement(RequestEvent evt) throws DocumentException { Request request = evt.getRequest(); SAXReader reader = new SAXReader(); reader.setEncoding("gbk"); @@ -352,7 +354,6 @@ } public void setCmder(SIPCommander cmder) { this.cmder = cmder; } public void setStorager(IVideoManagerStorager storager) { @@ -364,11 +365,9 @@ } public void setRedis(RedisUtil redis) { this.redis = redis; } public void setDeferredResultHolder(DeferredResultHolder deferredResultHolder) { this.deferredResultHolder = deferredResultHolder; } public void setOffLineDetector(DeviceOffLineDetector offLineDetector) { src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
@@ -145,7 +145,7 @@ // 下发catelog查询目录 if (registerFlag == 1 && device != null) { logger.info("注册成功! deviceId:" + device.getDeviceId()); boolean exists = storager.exists(device.getDeviceId()); // boolean exists = storager.exists(device.getDeviceId()); device.setRegisterTimeMillis(System.currentTimeMillis()); storager.updateDevice(device); publisher.onlineEventPublish(device.getDeviceId(), VideoManagerConstants.EVENT_ONLINE_REGISTER); src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java
@@ -12,14 +12,12 @@ import javax.sip.message.Request; import javax.sip.message.Response; import gov.nist.javax.sip.header.CSeq; import org.slf4j.Logger; import org.slf4j.LoggerFactory; // import org.slf4j.Logger; // import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.conf.SipConfig; import com.genersoft.iot.vmp.gb28181.SipLayer; import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorFactory; import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor; @@ -31,7 +29,7 @@ @Component public class InviteResponseProcessor implements ISIPResponseProcessor { private final static Logger logger = LoggerFactory.getLogger(InviteResponseProcessor.class); // private final static Logger logger = LoggerFactory.getLogger(InviteResponseProcessor.class); /** * 处理invite响应 src/main/java/com/genersoft/iot/vmp/gb28181/utils/NumericUtil.java
@@ -15,10 +15,10 @@ public static boolean isDouble(String str) { try { Double num2 = Double.valueOf(str); System.out.println(num2 + " Is an Integer!"); System.out.println(num2 + " is a valid numeric string!"); return true; } catch (Exception e) { System.out.println(str + " Is not an Integer!"); System.out.println(str + " is an invalid numeric string!"); return false; } } @@ -31,10 +31,10 @@ public static boolean isInteger(String str) { try { int num2 = Integer.valueOf(str); System.out.println(num2 + " Is Number!"); System.out.println(num2 + " is an integer!"); return true; } catch (Exception e) { System.out.println(str + " Is not Number!"); System.out.println(str + " is not an integer!"); return false; } } src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHTTPProxyController.java
@@ -1,34 +1,28 @@ package com.genersoft.iot.vmp.media.zlm; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; // import com.genersoft.iot.vmp.storager.IVideoManagerStorager; // import org.slf4j.Logger; // import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpRequest; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.HttpClientErrorException; import org.springframework.web.client.RestTemplate; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.Enumeration; @RestController @RequestMapping("/zlm") public class ZLMHTTPProxyController { private final static Logger logger = LoggerFactory.getLogger(ZLMHTTPProxyController.class); // private final static Logger logger = LoggerFactory.getLogger(ZLMHTTPProxyController.class); @Autowired private IVideoManagerStorager storager; // @Autowired // private IVideoManagerStorager storager; @Autowired private IRedisCatchStorage redisCatchStorage; src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -1,19 +1,13 @@ package com.genersoft.iot.vmp.media.zlm; import java.math.BigInteger; import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; import java.util.UUID; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.utils.IpUtil; import com.genersoft.iot.vmp.vmanager.service.IPlayService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -57,8 +51,8 @@ @Autowired private IRedisCatchStorage redisCatchStorage; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; // @Autowired // private ZLMRESTfulUtils zlmresTfulUtils; @Autowired private ZLMHttpHookSubscribe subscribe; @@ -86,9 +80,6 @@ if (logger.isDebugEnabled()) { 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"); @@ -106,8 +97,6 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_http_access API 调用,参数:" + json.toString()); } // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("err", ""); @@ -127,8 +116,6 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_play API调用,参数:" + json.toString()); } // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); @@ -146,15 +133,12 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_publish API调用,参数:" + json.toString()); } String app = json.getString("app"); String streamId = json.getString("id"); // String app = json.getString("app"); // String streamId = json.getString("id"); ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, json); if (subscribe != null) subscribe.response(json); // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); @@ -175,8 +159,6 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_record_mp4 API调用,参数:" + json.toString()); } // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); @@ -194,8 +176,6 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_rtsp_realm API调用,参数:" + json.toString()); } // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("realm", ""); @@ -214,8 +194,6 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_rtsp_auth API调用,参数:" + json.toString()); } // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("encrypted", false); @@ -234,8 +212,6 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_shell_login API调用,参数:" + json.toString()); } // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); @@ -267,8 +243,6 @@ redisCatchStorage.stopPlayback(streamInfo); } } JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); @@ -316,8 +290,6 @@ if (logger.isDebugEnabled()) { logger.debug("ZLM HOOK on_stream_not_found API调用,参数:" + json.toString()); } // TODO Auto-generated method stub if (autoApplyPlay) { String app = json.getString("app"); String streamId = json.getString("stream"); @@ -367,8 +339,6 @@ mediaServerConfig.setWanIp(StringUtils.isEmpty(mediaWanIp)? mediaIp: mediaWanIp); mediaServerConfig.setLocalIP(mediaIp); redisCatchStorage.updateMediaInfo(mediaServerConfig); // TODO Auto-generated method stub JSONObject ret = new JSONObject(); ret.put("code", 0); ret.put("msg", "success"); src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java
@@ -1,24 +1,8 @@ package com.genersoft.iot.vmp.media.zlm; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.util.ConcurrentReferenceHashMap; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.math.BigInteger; import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -30,8 +14,6 @@ */ @Component public class ZLMHttpHookSubscribe { private final static Logger logger = LoggerFactory.getLogger(ZLMHttpHookSubscribe.class); public enum HookType{ on_flow_report, @@ -72,8 +54,6 @@ for (JSONObject key : eventMap.keySet()) { Boolean result = null; for (String s : key.keySet()) { String string = hookResponse.getString(s); String string1 = key.getString(s); if (result == null) { result = key.getString(s).equals(hookResponse.getString(s)); }else { src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRESTfulUtils.java
@@ -11,7 +11,6 @@ import java.io.IOException; import java.net.ConnectException; import java.util.HashMap; import java.util.HashSet; import java.util.Map; @Component src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRunner.java
@@ -5,8 +5,7 @@ import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import okhttp3.*; //import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -16,9 +15,6 @@ import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import java.io.IOException; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.HashMap; import java.util.Map; @@ -28,8 +24,8 @@ private final static Logger logger = LoggerFactory.getLogger(ZLMRunner.class); @Autowired private IVideoManagerStorager storager; // @Autowired // private IVideoManagerStorager storager; @Autowired private IRedisCatchStorage redisCatchStorage; src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -12,6 +12,7 @@ * @author: swwheihei * @date: 2020年5月6日 下午2:14:31 */ @SuppressWarnings("rawtypes") public interface IVideoManagerStorager { /** src/main/java/com/genersoft/iot/vmp/storager/impl/RedisCatchStorageImpl.java
@@ -11,7 +11,6 @@ import org.springframework.stereotype.Component; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; @@ -144,9 +143,9 @@ @Override public StreamInfo queryPlaybackByDevice(String deviceId, String code) { String format = String.format("%S_*_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, deviceId, code); // String format = String.format("%S_*_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, // deviceId, // code); List<Object> playLeys = redis.scan(String.format("%S_*_%s_%s", VideoManagerConstants.PLAY_BLACK_PREFIX, deviceId, code)); src/main/java/com/genersoft/iot/vmp/storager/impl/VideoManagerStoragerImpl.java
@@ -9,19 +9,18 @@ import com.genersoft.iot.vmp.storager.dao.DeviceMobilePositionMapper; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import io.swagger.models.auth.In; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import org.springframework.util.StringUtils; /** * @Description:视频设备数据存储-jdbc实现 * @author: swwheihei * @date: 2020年5月6日 下午2:31:42 */ @SuppressWarnings("rawtypes") @Component public class VideoManagerStoragerImpl implements IVideoManagerStorager { @@ -183,11 +182,11 @@ @Override public synchronized boolean online(String deviceId) { Device device = deviceMapper.getDeviceByDeviceId(deviceId); device.setOnline(1); System.out.println("更新设备在线"); if (device == null) { return false; } device.setOnline(1); System.out.println("更新设备在线"); return deviceMapper.update(device) > 0; } @@ -211,7 +210,7 @@ */ @Override public void cleanChannelsForDevice(String deviceId) { int result = deviceChannelMapper.cleanChannelsByDeviceId(deviceId); deviceChannelMapper.cleanChannelsByDeviceId(deviceId); } /** src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
@@ -4,8 +4,6 @@ import java.util.concurrent.TimeUnit; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessException; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.core.*; import org.springframework.stereotype.Component; import org.springframework.util.CollectionUtils; @@ -16,6 +14,7 @@ * @date: 2020年5月6日 下午8:27:29 */ @Component @SuppressWarnings(value = {"rawtypes", "unchecked"}) public class RedisUtil { @Autowired src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceConfig.java
@@ -20,7 +20,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.async.DeferredResult; src/main/java/com/genersoft/iot/vmp/vmanager/device/DeviceQuery.java
@@ -17,11 +17,11 @@ import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import javax.sip.message.Response; @SuppressWarnings("rawtypes") @CrossOrigin @RestController @RequestMapping("/api") src/main/java/com/genersoft/iot/vmp/vmanager/play/PlayController.java
@@ -1,20 +1,16 @@ package com.genersoft.iot.vmp.vmanager.play; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.vmanager.service.IPlayService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.CrossOrigin; @@ -31,7 +27,6 @@ import org.springframework.web.context.request.async.DeferredResult; import javax.sip.message.Response; import java.text.DecimalFormat; import java.util.UUID; @CrossOrigin @@ -145,7 +140,7 @@ storager.stopPlay(streamInfo.getDeviceID(), streamInfo.getChannelId()); RequestMessage msg = new RequestMessage(); msg.setId(DeferredResultHolder.CALLBACK_CMD_STOP + uuid); Response response = event.getResponse(); //Response response = event.getResponse(); msg.setData(String.format("success")); resultHolder.invokeResult(msg); } src/main/java/com/genersoft/iot/vmp/vmanager/playback/PlaybackController.java
@@ -1,24 +1,19 @@ package com.genersoft.iot.vmp.vmanager.playback; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; //import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.vmanager.service.IPlayService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -47,8 +42,8 @@ @Autowired private IRedisCatchStorage redisCatchStorage; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; // @Autowired // private ZLMRESTfulUtils zlmresTfulUtils; @Autowired private IPlayService playService; src/main/java/com/genersoft/iot/vmp/vmanager/service/IPlayService.java
@@ -1,7 +1,6 @@ package com.genersoft.iot.vmp.vmanager.service; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; /** * 点播处理 src/main/java/com/genersoft/iot/vmp/vmanager/service/impl/PlayServiceImpl.java
@@ -9,14 +9,11 @@ import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.vmanager.play.PlayController; import com.genersoft.iot.vmp.vmanager.service.IPlayService; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.text.DecimalFormat; @Service public class PlayServiceImpl implements IPlayService { src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
@@ -1,8 +1,5 @@ package com.genersoft.iot.vmp.vmanager.user; import com.genersoft.iot.vmp.vmanager.play.PlayController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Value; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.CrossOrigin; @@ -13,9 +10,6 @@ @RestController @RequestMapping("/api") public class UserController { private final static Logger logger = LoggerFactory.getLogger(UserController.class); @Value("${auth.username}") private String usernameConfig; src/main/java/com/genersoft/iot/vmp/web/ApiControlController.java
@@ -4,12 +4,9 @@ import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.vmanager.ptz.PtzController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; /** src/main/java/com/genersoft/iot/vmp/web/ApiController.java
@@ -5,11 +5,9 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; /** src/main/java/com/genersoft/iot/vmp/web/ApiDeviceController.java
@@ -4,9 +4,9 @@ import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.gb28181.bean.Device; import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel; import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; // import com.genersoft.iot.vmp.gb28181.event.DeviceOffLineDetector; // import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; // import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.github.pagehelper.PageInfo; import org.slf4j.Logger; @@ -19,6 +19,7 @@ /** * 兼容LiveGBS的API:设备信息 */ @SuppressWarnings("unchecked") @CrossOrigin @RestController @RequestMapping(value = "/api/v1/device") @@ -29,14 +30,14 @@ @Autowired private IVideoManagerStorager storager; @Autowired private SIPCommander cmder; // @Autowired // private SIPCommander cmder; @Autowired private DeferredResultHolder resultHolder; // @Autowired // private DeferredResultHolder resultHolder; @Autowired private DeviceOffLineDetector offLineDetector; // @Autowired // private DeviceOffLineDetector offLineDetector; /** * 分页获取设备列表 TODO 现在直接返回,尚未实现分页 src/main/java/com/genersoft/iot/vmp/web/ApiStreamController.java
@@ -1,21 +1,18 @@ package com.genersoft.iot.vmp.web; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; 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.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; // import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import com.genersoft.iot.vmp.vmanager.play.PlayController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.context.request.async.DeferredResult; @@ -23,6 +20,7 @@ /** * 兼容LiveGBS的API:实时直播 */ @SuppressWarnings(value = {"rawtypes", "unchecked"}) @CrossOrigin @RestController @RequestMapping(value = "/api/v1/stream") @@ -40,8 +38,8 @@ private IRedisCatchStorage redisCatchStorage; @Autowired private ZLMRESTfulUtils zlmresTfulUtils; // @Autowired // private ZLMRESTfulUtils zlmresTfulUtils; @Autowired src/main/java/com/genersoft/iot/vmp/web/AuthController.java
@@ -1,9 +1,6 @@ package com.genersoft.iot.vmp.web; import com.genersoft.iot.vmp.gb28181.bean.Device; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Controller; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.*;