From 29710b7cc154191ae56acf6af32ec70241886e78 Mon Sep 17 00:00:00 2001
From: swwheihei <swwheihei@163.com>
Date: 星期四, 16 七月 2020 16:09:48 +0800
Subject: [PATCH] Merge branch 'master' of https://github.com/swwheihei/wvp.git

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java  |   94 ++++--
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java     |    2 
 wikis/images/核心流程.png                                                                            |    0 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java                      |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java                            |    2 
 src/main/java/com/genersoft/iot/vmp/storager/VideoManagerStoragerFactory.java                    |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java           |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java                       |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java                                |    2 
 src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java                     |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java              |    2 
 LICENSE                                                                                          |   21 +
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/CancelResponseProcessor.java  |    2 
 src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java                                        |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java                |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java                                  |    2 
 src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java                                   |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java                                 |    2 
 src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java                            |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java                      |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java               |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java    |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java                    |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/MessageRequestProcessor.java   |    5 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java    |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java                |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java                  |   64 ++++
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java       |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/ByeResponseProcessor.java     |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/ISIPResponseProcessor.java         |    6 
 pom.xml                                                                                          |    4 
 src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java            |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java                     |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java           |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java           |   10 
 src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java              |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java                        |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java  |    2 
 src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java                                     |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java                                 |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java       |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/OtherResponseProcessor.java   |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java          |    2 
 src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java                          |    2 
 src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java                                        |  512 ++++++++++++++++++-----------------
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java                           |    4 
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java |    2 
 src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java                                 |    2 
 src/main/resources/application.yml                                                               |    8 
 49 files changed, 461 insertions(+), 343 deletions(-)

diff --git a/LICENSE b/LICENSE
new file mode 100644
index 0000000..57cc8e5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2020 swwhaha
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/pom.xml b/pom.xml
index 0788992..ec4e9c3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,7 +39,7 @@
 		</dependency>
 		<dependency>
 			<groupId>org.springframework.boot</groupId>
-			<artifactId>spring-boot-starter-undertow</artifactId>
+			<artifactId>spring-boot-starter-tomcat</artifactId>
 		</dependency>
 		<dependency>
 	        <groupId>org.springframework.boot</groupId>
@@ -127,7 +127,7 @@
 		<dependency>
 			<groupId>org.dom4j</groupId>
 			<artifactId>dom4j</artifactId>
-			<version>2.1.1</version>
+			<version>2.1.3</version>
 		</dependency>
 		<dependency>
 			<groupId>com.google.code.gson</groupId>
diff --git a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
index 802309d..723af70 100644
--- a/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
+++ b/src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -2,7 +2,7 @@
 
 /**    
  * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤)   
- * @author: swwheihei
+ * @author: songww
  * @date:   2019骞�5鏈�30鏃� 涓嬪崍3:04:04   
  *   
  */
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java
index 47d2a02..3448a2f 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/RedisConfig.java
@@ -13,7 +13,7 @@
 
 /**
  * @Description:Redis涓棿浠堕厤缃被锛屼娇鐢╯pring-data-redis闆嗘垚锛岃嚜鍔ㄤ粠application.yml涓姞杞絩edis閰嶇疆
- * @author: swwheihei
+ * @author: songww
  * @date: 2019骞�5鏈�30鏃� 涓婂崍10:58:25
  * 
  */
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java
index 6045ea2..b294e0c 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/VManagerConfig.java
@@ -5,7 +5,7 @@
 
 /**    
  * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤)   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓嬪崍2:46:00     
  */
 @Configuration("vmConfig")
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
index cfea026..0f6a092 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -1,250 +1,262 @@
-package com.genersoft.iot.vmp.gb28181;
-
-import java.util.Properties;
-
-import javax.annotation.PostConstruct;
-import javax.sip.DialogTerminatedEvent;
-import javax.sip.IOExceptionEvent;
-import javax.sip.ListeningPoint;
-import javax.sip.RequestEvent;
-import javax.sip.ResponseEvent;
-import javax.sip.ServerTransaction;
-import javax.sip.SipFactory;
-import javax.sip.SipListener;
-import javax.sip.SipProvider;
-import javax.sip.SipStack;
-import javax.sip.TimeoutEvent;
-import javax.sip.TransactionAlreadyExistsException;
-import javax.sip.TransactionTerminatedEvent;
-import javax.sip.TransactionUnavailableException;
-import javax.sip.address.AddressFactory;
-import javax.sip.header.HeaderFactory;
-import javax.sip.header.ViaHeader;
-import javax.sip.message.MessageFactory;
-import javax.sip.message.Request;
-import javax.sip.message.Response;
-
-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.conf.SipConfig;
-import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorFactory;
-import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor;
-import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor;
-
-import gov.nist.javax.sip.SipStackImpl;
-
-@Component
-public class SipLayer implements SipListener, Runnable {
-
-	private final static Logger logger = LoggerFactory.getLogger(SipLayer.class);
-
-	@Autowired
-	private SipConfig sipConfig;
-
-	private SipProvider tcpSipProvider;
-
-	private SipProvider udpSipProvider;
-
-	@Autowired
-	private SIPProcessorFactory processorFactory;
-
-	private SipStack sipStack;
-
-	private AddressFactory addressFactory;
-	private HeaderFactory headerFactory;
-	private MessageFactory messageFactory;
-
-	@PostConstruct
-	private void initSipServer() {
-		Thread thread=new Thread(this);
-        thread.setDaemon(true);
-        thread.setName("sip server thread start");
-        thread.start();
-	}
-
-	@Override
-	public void run() {
-		SipFactory sipFactory = SipFactory.getInstance();
-		sipFactory.setPathName("gov.nist");
-		try {
-			headerFactory = sipFactory.createHeaderFactory();
-
-			addressFactory = sipFactory.createAddressFactory();
-			messageFactory = sipFactory.createMessageFactory();
-
-			Properties properties = new Properties();
-			properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP");
-			properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getSipIp());
-			properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false");
-			/**
-			 * sip_server_log.log 鍜� sip_debug_log.log public static final int TRACE_NONE =
-			 * 0; public static final int TRACE_MESSAGES = 16; public static final int
-			 * TRACE_EXCEPTION = 17; public static final int TRACE_DEBUG = 32;
-			 */
-			properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "0");
-			properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sip_server_log");
-			properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sip_debug_log");
-			sipStack = (SipStackImpl) sipFactory.createSipStack(properties);
-
-			startTcpListener();
-			startUdpListener();
-		} catch (Exception e) {
-			logger.error("Sip Server 鍚姩澶辫触锛� port {" + sipConfig.getSipPort() + "}");
-			e.printStackTrace();
-		}
-		logger.info("Sip Server 鍚姩鎴愬姛 port {" + sipConfig.getSipPort() + "}");
-	}
-
-	private void startTcpListener() throws Exception {
-		ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "TCP");
-		tcpSipProvider = sipStack.createSipProvider(tcpListeningPoint);
-		tcpSipProvider.addSipListener(this);
-	}
-
-	private void startUdpListener() throws Exception {
-		ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(), "UDP");
-		udpSipProvider = sipStack.createSipProvider(udpListeningPoint);
-		udpSipProvider.addSipListener(this);
-	}
-
-	/**
-	 * SIP鏈嶅姟绔帴鏀舵秷鎭殑鏂规硶 Content 閲岄潰鏄疓BK缂栫爜 This method is called by the SIP stack when a
-	 * new request arrives.
-	 */
-	@Override
-	public void processRequest(RequestEvent evt) {
-		ISIPRequestProcessor processor = processorFactory.createRequestProcessor(evt);
-		processor.process(evt, this);
-	}
-
-	@Override
-	public void processResponse(ResponseEvent evt) {
-		Response response = evt.getResponse();
-		int status = response.getStatusCode();
-		if ((status >= 200) && (status < 300)) { // Success!
-			ISIPResponseProcessor processor = processorFactory.createResponseProcessor(evt);
-			processor.process(evt, this, sipConfig);
-		} else {
-			logger.warn("鎺ユ敹鍒板け璐ョ殑response鍝嶅簲锛乻tatus锛�" + status + ",message:" + response.getContent().toString());
-		}
-		// trying涓嶄細鍥炲
-		if (status == Response.TRYING) {
-
-		}
-	}
-
-	/**
-	 * <p>
-	 * Title: processTimeout
-	 * </p>
-	 * <p>
-	 * Description:
-	 * </p>
-	 * 
-	 * @param timeoutEvent
-	 */
-	@Override
-	public void processTimeout(TimeoutEvent timeoutEvent) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/**
-	 * <p>
-	 * Title: processIOException
-	 * </p>
-	 * <p>
-	 * Description:
-	 * </p>
-	 * 
-	 * @param exceptionEvent
-	 */
-	@Override
-	public void processIOException(IOExceptionEvent exceptionEvent) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/**
-	 * <p>
-	 * Title: processTransactionTerminated
-	 * </p>
-	 * <p>
-	 * Description:
-	 * </p>
-	 * 
-	 * @param transactionTerminatedEvent
-	 */
-	@Override
-	public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {
-		// TODO Auto-generated method stub
-
-	}
-
-	/**
-	 * <p>
-	 * Title: processDialogTerminated
-	 * </p>
-	 * <p>
-	 * Description:
-	 * </p>
-	 * 
-	 * @param dialogTerminatedEvent
-	 */
-	@Override
-	public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {
-		// TODO Auto-generated method stub
-
-	}
-
-	public ServerTransaction getServerTransaction(RequestEvent evt) {
-		Request request = evt.getRequest();
-		ServerTransaction serverTransaction = evt.getServerTransaction();
-		// 鍒ゆ柇TCP杩樻槸UDP
-		boolean isTcp = false;
-		ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
-		String transport = reqViaHeader.getTransport();
-		if (transport.equals("TCP")) {
-			isTcp = true;
-		}
-
-		if (serverTransaction == null) {
-			try {
-				if (isTcp) {
-					serverTransaction = tcpSipProvider.getNewServerTransaction(request);
-				} else {
-					serverTransaction = udpSipProvider.getNewServerTransaction(request);
-				}
-			} catch (TransactionAlreadyExistsException e) {
-				e.printStackTrace();
-			} catch (TransactionUnavailableException e) {
-				e.printStackTrace();
-			}
-		}
-		return serverTransaction;
-	}
-
-	public AddressFactory getAddressFactory() {
-		return addressFactory;
-	}
-
-	public HeaderFactory getHeaderFactory() {
-		return headerFactory;
-	}
-
-	public MessageFactory getMessageFactory() {
-		return messageFactory;
-	}
-
-	public SipProvider getTcpSipProvider() {
-		return tcpSipProvider;
-	}
-
-	public SipProvider getUdpSipProvider() {
-		return udpSipProvider;
-	}
-
-}
+package com.genersoft.iot.vmp.gb28181;
+
+import java.text.ParseException;
+import java.util.Properties;
+
+import javax.annotation.PostConstruct;
+import javax.sip.DialogTerminatedEvent;
+import javax.sip.IOExceptionEvent;
+import javax.sip.ListeningPoint;
+import javax.sip.RequestEvent;
+import javax.sip.ResponseEvent;
+import javax.sip.ServerTransaction;
+import javax.sip.SipFactory;
+import javax.sip.SipListener;
+import javax.sip.SipProvider;
+import javax.sip.SipStack;
+import javax.sip.TimeoutEvent;
+import javax.sip.TransactionAlreadyExistsException;
+import javax.sip.TransactionTerminatedEvent;
+import javax.sip.TransactionUnavailableException;
+import javax.sip.address.AddressFactory;
+import javax.sip.header.HeaderFactory;
+import javax.sip.header.ViaHeader;
+import javax.sip.message.MessageFactory;
+import javax.sip.message.Request;
+import javax.sip.message.Response;
+
+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.conf.SipConfig;
+import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorFactory;
+import com.genersoft.iot.vmp.gb28181.transmit.request.ISIPRequestProcessor;
+import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor;
+
+import gov.nist.javax.sip.SipStackImpl;
+
+@Component
+public class SipLayer implements SipListener, Runnable {
+
+	private final static Logger logger = LoggerFactory.getLogger(SipLayer.class);
+
+	@Autowired
+	private SipConfig sipConfig;
+
+	private SipProvider tcpSipProvider;
+
+	private SipProvider udpSipProvider;
+
+	@Autowired
+	private SIPProcessorFactory processorFactory;
+
+	private SipStack sipStack;
+
+	private AddressFactory addressFactory;
+	private HeaderFactory headerFactory;
+	private MessageFactory messageFactory;
+
+	@PostConstruct
+	private void initSipServer() {
+		Thread thread = new Thread(this);
+		thread.setDaemon(true);
+		thread.setName("sip server thread start");
+		thread.start();
+	}
+
+	@Override
+	public void run() {
+		SipFactory sipFactory = SipFactory.getInstance();
+		sipFactory.setPathName("gov.nist");
+		try {
+			headerFactory = sipFactory.createHeaderFactory();
+
+			addressFactory = sipFactory.createAddressFactory();
+			messageFactory = sipFactory.createMessageFactory();
+
+			Properties properties = new Properties();
+			properties.setProperty("javax.sip.STACK_NAME", "GB28181_SIP");
+			properties.setProperty("javax.sip.IP_ADDRESS", sipConfig.getSipIp());
+			properties.setProperty("gov.nist.javax.sip.LOG_MESSAGE_CONTENT", "false");
+			/**
+			 * sip_server_log.log 鍜� sip_debug_log.log public static final int TRACE_NONE =
+			 * 0; public static final int TRACE_MESSAGES = 16; public static final int
+			 * TRACE_EXCEPTION = 17; public static final int TRACE_DEBUG = 32;
+			 */
+			properties.setProperty("gov.nist.javax.sip.TRACE_LEVEL", "32");
+			properties.setProperty("gov.nist.javax.sip.SERVER_LOG", "sip_server_log");
+			properties.setProperty("gov.nist.javax.sip.DEBUG_LOG", "sip_debug_log");
+			sipStack = (SipStackImpl) sipFactory.createSipStack(properties);
+
+			startTcpListener();
+			startUdpListener();
+		} catch (Exception e) {
+			logger.error("Sip Server 鍚姩澶辫触锛� port {" + sipConfig.getSipPort() + "}");
+			e.printStackTrace();
+		}
+		logger.info("Sip Server 鍚姩鎴愬姛 port {" + sipConfig.getSipPort() + "}");
+	}
+
+	private void startTcpListener() throws Exception {
+		ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(),
+				"TCP");
+		tcpSipProvider = sipStack.createSipProvider(tcpListeningPoint);
+		tcpSipProvider.addSipListener(this);
+	}
+
+	private void startUdpListener() throws Exception {
+		ListeningPoint udpListeningPoint = sipStack.createListeningPoint(sipConfig.getSipIp(), sipConfig.getSipPort(),
+				"UDP");
+		udpSipProvider = sipStack.createSipProvider(udpListeningPoint);
+		udpSipProvider.addSipListener(this);
+	}
+
+	/**
+	 * SIP鏈嶅姟绔帴鏀舵秷鎭殑鏂规硶 Content 閲岄潰鏄疓BK缂栫爜 This method is called by the SIP stack when a
+	 * new request arrives.
+	 */
+	@Override
+	public void processRequest(RequestEvent evt) {
+		ISIPRequestProcessor processor = processorFactory.createRequestProcessor(evt);
+		processor.process(evt, this);
+	}
+
+	@Override
+	public void processResponse(ResponseEvent evt) {
+		Response response = evt.getResponse();
+		int status = response.getStatusCode();
+		if ((status >= 200) && (status < 300)) { // Success!
+			ISIPResponseProcessor processor = processorFactory.createResponseProcessor(evt);
+			try {
+				processor.process(evt, this, sipConfig);
+			} catch (ParseException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+		// } else if (status == Response.TRYING) {
+			// trying涓嶄細鍥炲
+		} else if ((status >= 100) && (status < 200)) {
+			// 澧炲姞鍏跺畠鏃犻渶鍥炲鐨勫搷搴旓紝濡�101銆�180绛�
+		} else {
+			logger.warn("鎺ユ敹鍒板け璐ョ殑response鍝嶅簲锛乻tatus锛�" + status + ",message:" + response.getReasonPhrase()/* .getContent().toString()*/);
+		}
+		// trying涓嶄細鍥炲
+		// if (status == Response.TRYING) {
+
+		// }
+	}
+
+	/**
+	 * <p>
+	 * Title: processTimeout
+	 * </p>
+	 * <p>
+	 * Description:
+	 * </p>
+	 * 
+	 * @param timeoutEvent
+	 */
+	@Override
+	public void processTimeout(TimeoutEvent timeoutEvent) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * <p>
+	 * Title: processIOException
+	 * </p>
+	 * <p>
+	 * Description:
+	 * </p>
+	 * 
+	 * @param exceptionEvent
+	 */
+	@Override
+	public void processIOException(IOExceptionEvent exceptionEvent) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * <p>
+	 * Title: processTransactionTerminated
+	 * </p>
+	 * <p>
+	 * Description:
+	 * </p>
+	 * 
+	 * @param transactionTerminatedEvent
+	 */
+	@Override
+	public void processTransactionTerminated(TransactionTerminatedEvent transactionTerminatedEvent) {
+		// TODO Auto-generated method stub
+
+	}
+
+	/**
+	 * <p>
+	 * Title: processDialogTerminated
+	 * </p>
+	 * <p>
+	 * Description:
+	 * </p>
+	 * 
+	 * @param dialogTerminatedEvent
+	 */
+	@Override
+	public void processDialogTerminated(DialogTerminatedEvent dialogTerminatedEvent) {
+		// TODO Auto-generated method stub
+
+	}
+
+	public ServerTransaction getServerTransaction(RequestEvent evt) {
+		Request request = evt.getRequest();
+		ServerTransaction serverTransaction = evt.getServerTransaction();
+		// 鍒ゆ柇TCP杩樻槸UDP
+		boolean isTcp = false;
+		ViaHeader reqViaHeader = (ViaHeader) request.getHeader(ViaHeader.NAME);
+		String transport = reqViaHeader.getTransport();
+		if (transport.equals("TCP")) {
+			isTcp = true;
+		}
+
+		if (serverTransaction == null) {
+			try {
+				if (isTcp) {
+					serverTransaction = tcpSipProvider.getNewServerTransaction(request);
+				} else {
+					serverTransaction = udpSipProvider.getNewServerTransaction(request);
+				}
+			} catch (TransactionAlreadyExistsException e) {
+				e.printStackTrace();
+			} catch (TransactionUnavailableException e) {
+				e.printStackTrace();
+			}
+		}
+		return serverTransaction;
+	}
+
+	public AddressFactory getAddressFactory() {
+		return addressFactory;
+	}
+
+	public HeaderFactory getHeaderFactory() {
+		return headerFactory;
+	}
+
+	public MessageFactory getMessageFactory() {
+		return messageFactory;
+	}
+
+	public SipProvider getTcpSipProvider() {
+		return tcpSipProvider;
+	}
+
+	public SipProvider getUdpSipProvider() {
+		return udpSipProvider;
+	}
+
+}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
index 6e4588d..5d5bf21 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/auth/RegisterLogicHandler.java
@@ -8,7 +8,7 @@
 
 /**    
  * @Description:娉ㄥ唽閫昏緫澶勭悊锛屽綋璁惧娉ㄥ唽鍚庤Е鍙戦�昏緫銆�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�8鏃� 涓嬪崍9:41:46     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java
index 8a88c94..2d2ca1e 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordInfo.java
@@ -4,7 +4,7 @@
 
 /**    
  * @Description:璁惧褰曞儚淇℃伅bean 
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�8鏃� 涓嬪崍2:05:56     
  */
 public class RecordInfo {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java
index fbcbf96..484c25e 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/bean/RecordItem.java
@@ -2,7 +2,7 @@
 
 /**    
  * @Description:璁惧褰曞儚bean 
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�8鏃� 涓嬪崍2:06:54     
  */
 public class RecordItem {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java
index 60998ea..437e7de 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/DeviceOffLineDetector.java
@@ -8,7 +8,7 @@
 
 /**    
  * @Description:璁惧绂诲湪绾跨姸鎬佹娴嬪櫒锛岀敤浜庢娴嬭澶囩姸鎬�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�13鏃� 涓嬪崍2:40:29     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
index ebf0430..c6f5d44 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/EventPublisher.java
@@ -9,7 +9,7 @@
 
 /**    
  * @Description:Event浜嬩欢閫氱煡鎺ㄩ�佸櫒锛屾敮鎸佹帹閫佸湪绾夸簨浠躲�佺绾夸簨浠�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓婂崍11:30:50     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
index 4b5e571..9f53d64 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/KeepliveTimeoutListener.java
@@ -11,7 +11,7 @@
 
 /**    
  * @Description:璁惧蹇冭烦瓒呮椂鐩戝惉,鍊熷姪redis杩囨湡鐗规�э紝杩涜鐩戝惉锛岀洃鍚埌璇存槑璁惧蹇冭烦瓒呮椂锛屽彂閫佺绾夸簨浠�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓婂崍11:35:46     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java
index 5553106..d2f612a 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEvent.java
@@ -4,7 +4,7 @@
 
 /**    
  * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤)   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓婂崍11:33:13     
  */
 public class OfflineEvent extends ApplicationEvent {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
index 3eeebef..faa89fa 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/offline/OfflineEventListener.java
@@ -14,7 +14,7 @@
  * @Description: 绂荤嚎浜嬩欢鐩戝惉鍣紝鐩戝惉鍒扮绾垮悗锛屼慨鏀硅澶囩鍦ㄧ嚎鐘舵�併�� 璁惧绂荤嚎鏈変袱涓潵婧愶細
  *               1銆佽澶囦富鍔ㄦ敞閿�锛屽彂閫佹敞閿�鎸囦护锛寋@link com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor}
  *               2銆佽澶囨湭鐭ュ師鍥犵绾匡紝蹇冭烦瓒呮椂,{@link com.genersoft.iot.vmp.gb28181.event.offline.OfflineEventListener}
- * @author: swwheihei
+ * @author: songww
  * @date: 2020骞�5鏈�6鏃� 涓嬪崍1:51:23
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
index 86eddc1..afc6751 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEvent.java
@@ -4,7 +4,7 @@
 
 /**    
  * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤)   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓婂崍11:32:56     
  */
 public class OnlineEvent extends ApplicationEvent {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
index ec7ff88..4f8d6ab 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/event/online/OnlineEventListener.java
@@ -14,7 +14,7 @@
  * @Description: 鍦ㄧ嚎浜嬩欢鐩戝惉鍣紝鐩戝惉鍒扮绾垮悗锛屼慨鏀硅澶囩鍦ㄧ嚎鐘舵�併�� 璁惧鍦ㄧ嚎鏈変袱涓潵婧愶細
  *               1銆佽澶囦富鍔ㄦ敞閿�锛屽彂閫佹敞閿�鎸囦护锛寋@link com.genersoft.iot.vmp.gb28181.transmit.request.impl.RegisterRequestProcessor}
  *               2銆佽澶囨湭鐭ュ師鍥犵绾匡紝蹇冭烦瓒呮椂,{@link com.genersoft.iot.vmp.gb28181.transmit.request.impl.MessageRequestProcessor}
- * @author: swwheihei
+ * @author: songww
  * @date: 2020骞�5鏈�6鏃� 涓嬪崍1:51:23
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java
index b0fb561..d524fb0 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java
@@ -9,7 +9,7 @@
 
 /**
  * @Description:SIP淇′护涓殑SSRC宸ュ叿绫汇�係SRC鍊肩敱10浣嶅崄杩涘埗鏁存暟缁勬垚鐨勫瓧绗︿覆锛岀涓�浣嶄负0浠h〃瀹炲喌锛屼负1鍒欎唬琛ㄥ洖鏀撅紱绗簩浣嶈嚦绗叚浣嶇敱鐩戞帶鍩烮D鐨勭4浣嶅埌绗�8浣嶇粍鎴愶紱鏈�鍚�4浣嶄负涓嶉噸澶嶇殑4涓暣鏁�
- * @author: swwheihei
+ * @author: songww
  * @date: 2020骞�5鏈�10鏃� 涓婂崍11:57:57
  */
 public class SsrcUtil {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
index 4a4a538..f8b9350 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
@@ -8,7 +8,7 @@
 
 /**    
  * @Description:瑙嗛娴乻ession绠$悊鍣紝绠$悊瑙嗛棰勮銆侀瑙堝洖鏀剧殑閫氫俊鍙ユ焺 
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�13鏃� 涓嬪崍4:03:02     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
index a211b6e..b809696 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorFactory.java
@@ -26,7 +26,7 @@
 
 /**    
  * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤)   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍4:24:37     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
index 7c5cbc1..f9c8d25 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤)   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�8鏃� 涓嬪崍7:59:05     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java
index fcf7e7a..ac95f75 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/RequestMessage.java
@@ -2,7 +2,7 @@
 
 /**    
  * @Description:TODO(杩欓噷鐢ㄤ竴鍙ヨ瘽鎻忚堪杩欎釜绫荤殑浣滅敤)   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�8鏃� 涓嬪崍1:09:18     
  */
 public class RequestMessage {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
index db93230..8b190d5 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
@@ -4,7 +4,7 @@
 
 /**    
  * @Description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔�   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍9:16:34     
  */
 public interface ISIPCommander {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
index 3270c57..7a95268 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -25,7 +25,7 @@
 
 /**
  * @Description:鎽勫儚澶村懡浠equest鍒涢�犲櫒 TODO 鍐椾綑浠g爜澶寰呬紭鍖�
- * @author: swwheihei
+ * @author: songww
  * @date: 2020骞�5鏈�6鏃� 涓婂崍9:29:02
  */
 @Component
@@ -79,7 +79,8 @@
 		SipURI requestLine = layer.getAddressFactory().createSipURI(channelId, host.getAddress());
 		//via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = layer.getHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		// ViaHeader viaHeader = layer.getHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		ViaHeader viaHeader = layer.getHeaderFactory().createViaHeader(device.getHost().getIp(), device.getHost().getPort(), device.getTransport(), viaTag);
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 		//from
@@ -108,6 +109,7 @@
 		request = layer.getMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
 		
 		Address concatAddress = layer.getAddressFactory().createAddress(layer.getAddressFactory().createSipURI(sipConfig.getSipId(), sipConfig.getSipIp()+":"+sipConfig.getSipPort()));
+		// Address concatAddress = layer.getAddressFactory().createAddress(layer.getAddressFactory().createSipURI(sipConfig.getSipId(), device.getHost().getIp()+":"+device.getHost().getPort()));
 		request.addHeader(layer.getHeaderFactory().createContactHeader(concatAddress));
 		
 		ContentTypeHeader contentTypeHeader = layer.getHeaderFactory().createContentTypeHeader("Application", "SDP");
@@ -122,7 +124,8 @@
 		SipURI requestLine = layer.getAddressFactory().createSipURI(device.getDeviceId(), host.getAddress());
 		//via
 		ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
-		ViaHeader viaHeader = layer.getHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		// ViaHeader viaHeader = layer.getHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
+		ViaHeader viaHeader = layer.getHeaderFactory().createViaHeader(device.getHost().getIp(), device.getHost().getPort(), device.getTransport(), viaTag);
 		viaHeader.setRPort();
 		viaHeaders.add(viaHeader);
 		//from
@@ -151,6 +154,7 @@
 		request = layer.getMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
 		
 		Address concatAddress = layer.getAddressFactory().createAddress(layer.getAddressFactory().createSipURI(sipConfig.getSipId(), sipConfig.getSipIp()+":"+sipConfig.getSipPort()));
+		// Address concatAddress = layer.getAddressFactory().createAddress(layer.getAddressFactory().createSipURI(sipConfig.getSipId(), device.getHost().getIp()+":"+device.getHost().getPort()));
 		request.addHeader(layer.getHeaderFactory().createContactHeader(concatAddress));
 		
 		ContentTypeHeader contentTypeHeader = layer.getHeaderFactory().createContentTypeHeader("Application", "SDP");
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 5c13162..96618d0 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
@@ -7,10 +7,13 @@
 import javax.sip.InvalidArgumentException;
 import javax.sip.SipException;
 import javax.sip.TransactionDoesNotExistException;
+import javax.sip.address.Address;
+import javax.sip.address.SipURI;
 import javax.sip.header.ViaHeader;
 import javax.sip.message.Request;
 
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.security.SecurityProperties.Headers;
 import org.springframework.stereotype.Component;
 
 import com.genersoft.iot.vmp.conf.SipConfig;
@@ -21,9 +24,12 @@
 import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
 import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
 
+import java.util.regex.Pattern;
+import java.util.regex.Matcher;
+
 /**    
  * @Description:璁惧鑳藉姏鎺ュ彛锛岀敤浜庡畾涔夎澶囩殑鎺у埗銆佹煡璇㈣兘鍔�   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍9:22:48     
  */
 @Component
@@ -94,6 +100,49 @@
 		return ptzCmd(device, channelId, 0, 0, inOut, 0, zoomSpeed);
 	}
   
+   /**
+	* 浜戝彴鎸囦护鐮佽绠� 
+	*
+    * @param leftRight  闀滃ご宸︾Щ鍙崇Щ 0:鍋滄 1:宸︾Щ 2:鍙崇Щ
+    * @param upDown     闀滃ご涓婄Щ涓嬬Щ 0:鍋滄 1:涓婄Щ 2:涓嬬Щ
+    * @param inOut      闀滃ご鏀惧ぇ缂╁皬 0:鍋滄 1:缂╁皬 2:鏀惧ぇ
+    * @param moveSpeed  闀滃ご绉诲姩閫熷害 榛樿 0XFF (0-255)
+    * @param zoomSpeed  闀滃ご缂╂斁閫熷害 榛樿 0X1 (0-255)
+    */
+    public static String cmdString(int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed) {
+		int cmdCode = 0;
+		if (leftRight == 2) {
+			cmdCode|=0x01;		// 鍙崇Щ
+		} else if(leftRight == 1) {
+			cmdCode|=0x02;		// 宸︾Щ
+		}
+		if (upDown == 2) {
+			cmdCode|=0x04;		// 涓嬬Щ
+		} else if(upDown == 1) {
+			cmdCode|=0x08;		// 涓婄Щ
+		}
+		if (inOut == 2) {
+			cmdCode |= 0x10;	// 鏀惧ぇ
+		} else if(inOut == 1) {
+			cmdCode |= 0x20;	// 缂╁皬
+		}
+		StringBuilder builder = new StringBuilder("A50F01");
+		String strTmp;
+		strTmp = String.format("%02X", cmdCode);
+		builder.append(strTmp, 0, 2);
+		strTmp = String.format("%02X", moveSpeed);
+		builder.append(strTmp, 0, 2);
+		builder.append(strTmp, 0, 2);
+		strTmp = String.format("%X", zoomSpeed);
+		builder.append(strTmp, 0, 1).append("0");
+		//璁$畻鏍¢獙鐮�
+		int checkCode = (0XA5 + 0X0F + 0X01 + cmdCode + moveSpeed + moveSpeed + (zoomSpeed /*<< 4*/ & 0XF0)) % 0X100;
+		strTmp = String.format("%02X", checkCode);
+		builder.append(strTmp, 0, 2);
+		return builder.toString();
+}
+
+
 	/**
 	 * 浜戝彴鎺у埗锛屾敮鎸佹柟鍚戜笌缂╂斁鎺у埗
 	 * 
@@ -109,13 +158,14 @@
 	public boolean ptzCmd(Device device, String channelId, int leftRight, int upDown, int inOut, int moveSpeed,
 			int zoomSpeed) {
 		try {
+			String cmdStr= cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed);
 			StringBuffer ptzXml = new StringBuffer(200);
 			ptzXml.append("<?xml version=\"1.0\" ?>");
 			ptzXml.append("<Control>");
 			ptzXml.append("<CmdType>DeviceControl</CmdType>");
 			ptzXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>");
 			ptzXml.append("<DeviceID>" + channelId + "</DeviceID>");
-			ptzXml.append("<PTZCmd>" + "</PTZCmd>");
+			ptzXml.append("<PTZCmd>" + cmdStr + "</PTZCmd>");
 			ptzXml.append("<Info>");
 			ptzXml.append("</Info>");
 			ptzXml.append("</Control>");
@@ -123,7 +173,6 @@
 			Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "ViaPtzBranch", "FromPtzTag", "ToPtzTag");
 			
 			transmitRequest(device, request);
-			
 			return true;
 		} catch (SipException | ParseException | InvalidArgumentException e) {
 			e.printStackTrace();
@@ -245,6 +294,13 @@
 				return;
 			}
 			Request byeRequest = dialog.createRequest(Request.BYE);
+			SipURI byeURI = (SipURI) byeRequest.getRequestURI();
+			String vh = transaction.getRequest().getHeader(ViaHeader.NAME).toString();
+			Pattern p = Pattern.compile("(\\d+\\.\\d+\\.\\d+\\.\\d+)\\:(\\d+)");
+			Matcher matcher = p.matcher(vh);
+			if (matcher.find()) {
+				byeURI.setHost(matcher.group(1));
+			}
 			ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME);
 			String protocol = viaHeader.getTransport().toUpperCase();
 			ClientTransaction clientTransaction = null;
@@ -258,6 +314,8 @@
 			e.printStackTrace();
 		} catch (SipException e) {
 			e.printStackTrace();
+		} catch (ParseException e) {
+			e.printStackTrace();
 		}
 	}
 
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java
index 8b8475c..53e0ed0 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/ISIPRequestProcessor.java
@@ -6,7 +6,7 @@
 
 /**    
  * @Description:澶勭悊鎺ユ敹IPCamera鍙戞潵鐨凷IP鍗忚璇锋眰娑堟伅
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍4:42:22     
  */
 public interface ISIPRequestProcessor {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java
index 44457e8..7a5b25d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java
@@ -16,7 +16,7 @@
 
 /**    
  * @Description:ACK璇锋眰澶勭悊鍣�  
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:31:45     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
index 0c17364..716f482 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/ByeRequestProcessor.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description: BYE璇锋眰澶勭悊鍣�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:32:05     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java
index 7b6cc31..d463af4 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/CancelRequestProcessor.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description:CANCEL璇锋眰澶勭悊鍣�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:32:23     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
index d3d94ee..0de32c9 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/InviteRequestProcessor.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description:澶勭悊INVITE璇锋眰
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍4:43:52     
  */
 @Component
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 30d53bf..f5c3c8b 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
@@ -43,7 +43,7 @@
 
 /**    
  * @Description:MESSAGE璇锋眰澶勭悊鍣�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:32:41     
  */
 @Component
@@ -100,6 +100,7 @@
 		
 		Request request = evt.getRequest();
 		SAXReader reader = new SAXReader();
+		reader.setEncoding("gbk");
 		Document xml;
 		try {
 			xml = reader.read(new ByteArrayInputStream(request.getRawContent()));
@@ -375,7 +376,7 @@
 	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();
 	}
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java
index b27c032..e516767 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/OtherRequestProcessor.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description:鏆備笉鏀寔鐨勬秷鎭姹傚鐞嗗櫒
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:32:59     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
index 7f07406..ca1ba5d 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/RegisterRequestProcessor.java
@@ -38,7 +38,7 @@
 
 /**    
  * @Description:鏀跺埌娉ㄥ唽璇锋眰 澶勭悊 
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍4:47:25     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java
index b2f1008..b0c05a8 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/SubscribeRequestProcessor.java
@@ -17,7 +17,7 @@
 
 /**    
  * @Description:SUBSCRIBE璇锋眰澶勭悊鍣�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:31:20     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/ISIPResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/ISIPResponseProcessor.java
index afa1057..458158b 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/ISIPResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/ISIPResponseProcessor.java
@@ -1,5 +1,7 @@
 package com.genersoft.iot.vmp.gb28181.transmit.response;
 
+import java.text.ParseException;
+
 import javax.sip.ResponseEvent;
 
 import com.genersoft.iot.vmp.conf.SipConfig;
@@ -7,11 +9,11 @@
 
 /**    
  * @Description:澶勭悊鎺ユ敹IPCamera鍙戞潵鐨凷IP鍗忚鍝嶅簲娑堟伅
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍4:42:22     
  */
 public interface ISIPResponseProcessor {
 
-	public void process(ResponseEvent evt, SipLayer layer, SipConfig config);
+	public void process(ResponseEvent evt, SipLayer layer, SipConfig config) throws ParseException;
 
 }
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/ByeResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/ByeResponseProcessor.java
index 53bc8f7..2efa139 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/ByeResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/ByeResponseProcessor.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description: BYE璇锋眰鍝嶅簲鍣�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:32:05     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/CancelResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/CancelResponseProcessor.java
index c6fd9b3..1ce6f43 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/CancelResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/CancelResponseProcessor.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description:CANCEL鍝嶅簲澶勭悊鍣�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:32:23     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java
index 9bc67d2..669b360 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java
@@ -2,7 +2,6 @@
 
 import java.text.ParseException;
 
-import javax.sip.ClientTransaction;
 import javax.sip.Dialog;
 import javax.sip.InvalidArgumentException;
 import javax.sip.ResponseEvent;
@@ -22,57 +21,76 @@
 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorFactory;
 import com.genersoft.iot.vmp.gb28181.transmit.response.ISIPResponseProcessor;
 
-/**    
- * @Description:澶勭悊INVITE鍝嶅簲
- * @author: swwheihei
- * @date:   2020骞�5鏈�3鏃� 涓嬪崍4:43:52     
+
+/**
+ * @Description:澶勭悊INVITE鍝嶅簲
+ * @author: songww
+ * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:43:52
  */
 @Component
 public class InviteResponseProcessor implements ISIPResponseProcessor {
 
 	private final static Logger logger = LoggerFactory.getLogger(SIPProcessorFactory.class);
-	
+
 	/**
 	 * 澶勭悊invite鍝嶅簲
 	 * 
-	 * @param evt
-	 *            鍝嶅簲娑堟伅
-	 */ 
+	 * @param evt 鍝嶅簲娑堟伅
+	 * @throws ParseException
+	 */
 	@Override
-	public void process(ResponseEvent evt, SipLayer layer, SipConfig config) {
+	public void process(ResponseEvent evt, SipLayer layer, SipConfig config) throws ParseException {
 		try {
 			Response response = evt.getResponse();
 			int statusCode = response.getStatusCode();
-			//trying涓嶄細鍥炲
-			if(statusCode == Response.TRYING){
-
+			// trying涓嶄細鍥炲
+			if (statusCode == Response.TRYING) {
 			}
-			//鎴愬姛鍝嶅簲
-			//涓嬪彂ack
-			if(statusCode == Response.OK){
-//				ClientTransaction clientTransaction = evt.getClientTransaction();
-//				if(clientTransaction == null){
-//					logger.error("鍥炲ACK鏃讹紝clientTransaction涓簄ull >>> {}",response);
-//					return;
-//				}
-//				Dialog clientDialog = clientTransaction.getDialog();
-//
-//				CSeqHeader clientCSeqHeader = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
-//				long cseqId = clientCSeqHeader.getSeqNumber();
-//				/*
-//				createAck鍑芥暟锛屽垱寤虹殑ackRequest锛屼細閲囩敤Invite鍝嶅簲鐨�200OK锛屼腑鐨刢ontact瀛楁涓殑鍦板潃锛屼綔涓虹洰鏍囧湴鍧�銆�
-//				鏈夌殑缁堢浼犱笂鏉ョ殑鍙兘杩樻槸鍐呯綉鍦板潃锛屼細閫犳垚ack鍙戦�佷笉鍑哄幓銆傛帴鍙椾笉鍒伴煶瑙嗛娴�
-//				鎵�浠ュ湪姝ゅ缁熶竴鏇挎崲鍦板潃銆傚拰鍝嶅簲娑堟伅鐨刅ia澶翠腑鐨勫湴鍧�淇濇寔涓�鑷淬��
-//				 */
-//				Request ackRequest = clientDialog.createAck(cseqId);
-//				SipURI requestURI = (SipURI) ackRequest.getRequestURI();
-//				ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME);
-//				requestURI.setHost(viaHeader.getHost());
-//				requestURI.setPort(viaHeader.getPort());
-//				clientDialog.sendAck(ackRequest);
-				
+			// 鎴愬姛鍝嶅簲
+			// 涓嬪彂ack
+			if (statusCode == Response.OK) {
+				// ClientTransaction clientTransaction = evt.getClientTransaction();
+				// if(clientTransaction == null){
+				// logger.error("鍥炲ACK鏃讹紝clientTransaction涓簄ull >>> {}",response);
+				// return;
+				// }
+				// Dialog clientDialog = clientTransaction.getDialog();
+
+				// CSeqHeader clientCSeqHeader = (CSeqHeader)
+				// response.getHeader(CSeqHeader.NAME);
+				// long cseqId = clientCSeqHeader.getSeqNumber();
+				// /*
+				// createAck鍑芥暟锛屽垱寤虹殑ackRequest锛屼細閲囩敤Invite鍝嶅簲鐨�200OK锛屼腑鐨刢ontact瀛楁涓殑鍦板潃锛屼綔涓虹洰鏍囧湴鍧�銆�
+				// 鏈夌殑缁堢浼犱笂鏉ョ殑鍙兘杩樻槸鍐呯綉鍦板潃锛屼細閫犳垚ack鍙戦�佷笉鍑哄幓銆傛帴鍙椾笉鍒伴煶瑙嗛娴�
+				// 鎵�浠ュ湪姝ゅ缁熶竴鏇挎崲鍦板潃銆傚拰鍝嶅簲娑堟伅鐨刅ia澶翠腑鐨勫湴鍧�淇濇寔涓�鑷淬��
+				// */
+				// Request ackRequest = clientDialog.createAck(cseqId);
+				// SipURI requestURI = (SipURI) ackRequest.getRequestURI();
+				// ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME);
+				// try {
+				// requestURI.setHost(viaHeader.getHost());
+				// } catch (Exception e) {
+				// e.printStackTrace();
+				// }
+				// requestURI.setPort(viaHeader.getPort());
+				// clientDialog.sendAck(ackRequest);
+
 				Dialog dialog = evt.getDialog();
-				Request reqAck =dialog.createAck(1L);
+				CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
+				Request reqAck = dialog.createAck(cseq.getSeqNumber());
+
+				SipURI requestURI = (SipURI) reqAck.getRequestURI();
+				ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME);
+				// String viaHost =viaHeader.getHost();
+				//getHost()鍑芥暟鍙栧洖鐨処P鍦板潃鏄�淸xxx.xxx.xxx.xxx:yyyy]鈥濈殑鏍煎紡锛岄渶鐢ㄦ鍒欒〃杈惧紡鎴彇涓衡�渪xx.xxx.xxx.xxx"鏍煎紡
+				// Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+");
+				// Matcher matcher = p.matcher(viaHeader.getHost());
+				// if (matcher.find()) {
+				// 	requestURI.setHost(matcher.group());
+				// }
+				requestURI.setHost(viaHeader.getHost());
+				requestURI.setPort(viaHeader.getPort());
+				reqAck.setRequestURI(requestURI);
 				dialog.sendAck(reqAck);
 			}
 		} catch (InvalidArgumentException | SipException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/OtherResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/OtherResponseProcessor.java
index 1631440..a0a6fa4 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/OtherResponseProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/OtherResponseProcessor.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description:鏆備笉鏀寔鐨勬秷鎭搷搴斿鐞嗗櫒
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�3鏃� 涓嬪崍5:32:59     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java
index 195b7e3..fb22948 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/DateUtil.java
@@ -7,7 +7,7 @@
 
 /**    
  * @Description:鏃堕棿宸ュ叿绫伙紝涓昏澶勭悊ISO 8601鏍煎紡杞崲
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�8鏃� 涓嬪崍3:24:42     
  */
 public class DateUtil {
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 288ac36..25f000b 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
@@ -18,11 +18,11 @@
 
 /**    
  * @Description:閽堝 ZLMediaServer鐨刪ook浜嬩欢鐩戝惉
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�8鏃� 涓婂崍10:46:48     
  */
 @RestController
-@RequestMapping("/hook/zlm")
+@RequestMapping("/index/hook")
 public class ZLMHttpHookListener {
 
 	private final static Logger logger = LoggerFactory.getLogger(ZLMHttpHookListener.class);
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 47aa362..d9e40e5 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/IVideoManagerStorager.java
@@ -6,7 +6,7 @@
 
 /**    
  * @Description:瑙嗛璁惧鏁版嵁瀛樺偍鎺ュ彛
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓嬪崍2:14:31     
  */
 public interface IVideoManagerStorager {
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/VideoManagerStoragerFactory.java b/src/main/java/com/genersoft/iot/vmp/storager/VideoManagerStoragerFactory.java
index 70bdad7..282c3e5 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/VideoManagerStoragerFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/VideoManagerStoragerFactory.java
@@ -8,7 +8,7 @@
 
 /**    
  * @Description:瑙嗛璁惧鏁版嵁瀛樺偍宸ュ巶锛屾牴鎹瓨鍌ㄧ瓥鐣ワ紝杩斿洖瀵瑰簲鐨勫瓨鍌ㄥ櫒
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓嬪崍2:15:16     
  */
 @Component
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
index 59ecba0..8adc73c 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/jdbc/VideoManagerJdbcStoragerImpl.java
@@ -11,7 +11,7 @@
 
 /**    
  * @Description:瑙嗛璁惧鏁版嵁瀛樺偍-jdbc瀹炵幇  
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓嬪崍2:28:12     
  */
 @Component("jdbcStorager")
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
index d6e4603..54fa692 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/redis/VideoManagerRedisStoragerImpl.java
@@ -13,7 +13,7 @@
 
 /**    
  * @Description:瑙嗛璁惧鏁版嵁瀛樺偍-redis瀹炵幇  
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓嬪崍2:31:42     
  */
 @Component("redisStorager")
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java b/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java
index 3fe7dcc..273f5fb 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/SpringBeanFactory.java
@@ -7,7 +7,7 @@
 
 /**    
  * @Description:spring bean鑾峰彇宸ュ巶锛岃幏鍙杝pring涓殑宸插垵濮嬪寲鐨刡ean
- * @author: swwheihei
+ * @author: songww
  * @date:   2019骞�6鏈�25鏃� 涓嬪崍4:51:52   
  * 
  */
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
index 411f962..590296a 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/FastJsonRedisSerializer.java
@@ -10,7 +10,7 @@
 
 /**    
  * @Description:浣跨敤fastjson瀹炵幇redis鐨勫簭鍒楀寲   
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓嬪崍8:40:11     
  */
 public class FastJsonRedisSerializer<T> implements RedisSerializer<T> {
diff --git a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
index f1d1673..a03f9aa 100644
--- a/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
+++ b/src/main/java/com/genersoft/iot/vmp/utils/redis/RedisUtil.java
@@ -13,7 +13,7 @@
 
 /**    
  * @Description:Redis宸ュ叿绫�
- * @author: swwheihei
+ * @author: songww
  * @date:   2020骞�5鏈�6鏃� 涓嬪崍8:27:29     
  */
 @Component
diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml
index bec0e00..7e6bc40 100644
--- a/src/main/resources/application.yml
+++ b/src/main/resources/application.yml
@@ -26,7 +26,8 @@
 server:
     port: 8080
 sip:
-    ip: 10.200.64.63
+#   ip: 10.200.64.63
+    ip: 192.168.0.102
     port: 5060
     # 鏍规嵁鍥芥爣6.1.2涓瀹氾紝domain瀹滈噰鐢↖D缁熶竴缂栫爜鐨勫墠鍗佷綅缂栫爜銆傚浗鏍囬檮褰旸涓畾涔夊墠8浣嶄负涓績缂栫爜锛堢敱鐪佺骇銆佸競绾с�佸尯绾с�佸熀灞傜紪鍙风粍鎴愶紝鍙傜収GB/T 2260-2007锛�
     # 鍚庝袱浣嶄负琛屼笟缂栫爜锛屽畾涔夊弬鐓ч檮褰旸.3
@@ -34,7 +35,8 @@
     domain: 3701020049
     id: 37010200492000000001
     # 榛樿璁惧璁よ瘉瀵嗙爜锛屽悗缁墿灞曚娇鐢ㄨ澶囧崟鐙瘑鐮�
-    password: admin
+    password: admin123
 media:
-    ip: 10.200.64.88
+#   ip: 10.200.64.88
+    ip: 192.168.0.102
     port: 10000
\ No newline at end of file
diff --git "a/wikis/images/\346\240\270\345\277\203\346\265\201\347\250\213.png" "b/wikis/images/\346\240\270\345\277\203\346\265\201\347\250\213.png"
index 34eeeee..3d9f207 100644
--- "a/wikis/images/\346\240\270\345\277\203\346\265\201\347\250\213.png"
+++ "b/wikis/images/\346\240\270\345\277\203\346\265\201\347\250\213.png"
Binary files differ

--
Gitblit v1.8.0