Commit 23710f1c649354fb21317dd710a4b2ec53688a44

Authored by 648540858
1 parent d340a37a

优化多网卡下的localIp获取

src/main/java/com/genersoft/iot/vmp/common/StreamInfo.java
@@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema; @@ -5,7 +5,7 @@ import io.swagger.v3.oas.annotations.media.Schema;
5 import java.io.Serializable; 5 import java.io.Serializable;
6 6
7 @Schema(description = "流信息") 7 @Schema(description = "流信息")
8 -public class StreamInfo implements Serializable { 8 +public class StreamInfo implements Serializable, Cloneable{
9 9
10 @Schema(description = "应用名") 10 @Schema(description = "应用名")
11 private String app; 11 private String app;
@@ -463,4 +463,15 @@ public class StreamInfo implements Serializable { @@ -463,4 +463,15 @@ public class StreamInfo implements Serializable {
463 public void setTransactionInfo(TransactionInfo transactionInfo) { 463 public void setTransactionInfo(TransactionInfo transactionInfo) {
464 this.transactionInfo = transactionInfo; 464 this.transactionInfo = transactionInfo;
465 } 465 }
  466 +
  467 + @Override
  468 + public StreamInfo clone() {
  469 + StreamInfo instance = null;
  470 + try{
  471 + instance = (StreamInfo)super.clone();
  472 + }catch(CloneNotSupportedException e) {
  473 + e.printStackTrace();
  474 + }
  475 + return instance;
  476 + }
466 } 477 }
src/main/java/com/genersoft/iot/vmp/conf/SipConfig.java
@@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.conf; @@ -3,6 +3,7 @@ package com.genersoft.iot.vmp.conf;
3 3
4 import org.springframework.boot.context.properties.ConfigurationProperties; 4 import org.springframework.boot.context.properties.ConfigurationProperties;
5 import org.springframework.stereotype.Component; 5 import org.springframework.stereotype.Component;
  6 +import org.springframework.util.ObjectUtils;
6 7
7 @Component 8 @Component
8 @ConfigurationProperties(prefix = "sip", ignoreInvalidFields = true) 9 @ConfigurationProperties(prefix = "sip", ignoreInvalidFields = true)
@@ -92,4 +93,10 @@ public class SipConfig { @@ -92,4 +93,10 @@ public class SipConfig {
92 public void setAlarm(boolean alarm) { 93 public void setAlarm(boolean alarm) {
93 this.alarm = alarm; 94 this.alarm = alarm;
94 } 95 }
  96 +
  97 + public void getLocalIp(String deviceLocalIp) {
  98 + if (ObjectUtils.isEmpty(deviceLocalIp)) {
  99 +
  100 + }
  101 + }
95 } 102 }
src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java
@@ -72,6 +72,7 @@ public class SipLayer implements CommandLineRunner { @@ -72,6 +72,7 @@ public class SipLayer implements CommandLineRunner {
72 try { 72 try {
73 ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(monitorIp, port, "TCP"); 73 ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(monitorIp, port, "TCP");
74 SipProviderImpl tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint); 74 SipProviderImpl tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint);
  75 +
75 tcpSipProvider.setDialogErrorsAutomaticallyHandled(); 76 tcpSipProvider.setDialogErrorsAutomaticallyHandled();
76 tcpSipProvider.addSipListener(sipProcessorObserver); 77 tcpSipProvider.addSipListener(sipProcessorObserver);
77 tcpSipProviderMap.put(monitorIp, tcpSipProvider); 78 tcpSipProviderMap.put(monitorIp, tcpSipProvider);
@@ -134,4 +135,11 @@ public class SipLayer implements CommandLineRunner { @@ -134,4 +135,11 @@ public class SipLayer implements CommandLineRunner {
134 } 135 }
135 return tcpSipProviderMap.get(ip); 136 return tcpSipProviderMap.get(ip);
136 } 137 }
  138 +
  139 + public String getLocalIp(String deviceLocalIp) {
  140 + if (!ObjectUtils.isEmpty(deviceLocalIp)) {
  141 + return deviceLocalIp;
  142 + }
  143 + return getUdpSipProvider().getListeningPoint().getIPAddress();
  144 + }
137 } 145 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPSender.java
@@ -106,11 +106,27 @@ public class SIPSender { @@ -106,11 +106,27 @@ public class SIPSender {
106 } 106 }
107 107
108 public CallIdHeader getNewCallIdHeader(String ip, String transport){ 108 public CallIdHeader getNewCallIdHeader(String ip, String transport){
109 - if (ObjectUtils.isEmpty(ip) || ObjectUtils.isEmpty(transport)) {  
110 - return transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider().getNewCallId()  
111 - : sipLayer.getUdpSipProvider().getNewCallId(); 109 + if (ObjectUtils.isEmpty(transport)) {
  110 + return sipLayer.getUdpSipProvider().getNewCallId();
  111 + }
  112 + SipProviderImpl sipProvider;
  113 + if (ObjectUtils.isEmpty(ip)) {
  114 + sipProvider = transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider()
  115 + : sipLayer.getUdpSipProvider();
  116 + }else {
  117 + sipProvider = transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider(ip)
  118 + : sipLayer.getUdpSipProvider(ip);
  119 + }
  120 +
  121 + if (sipProvider == null) {
  122 + sipProvider = sipLayer.getUdpSipProvider();
  123 + }
  124 +
  125 + if (sipProvider != null) {
  126 + return sipProvider.getNewCallId();
  127 + }else {
  128 + logger.warn("[新建CallIdHeader失败], ip={}, transport={}", ip, transport);
  129 + return null;
112 } 130 }
113 - return transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider(ip).getNewCallId()  
114 - : sipLayer.getUdpSipProvider(ip).getNewCallId();  
115 } 131 }
116 } 132 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/callback/DeferredResultHolder.java
1 package com.genersoft.iot.vmp.gb28181.transmit.callback; 1 package com.genersoft.iot.vmp.gb28181.transmit.callback;
2 2
3 -import com.alibaba.fastjson2.JSON;  
4 import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx; 3 import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
5 import org.springframework.stereotype.Component; 4 import org.springframework.stereotype.Component;
6 import org.springframework.util.ObjectUtils; 5 import org.springframework.util.ObjectUtils;
@@ -130,23 +129,26 @@ public class DeferredResultHolder { @@ -130,23 +129,26 @@ public class DeferredResultHolder {
130 if (deferredResultMap == null) { 129 if (deferredResultMap == null) {
131 return; 130 return;
132 } 131 }
133 - Set<String> ids = deferredResultMap.keySet();  
134 - for (String id : ids) {  
135 - DeferredResultEx result = deferredResultMap.get(id);  
136 - if (result == null) { 132 + synchronized (this) {
  133 + deferredResultMap = map.get(msg.getKey());
  134 + if (deferredResultMap == null) {
137 return; 135 return;
138 } 136 }
139 - if (result.getFilter() != null) {  
140 - Object handler = result.getFilter().handler(msg.getData());  
141 - System.out.println(JSON.toJSONString(handler));  
142 - result.getDeferredResult().setResult(handler);  
143 - }else {  
144 - result.getDeferredResult().setResult(msg.getData());  
145 - } 137 + Set<String> ids = deferredResultMap.keySet();
  138 + for (String id : ids) {
  139 + DeferredResultEx result = deferredResultMap.get(id);
  140 + if (result == null) {
  141 + return;
  142 + }
  143 + if (result.getFilter() != null) {
  144 + Object handler = result.getFilter().handler(msg.getData());
  145 + result.getDeferredResult().setResult(handler);
  146 + }else {
  147 + result.getDeferredResult().setResult(msg.getData());
  148 + }
146 149
  150 + }
  151 + map.remove(msg.getKey());
147 } 152 }
148 - map.remove(msg.getKey());  
149 } 153 }
150 -  
151 -  
152 } 154 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
1 package com.genersoft.iot.vmp.gb28181.transmit.cmd; 1 package com.genersoft.iot.vmp.gb28181.transmit.cmd;
2 2
3 -import java.text.ParseException;  
4 -import java.util.ArrayList;  
5 -  
6 -import javax.sip.*;  
7 -import javax.sip.address.Address;  
8 -import javax.sip.address.SipURI;  
9 -import javax.sip.header.*;  
10 -import javax.sip.message.Request;  
11 - 3 +import com.genersoft.iot.vmp.conf.SipConfig;
12 import com.genersoft.iot.vmp.gb28181.SipLayer; 4 import com.genersoft.iot.vmp.gb28181.SipLayer;
  5 +import com.genersoft.iot.vmp.gb28181.bean.Device;
13 import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo; 6 import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
14 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; 7 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
15 import com.genersoft.iot.vmp.gb28181.utils.SipUtils; 8 import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
@@ -20,8 +13,15 @@ import gov.nist.javax.sip.message.SIPResponse; @@ -20,8 +13,15 @@ import gov.nist.javax.sip.message.SIPResponse;
20 import org.springframework.beans.factory.annotation.Autowired; 13 import org.springframework.beans.factory.annotation.Autowired;
21 import org.springframework.stereotype.Component; 14 import org.springframework.stereotype.Component;
22 15
23 -import com.genersoft.iot.vmp.conf.SipConfig;  
24 -import com.genersoft.iot.vmp.gb28181.bean.Device; 16 +import javax.sip.InvalidArgumentException;
  17 +import javax.sip.PeerUnavailableException;
  18 +import javax.sip.SipException;
  19 +import javax.sip.address.Address;
  20 +import javax.sip.address.SipURI;
  21 +import javax.sip.header.*;
  22 +import javax.sip.message.Request;
  23 +import java.text.ParseException;
  24 +import java.util.ArrayList;
25 25
26 /** 26 /**
27 * @description:摄像头命令request创造器 TODO 冗余代码太多待优化 27 * @description:摄像头命令request创造器 TODO 冗余代码太多待优化
@@ -52,7 +52,7 @@ public class SIPRequestHeaderProvider { @@ -52,7 +52,7 @@ public class SIPRequestHeaderProvider {
52 SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress()); 52 SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
53 // via 53 // via
54 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 54 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
55 - ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(device.getLocalIp(), sipConfig.getPort(), device.getTransport(), viaTag); 55 + ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), viaTag);
56 viaHeader.setRPort(); 56 viaHeader.setRPort();
57 viaHeaders.add(viaHeader); 57 viaHeaders.add(viaHeader);
58 // from 58 // from
@@ -85,7 +85,8 @@ public class SIPRequestHeaderProvider { @@ -85,7 +85,8 @@ public class SIPRequestHeaderProvider {
85 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress()); 85 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
86 //via 86 //via
87 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 87 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
88 - ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(device.getLocalIp(), sipConfig.getPort(), device.getTransport(), viaTag); 88 + HeaderFactory headerFactory = sipLayer.getSipFactory().createHeaderFactory();
  89 + ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), viaTag);
89 viaHeader.setRPort(); 90 viaHeader.setRPort();
90 viaHeaders.add(viaHeader); 91 viaHeaders.add(viaHeader);
91 92
@@ -107,7 +108,7 @@ public class SIPRequestHeaderProvider { @@ -107,7 +108,7 @@ public class SIPRequestHeaderProvider {
107 108
108 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil)); 109 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
109 110
110 - Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getLocalIp()+":"+sipConfig.getPort())); 111 + Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
111 // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort())); 112 // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
112 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress)); 113 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
113 // Subject 114 // Subject
@@ -124,7 +125,7 @@ public class SIPRequestHeaderProvider { @@ -124,7 +125,7 @@ public class SIPRequestHeaderProvider {
124 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress()); 125 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
125 // via 126 // via
126 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 127 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
127 - ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(device.getLocalIp(), sipConfig.getPort(), device.getTransport(), viaTag); 128 + ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), viaTag);
128 viaHeader.setRPort(); 129 viaHeader.setRPort();
129 viaHeaders.add(viaHeader); 130 viaHeaders.add(viaHeader);
130 //from 131 //from
@@ -143,7 +144,7 @@ public class SIPRequestHeaderProvider { @@ -143,7 +144,7 @@ public class SIPRequestHeaderProvider {
143 CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INVITE); 144 CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INVITE);
144 request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards); 145 request = sipLayer.getSipFactory().createMessageFactory().createRequest(requestLine, Request.INVITE, callIdHeader, cSeqHeader,fromHeader, toHeader, viaHeaders, maxForwards);
145 146
146 - Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getLocalIp()+":"+sipConfig.getPort())); 147 + Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
147 // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort())); 148 // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
148 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress)); 149 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
149 150
@@ -164,7 +165,7 @@ public class SIPRequestHeaderProvider { @@ -164,7 +165,7 @@ public class SIPRequestHeaderProvider {
164 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress()); 165 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
165 // via 166 // via
166 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 167 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
167 - ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(device.getLocalIp(), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag()); 168 + ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag());
168 viaHeaders.add(viaHeader); 169 viaHeaders.add(viaHeader);
169 //from 170 //from
170 SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain()); 171 SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
@@ -185,7 +186,7 @@ public class SIPRequestHeaderProvider { @@ -185,7 +186,7 @@ public class SIPRequestHeaderProvider {
185 186
186 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil)); 187 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
187 188
188 - Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getLocalIp()+":"+sipConfig.getPort())); 189 + Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
189 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress)); 190 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
190 191
191 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil)); 192 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
@@ -199,7 +200,7 @@ public class SIPRequestHeaderProvider { @@ -199,7 +200,7 @@ public class SIPRequestHeaderProvider {
199 SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress()); 200 SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
200 // via 201 // via
201 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 202 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
202 - ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(device.getLocalIp(), sipConfig.getPort(), 203 + ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(),
203 device.getTransport(), SipUtils.getNewViaTag()); 204 device.getTransport(), SipUtils.getNewViaTag());
204 viaHeader.setRPort(); 205 viaHeader.setRPort();
205 viaHeaders.add(viaHeader); 206 viaHeaders.add(viaHeader);
@@ -222,7 +223,7 @@ public class SIPRequestHeaderProvider { @@ -222,7 +223,7 @@ public class SIPRequestHeaderProvider {
222 toHeader, viaHeaders, maxForwards); 223 toHeader, viaHeaders, maxForwards);
223 224
224 225
225 - Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getLocalIp()+":"+sipConfig.getPort())); 226 + Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
226 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress)); 227 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
227 228
228 // Expires 229 // Expires
@@ -254,7 +255,7 @@ public class SIPRequestHeaderProvider { @@ -254,7 +255,7 @@ public class SIPRequestHeaderProvider {
254 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress()); 255 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
255 // via 256 // via
256 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 257 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
257 - ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(device.getLocalIp(), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag()); 258 + ViaHeader viaHeader = sipLayer.getSipFactory().createHeaderFactory().createViaHeader(sipLayer.getLocalIp(device.getLocalIp()), sipConfig.getPort(), device.getTransport(), SipUtils.getNewViaTag());
258 viaHeaders.add(viaHeader); 259 viaHeaders.add(viaHeader);
259 //from 260 //from
260 SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain()); 261 SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
@@ -275,7 +276,7 @@ public class SIPRequestHeaderProvider { @@ -275,7 +276,7 @@ public class SIPRequestHeaderProvider {
275 276
276 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil)); 277 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
277 278
278 - Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getLocalIp()+":"+sipConfig.getPort())); 279 + Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), sipLayer.getLocalIp(device.getLocalIp())+":"+sipConfig.getPort()));
279 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress)); 280 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
280 281
281 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil)); 282 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -33,7 +33,6 @@ import org.springframework.util.ObjectUtils; @@ -33,7 +33,6 @@ import org.springframework.util.ObjectUtils;
33 import javax.sip.InvalidArgumentException; 33 import javax.sip.InvalidArgumentException;
34 import javax.sip.ResponseEvent; 34 import javax.sip.ResponseEvent;
35 import javax.sip.SipException; 35 import javax.sip.SipException;
36 -import javax.sip.SipFactory;  
37 import javax.sip.header.CallIdHeader; 36 import javax.sip.header.CallIdHeader;
38 import javax.sip.message.Request; 37 import javax.sip.message.Request;
39 import java.text.ParseException; 38 import java.text.ParseException;
@@ -182,9 +181,9 @@ public class SIPCommander implements ISIPCommander { @@ -182,9 +181,9 @@ public class SIPCommander implements ISIPCommander {
182 ptzXml.append("</Info>\r\n"); 181 ptzXml.append("</Info>\r\n");
183 ptzXml.append("</Control>\r\n"); 182 ptzXml.append("</Control>\r\n");
184 183
185 - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport())); 184 + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
186 185
187 - sipSender.transmitRequest(device.getLocalIp(),request); 186 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
188 } 187 }
189 188
190 /** 189 /**
@@ -217,8 +216,8 @@ public class SIPCommander implements ISIPCommander { @@ -217,8 +216,8 @@ public class SIPCommander implements ISIPCommander {
217 216
218 217
219 218
220 - SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
221 - sipSender.transmitRequest(device.getLocalIp(),request); 219 + SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  220 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
222 221
223 } 222 }
224 223
@@ -246,8 +245,8 @@ public class SIPCommander implements ISIPCommander { @@ -246,8 +245,8 @@ public class SIPCommander implements ISIPCommander {
246 ptzXml.append("</Control>\r\n"); 245 ptzXml.append("</Control>\r\n");
247 246
248 247
249 - Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
250 - sipSender.transmitRequest(device.getLocalIp(),request, errorEvent, okEvent); 248 + Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  249 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request, errorEvent, okEvent);
251 250
252 } 251 }
253 252
@@ -341,8 +340,8 @@ public class SIPCommander implements ISIPCommander { @@ -341,8 +340,8 @@ public class SIPCommander implements ISIPCommander {
341 340
342 341
343 342
344 - Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(),sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
345 - sipSender.transmitRequest(device.getLocalIp(), request, (e -> { 343 + Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(),sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  344 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, (e -> {
346 streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); 345 streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
347 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); 346 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
348 errorEvent.response(e); 347 errorEvent.response(e);
@@ -442,21 +441,21 @@ public class SIPCommander implements ISIPCommander { @@ -442,21 +441,21 @@ public class SIPCommander implements ISIPCommander {
442 // 添加订阅 441 // 添加订阅
443 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> { 442 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
444 if (hookEvent != null) { 443 if (hookEvent != null) {
445 - InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()); 444 + InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream());
446 hookEvent.call(inviteStreamInfo); 445 hookEvent.call(inviteStreamInfo);
447 } 446 }
448 subscribe.removeSubscribe(hookSubscribe); 447 subscribe.removeSubscribe(hookSubscribe);
449 }); 448 });
450 - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()), ssrcInfo.getSsrc()); 449 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()), ssrcInfo.getSsrc());
451 450
452 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent, event -> { 451 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, event -> {
453 ResponseEvent responseEvent = (ResponseEvent) event.event; 452 ResponseEvent responseEvent = (ResponseEvent) event.event;
454 SIPResponse response = (SIPResponse) responseEvent.getResponse(); 453 SIPResponse response = (SIPResponse) responseEvent.getResponse();
455 - streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback); 454 + streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback);
456 okEvent.response(event); 455 okEvent.response(event);
457 }); 456 });
458 if (inviteStreamCallback != null) { 457 if (inviteStreamCallback != null) {
459 - inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream())); 458 + inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
460 } 459 }
461 } 460 }
462 461
@@ -545,7 +544,7 @@ public class SIPCommander implements ISIPCommander { @@ -545,7 +544,7 @@ public class SIPCommander implements ISIPCommander {
545 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId()); 544 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId());
546 // 添加订阅 545 // 添加订阅
547 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> { 546 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
548 - hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream())); 547 + hookEvent.call(new InviteStreamInfo(mediaServerItem, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
549 subscribe.removeSubscribe(hookSubscribe); 548 subscribe.removeSubscribe(hookSubscribe);
550 hookSubscribe.getContent().put("regist", false); 549 hookSubscribe.getContent().put("regist", false);
551 hookSubscribe.getContent().put("schema", "rtsp"); 550 hookSubscribe.getContent().put("schema", "rtsp");
@@ -554,7 +553,7 @@ public class SIPCommander implements ISIPCommander { @@ -554,7 +553,7 @@ public class SIPCommander implements ISIPCommander {
554 (MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> { 553 (MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> {
555 logger.info("[录像]下载结束, 发送BYE"); 554 logger.info("[录像]下载结束, 发送BYE");
556 try { 555 try {
557 - streamByeCmd(device, channelId, ssrcInfo.getStream(),sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()).getCallId()); 556 + streamByeCmd(device, channelId, ssrcInfo.getStream(),sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId());
558 } catch (InvalidArgumentException | ParseException | SipException | 557 } catch (InvalidArgumentException | ParseException | SipException |
559 SsrcTransactionNotFoundException e) { 558 SsrcTransactionNotFoundException e) {
560 logger.error("[录像]下载结束, 发送BYE失败 {}", e.getMessage()); 559 logger.error("[录像]下载结束, 发送BYE失败 {}", e.getMessage());
@@ -562,14 +561,14 @@ public class SIPCommander implements ISIPCommander { @@ -562,14 +561,14 @@ public class SIPCommander implements ISIPCommander {
562 }); 561 });
563 }); 562 });
564 563
565 - Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()), ssrcInfo.getSsrc()); 564 + Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()), ssrcInfo.getSsrc());
566 if (inviteStreamCallback != null) { 565 if (inviteStreamCallback != null) {
567 - inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream())); 566 + inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
568 } 567 }
569 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent, okEvent -> { 568 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent -> {
570 ResponseEvent responseEvent = (ResponseEvent) okEvent.event; 569 ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
571 SIPResponse response = (SIPResponse) responseEvent.getResponse(); 570 SIPResponse response = (SIPResponse) responseEvent.getResponse();
572 - streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download); 571 + streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
573 }); 572 });
574 } 573 }
575 574
@@ -596,7 +595,7 @@ public class SIPCommander implements ISIPCommander { @@ -596,7 +595,7 @@ public class SIPCommander implements ISIPCommander {
596 streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 595 streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
597 596
598 Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo()); 597 Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo());
599 - sipSender.transmitRequest(device.getLocalIp(), byteRequest, null, okEvent); 598 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), byteRequest, null, okEvent);
600 } 599 }
601 600
602 /** 601 /**
@@ -629,8 +628,8 @@ public class SIPCommander implements ISIPCommander { @@ -629,8 +628,8 @@ public class SIPCommander implements ISIPCommander {
629 628
630 629
631 630
632 - Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
633 - sipSender.transmitRequest(device.getLocalIp(), request); 631 + Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  632 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
634 633
635 } 634 }
636 635
@@ -649,8 +648,8 @@ public class SIPCommander implements ISIPCommander { @@ -649,8 +648,8 @@ public class SIPCommander implements ISIPCommander {
649 648
650 649
651 650
652 - Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
653 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 651 + Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  652 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
654 653
655 } 654 }
656 655
@@ -680,8 +679,8 @@ public class SIPCommander implements ISIPCommander { @@ -680,8 +679,8 @@ public class SIPCommander implements ISIPCommander {
680 679
681 680
682 681
683 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
684 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 682 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  683 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
685 } 684 }
686 685
687 /** 686 /**
@@ -704,8 +703,8 @@ public class SIPCommander implements ISIPCommander { @@ -704,8 +703,8 @@ public class SIPCommander implements ISIPCommander {
704 703
705 704
706 705
707 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
708 - sipSender.transmitRequest(device.getLocalIp(), request); 706 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  707 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
709 } 708 }
710 709
711 /** 710 /**
@@ -729,8 +728,8 @@ public class SIPCommander implements ISIPCommander { @@ -729,8 +728,8 @@ public class SIPCommander implements ISIPCommander {
729 728
730 729
731 730
732 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
733 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 731 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  732 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
734 } 733 }
735 734
736 /** 735 /**
@@ -765,8 +764,8 @@ public class SIPCommander implements ISIPCommander { @@ -765,8 +764,8 @@ public class SIPCommander implements ISIPCommander {
765 764
766 765
767 766
768 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
769 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 767 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  768 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
770 } 769 }
771 770
772 /** 771 /**
@@ -794,8 +793,8 @@ public class SIPCommander implements ISIPCommander { @@ -794,8 +793,8 @@ public class SIPCommander implements ISIPCommander {
794 793
795 794
796 795
797 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
798 - sipSender.transmitRequest(device.getLocalIp(), request); 796 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  797 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
799 } 798 }
800 799
801 /** 800 /**
@@ -841,8 +840,8 @@ public class SIPCommander implements ISIPCommander { @@ -841,8 +840,8 @@ public class SIPCommander implements ISIPCommander {
841 840
842 841
843 842
844 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
845 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 843 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  844 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
846 } 845 }
847 846
848 /** 847 /**
@@ -904,8 +903,8 @@ public class SIPCommander implements ISIPCommander { @@ -904,8 +903,8 @@ public class SIPCommander implements ISIPCommander {
904 903
905 904
906 905
907 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
908 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 906 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  907 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
909 } 908 }
910 909
911 /** 910 /**
@@ -927,9 +926,9 @@ public class SIPCommander implements ISIPCommander { @@ -927,9 +926,9 @@ public class SIPCommander implements ISIPCommander {
927 926
928 927
929 928
930 - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport())); 929 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
931 930
932 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 931 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
933 } 932 }
934 933
935 /** 934 /**
@@ -951,9 +950,9 @@ public class SIPCommander implements ISIPCommander { @@ -951,9 +950,9 @@ public class SIPCommander implements ISIPCommander {
951 950
952 951
953 952
954 - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport())); 953 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
955 954
956 - sipSender.transmitRequest(device.getLocalIp(), request); 955 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
957 956
958 } 957 }
959 958
@@ -976,9 +975,9 @@ public class SIPCommander implements ISIPCommander { @@ -976,9 +975,9 @@ public class SIPCommander implements ISIPCommander {
976 975
977 976
978 977
979 - Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport())); 978 + Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
980 979
981 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 980 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
982 } 981 }
983 982
984 /** 983 /**
@@ -1022,9 +1021,9 @@ public class SIPCommander implements ISIPCommander { @@ -1022,9 +1021,9 @@ public class SIPCommander implements ISIPCommander {
1022 1021
1023 1022
1024 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(), 1023 Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
1025 - SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport())); 1024 + SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1026 1025
1027 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent, okEvent); 1026 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
1028 } 1027 }
1029 1028
1030 /** 1029 /**
@@ -1072,8 +1071,8 @@ public class SIPCommander implements ISIPCommander { @@ -1072,8 +1071,8 @@ public class SIPCommander implements ISIPCommander {
1072 1071
1073 1072
1074 1073
1075 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
1076 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 1074 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  1075 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
1077 } 1076 }
1078 1077
1079 /** 1078 /**
@@ -1102,8 +1101,8 @@ public class SIPCommander implements ISIPCommander { @@ -1102,8 +1101,8 @@ public class SIPCommander implements ISIPCommander {
1102 1101
1103 1102
1104 1103
1105 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
1106 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 1104 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  1105 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
1107 } 1106 }
1108 1107
1109 /** 1108 /**
@@ -1129,8 +1128,8 @@ public class SIPCommander implements ISIPCommander { @@ -1129,8 +1128,8 @@ public class SIPCommander implements ISIPCommander {
1129 1128
1130 1129
1131 1130
1132 - Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
1133 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 1131 + Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  1132 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
1134 } 1133 }
1135 1134
1136 /** 1135 /**
@@ -1153,9 +1152,9 @@ public class SIPCommander implements ISIPCommander { @@ -1153,9 +1152,9 @@ public class SIPCommander implements ISIPCommander {
1153 1152
1154 1153
1155 1154
1156 - Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport())); 1155 + Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1157 1156
1158 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent); 1157 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
1159 1158
1160 } 1159 }
1161 1160
@@ -1185,11 +1184,11 @@ public class SIPCommander implements ISIPCommander { @@ -1185,11 +1184,11 @@ public class SIPCommander implements ISIPCommander {
1185 if (requestOld != null) { 1184 if (requestOld != null) {
1186 callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId()); 1185 callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
1187 } else { 1186 } else {
1188 - callIdHeader = sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()); 1187 + callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
1189 } 1188 }
1190 SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), requestOld, device.getSubscribeCycleForMobilePosition(), "presence",callIdHeader); //Position;id=" + tm.substring(tm.length() - 4)); 1189 SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), requestOld, device.getSubscribeCycleForMobilePosition(), "presence",callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
1191 1190
1192 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent, okEvent); 1191 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
1193 return request; 1192 return request;
1194 } 1193 }
1195 1194
@@ -1238,8 +1237,8 @@ public class SIPCommander implements ISIPCommander { @@ -1238,8 +1237,8 @@ public class SIPCommander implements ISIPCommander {
1238 1237
1239 1238
1240 1239
1241 - Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
1242 - sipSender.transmitRequest(device.getLocalIp(), request); 1240 + Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  1241 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
1243 1242
1244 } 1243 }
1245 1244
@@ -1260,13 +1259,13 @@ public class SIPCommander implements ISIPCommander { @@ -1260,13 +1259,13 @@ public class SIPCommander implements ISIPCommander {
1260 if (requestOld != null) { 1259 if (requestOld != null) {
1261 callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId()); 1260 callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
1262 } else { 1261 } else {
1263 - callIdHeader = sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()); 1262 + callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
1264 } 1263 }
1265 1264
1266 // 有效时间默认为60秒以上 1265 // 有效时间默认为60秒以上
1267 SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), requestOld, device.getSubscribeCycleForCatalog(), "Catalog", 1266 SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), requestOld, device.getSubscribeCycleForCatalog(), "Catalog",
1268 callIdHeader); 1267 callIdHeader);
1269 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent, okEvent); 1268 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
1270 return request; 1269 return request;
1271 } 1270 }
1272 1271
@@ -1287,9 +1286,9 @@ public class SIPCommander implements ISIPCommander { @@ -1287,9 +1286,9 @@ public class SIPCommander implements ISIPCommander {
1287 dragXml.append(cmdString); 1286 dragXml.append(cmdString);
1288 dragXml.append("</Control>\r\n"); 1287 dragXml.append("</Control>\r\n");
1289 1288
1290 - Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport())); 1289 + Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
1291 logger.debug("拉框信令: " + request.toString()); 1290 logger.debug("拉框信令: " + request.toString());
1292 - sipSender.transmitRequest(device.getLocalIp(),request); 1291 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
1293 } 1292 }
1294 1293
1295 1294
@@ -1368,7 +1367,7 @@ public class SIPCommander implements ISIPCommander { @@ -1368,7 +1367,7 @@ public class SIPCommander implements ISIPCommander {
1368 return; 1367 return;
1369 } 1368 }
1370 1369
1371 - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent, okEvent); 1370 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
1372 } 1371 }
1373 1372
1374 @Override 1373 @Override
@@ -1398,8 +1397,8 @@ public class SIPCommander implements ISIPCommander { @@ -1398,8 +1397,8 @@ public class SIPCommander implements ISIPCommander {
1398 deviceStatusXml.append("</Notify>\r\n"); 1397 deviceStatusXml.append("</Notify>\r\n");
1399 1398
1400 1399
1401 - Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport()));  
1402 - sipSender.transmitRequest(device.getLocalIp(),request); 1400 + Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
  1401 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
1403 1402
1404 1403
1405 } 1404 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/RegisterRequestProcessor.java
1 package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl; 1 package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
2 2
3 import com.genersoft.iot.vmp.conf.SipConfig; 3 import com.genersoft.iot.vmp.conf.SipConfig;
  4 +import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
4 import com.genersoft.iot.vmp.gb28181.bean.Device; 5 import com.genersoft.iot.vmp.gb28181.bean.Device;
5 import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate; 6 import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
6 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; 7 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
7 import com.genersoft.iot.vmp.gb28181.transmit.SIPSender; 8 import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
8 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
10 -import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;  
11 import com.genersoft.iot.vmp.service.IDeviceService; 11 import com.genersoft.iot.vmp.service.IDeviceService;
12 import com.genersoft.iot.vmp.utils.DateUtil; 12 import com.genersoft.iot.vmp.utils.DateUtil;
13 import gov.nist.javax.sip.RequestEventExt; 13 import gov.nist.javax.sip.RequestEventExt;
14 import gov.nist.javax.sip.address.AddressImpl; 14 import gov.nist.javax.sip.address.AddressImpl;
15 import gov.nist.javax.sip.address.SipUri; 15 import gov.nist.javax.sip.address.SipUri;
16 -import gov.nist.javax.sip.header.Expires;  
17 import gov.nist.javax.sip.header.SIPDateHeader; 16 import gov.nist.javax.sip.header.SIPDateHeader;
18 import gov.nist.javax.sip.message.SIPRequest; 17 import gov.nist.javax.sip.message.SIPRequest;
19 import org.slf4j.Logger; 18 import org.slf4j.Logger;
@@ -25,8 +24,10 @@ import org.springframework.util.ObjectUtils; @@ -25,8 +24,10 @@ import org.springframework.util.ObjectUtils;
25 24
26 import javax.sip.RequestEvent; 25 import javax.sip.RequestEvent;
27 import javax.sip.SipException; 26 import javax.sip.SipException;
28 -import javax.sip.header.*;  
29 -import javax.sip.message.Request; 27 +import javax.sip.header.AuthorizationHeader;
  28 +import javax.sip.header.ContactHeader;
  29 +import javax.sip.header.FromHeader;
  30 +import javax.sip.header.ViaHeader;
30 import javax.sip.message.Response; 31 import javax.sip.message.Response;
31 import java.security.NoSuchAlgorithmException; 32 import java.security.NoSuchAlgorithmException;
32 import java.text.ParseException; 33 import java.text.ParseException;
@@ -76,7 +77,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen @@ -76,7 +77,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
76 Response response = null; 77 Response response = null;
77 boolean passwordCorrect = false; 78 boolean passwordCorrect = false;
78 // 注册标志 79 // 注册标志
79 - boolean registerFlag = false; 80 + boolean registerFlag;
80 FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME); 81 FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
81 AddressImpl address = (AddressImpl) fromHeader.getAddress(); 82 AddressImpl address = (AddressImpl) fromHeader.getAddress();
82 SipUri uri = (SipUri) address.getURI(); 83 SipUri uri = (SipUri) address.getURI();
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -568,8 +568,6 @@ public class ZLMHttpHookListener { @@ -568,8 +568,6 @@ public class ZLMHttpHookListener {
568 public JSONObject onServerStarted(HttpServletRequest request, @RequestBody JSONObject jsonObject){ 568 public JSONObject onServerStarted(HttpServletRequest request, @RequestBody JSONObject jsonObject){
569 569
570 jsonObject.put("ip", request.getRemoteAddr()); 570 jsonObject.put("ip", request.getRemoteAddr());
571 - System.out.println(jsonObject.toJSONString()  
572 - );  
573 ZLMServerConfig zlmServerConfig = JSON.to(ZLMServerConfig.class, jsonObject); 571 ZLMServerConfig zlmServerConfig = JSON.to(ZLMServerConfig.class, jsonObject);
574 zlmServerConfig.setIp(request.getRemoteAddr()); 572 zlmServerConfig.setIp(request.getRemoteAddr());
575 logger.info("[ZLM HOOK] zlm 启动 " + zlmServerConfig.getGeneralMediaServerId()); 573 logger.info("[ZLM HOOK] zlm 启动 " + zlmServerConfig.getGeneralMediaServerId());
@@ -632,7 +630,6 @@ public class ZLMHttpHookListener { @@ -632,7 +630,6 @@ public class ZLMHttpHookListener {
632 @ResponseBody 630 @ResponseBody
633 @PostMapping(value = "/on_rtp_server_timeout", produces = "application/json;charset=UTF-8") 631 @PostMapping(value = "/on_rtp_server_timeout", produces = "application/json;charset=UTF-8")
634 public JSONObject onRtpServerTimeout(HttpServletRequest request, @RequestBody OnRtpServerTimeoutHookParam param){ 632 public JSONObject onRtpServerTimeout(HttpServletRequest request, @RequestBody OnRtpServerTimeoutHookParam param){
635 - System.out.println(param);  
636 logger.info("[ZLM HOOK] rtpServer收流超时:{}->{}({})", param.getMediaServerId(), param.getStream_id(), param.getSsrc()); 633 logger.info("[ZLM HOOK] rtpServer收流超时:{}->{}({})", param.getMediaServerId(), param.getStream_id(), param.getSsrc());
637 634
638 JSONObject ret = new JSONObject(); 635 JSONObject ret = new JSONObject();
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -115,9 +115,9 @@ public class PlayServiceImpl implements IPlayService { @@ -115,9 +115,9 @@ public class PlayServiceImpl implements IPlayService {
115 if (mediaServerItem == null) { 115 if (mediaServerItem == null) {
116 throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到可用的zlm"); 116 throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到可用的zlm");
117 } 117 }
  118 + String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
118 119
119 RequestMessage msg = new RequestMessage(); 120 RequestMessage msg = new RequestMessage();
120 - String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;  
121 msg.setKey(key); 121 msg.setKey(key);
122 122
123 Device device = redisCatchStorage.getDevice(deviceId); 123 Device device = redisCatchStorage.getDevice(deviceId);
@@ -181,7 +181,6 @@ public class PlayServiceImpl implements IPlayService { @@ -181,7 +181,6 @@ public class PlayServiceImpl implements IPlayService {
181 streamId = String.format("%s_%s", device.getDeviceId(), channelId); 181 streamId = String.format("%s_%s", device.getDeviceId(), channelId);
182 } 182 }
183 SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck(), false); 183 SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck(), false);
184 - logger.info(JSONObject.toJSONString(ssrcInfo));  
185 if (ssrcInfo == null) { 184 if (ssrcInfo == null) {
186 WVPResult wvpResult = new WVPResult(); 185 WVPResult wvpResult = new WVPResult();
187 wvpResult.setCode(ErrorCode.ERROR100.getCode()); 186 wvpResult.setCode(ErrorCode.ERROR100.getCode());
@@ -189,7 +188,7 @@ public class PlayServiceImpl implements IPlayService { @@ -189,7 +188,7 @@ public class PlayServiceImpl implements IPlayService {
189 msg.setData(wvpResult); 188 msg.setData(wvpResult);
190 189
191 resultHolder.invokeAllResult(msg); 190 resultHolder.invokeAllResult(msg);
192 - return playResult; 191 + return;
193 } 192 }
194 play(mediaServerItem, ssrcInfo, device, channelId, (mediaServerItemInUse, response) -> { 193 play(mediaServerItem, ssrcInfo, device, channelId, (mediaServerItemInUse, response) -> {
195 if (hookEvent != null) { 194 if (hookEvent != null) {
@@ -248,16 +247,14 @@ public class PlayServiceImpl implements IPlayService { @@ -248,16 +247,14 @@ public class PlayServiceImpl implements IPlayService {
248 } 247 }
249 } 248 }
250 }, userSetting.getPlayTimeout()); 249 }, userSetting.getPlayTimeout());
251 - final String ssrc = ssrcInfo.getSsrc();  
252 - final String stream = ssrcInfo.getStream();  
253 //端口获取失败的ssrcInfo 没有必要发送点播指令 250 //端口获取失败的ssrcInfo 没有必要发送点播指令
254 if (ssrcInfo.getPort() <= 0) { 251 if (ssrcInfo.getPort() <= 0) {
255 logger.info("[点播端口分配异常],deviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, ssrcInfo); 252 logger.info("[点播端口分配异常],deviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, ssrcInfo);
256 dynamicTask.stop(timeOutTaskKey); 253 dynamicTask.stop(timeOutTaskKey);
257 // 释放ssrc 254 // 释放ssrc
258 - mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); 255 + mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
259 256
260 - streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); 257 + streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
261 258
262 RequestMessage msg = new RequestMessage(); 259 RequestMessage msg = new RequestMessage();
263 msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + device.getDeviceId() + channelId); 260 msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + device.getDeviceId() + channelId);
@@ -274,7 +271,7 @@ public class PlayServiceImpl implements IPlayService { @@ -274,7 +271,7 @@ public class PlayServiceImpl implements IPlayService {
274 onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId); 271 onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId);
275 hookEvent.response(mediaServerItemInuse, response); 272 hookEvent.response(mediaServerItemInuse, response);
276 logger.info("[点播成功] deviceId: {}, channelId: {}", device.getDeviceId(), channelId); 273 logger.info("[点播成功] deviceId: {}, channelId: {}", device.getDeviceId(), channelId);
277 - String streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServerItemInuse.getRtspPort(), "rtp", stream); 274 + String streamUrl = String.format("rtsp://127.0.0.1:%s/%s/%s", mediaServerItemInuse.getRtspPort(), "rtp", ssrcInfo.getStream());
278 String path = "snap"; 275 String path = "snap";
279 String fileName = device.getDeviceId() + "_" + channelId + ".jpg"; 276 String fileName = device.getDeviceId() + "_" + channelId + ".jpg";
280 // 请求截图 277 // 请求截图
src/main/java/com/genersoft/iot/vmp/storager/dao/DeviceMapper.java
@@ -111,6 +111,7 @@ public interface DeviceMapper { @@ -111,6 +111,7 @@ public interface DeviceMapper {
111 "<if test=\"firmware != null\">, firmware='${firmware}'</if>" + 111 "<if test=\"firmware != null\">, firmware='${firmware}'</if>" +
112 "<if test=\"transport != null\">, transport='${transport}'</if>" + 112 "<if test=\"transport != null\">, transport='${transport}'</if>" +
113 "<if test=\"ip != null\">, ip='${ip}'</if>" + 113 "<if test=\"ip != null\">, ip='${ip}'</if>" +
  114 + "<if test=\"localIp != null\">, localIp='${localIp}'</if>" +
114 "<if test=\"port != null\">, port=${port}</if>" + 115 "<if test=\"port != null\">, port=${port}</if>" +
115 "<if test=\"hostAddress != null\">, hostAddress='${hostAddress}'</if>" + 116 "<if test=\"hostAddress != null\">, hostAddress='${hostAddress}'</if>" +
116 "<if test=\"online != null\">, online=${online}</if>" + 117 "<if test=\"online != null\">, online=${online}</if>" +
src/main/java/com/genersoft/iot/vmp/vmanager/bean/WVPResult.java
@@ -4,7 +4,7 @@ package com.genersoft.iot.vmp.vmanager.bean; @@ -4,7 +4,7 @@ package com.genersoft.iot.vmp.vmanager.bean;
4 import io.swagger.v3.oas.annotations.media.Schema; 4 import io.swagger.v3.oas.annotations.media.Schema;
5 5
6 @Schema(description = "统一返回结果") 6 @Schema(description = "统一返回结果")
7 -public class WVPResult<T> { 7 +public class WVPResult<T> implements Cloneable{
8 8
9 public WVPResult() { 9 public WVPResult() {
10 } 10 }
@@ -64,4 +64,8 @@ public class WVPResult&lt;T&gt; { @@ -64,4 +64,8 @@ public class WVPResult&lt;T&gt; {
64 this.data = data; 64 this.data = data;
65 } 65 }
66 66
  67 + @Override
  68 + public Object clone() throws CloneNotSupportedException {
  69 + return super.clone();
  70 + }
67 } 71 }
src/main/java/com/genersoft/iot/vmp/vmanager/gb28181/play/PlayController.java
@@ -83,20 +83,6 @@ public class PlayController { @@ -83,20 +83,6 @@ public class PlayController {
83 public DeferredResult<WVPResult<StreamInfo>> play(HttpServletRequest request, @PathVariable String deviceId, 83 public DeferredResult<WVPResult<StreamInfo>> play(HttpServletRequest request, @PathVariable String deviceId,
84 @PathVariable String channelId) { 84 @PathVariable String channelId) {
85 85
86 - String localAddr = request.getLocalAddr();  
87 - String localName = request.getLocalName();  
88 - String remoteHost = request.getRemoteHost();  
89 - String remoteAddr = request.getRemoteAddr();  
90 - String remoteUser = request.getRemoteUser();  
91 - String requestURI = request.getRequestURI();  
92 - System.out.println(3333333);  
93 - System.out.println(localAddr);  
94 - System.out.println(localName);  
95 - System.out.println(remoteHost);  
96 - System.out.println(remoteAddr);  
97 - System.out.println(remoteUser);  
98 - System.out.println(requestURI);  
99 - System.out.println(4444444);  
100 // 获取可用的zlm 86 // 获取可用的zlm
101 Device device = storager.queryVideoDevice(deviceId); 87 Device device = storager.queryVideoDevice(deviceId);
102 MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device); 88 MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
@@ -110,16 +96,31 @@ public class PlayController { @@ -110,16 +96,31 @@ public class PlayController {
110 DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue()); 96 DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
111 DeferredResultEx<WVPResult<StreamInfo>> deferredResultEx = new DeferredResultEx<>(result); 97 DeferredResultEx<WVPResult<StreamInfo>> deferredResultEx = new DeferredResultEx<>(result);
112 98
  99 + result.onTimeout(()->{
  100 + logger.info("点播接口等待超时");
  101 + // 释放rtpserver
  102 + WVPResult<StreamInfo> wvpResult = new WVPResult<>();
  103 + wvpResult.setCode(ErrorCode.ERROR100.getCode());
  104 + wvpResult.setMsg("点播超时");
  105 + msg.setData(wvpResult);
  106 + resultHolder.invokeResult(msg);
  107 + });
  108 +
  109 + // TODO 在点播未成功的情况下在此调用接口点播会导致返回的流地址ip错误
113 deferredResultEx.setFilter(result1 -> { 110 deferredResultEx.setFilter(result1 -> {
114 - System.out.println(1111);  
115 - System.out.println(request.getLocalName());  
116 - WVPResult<StreamInfo> wvpResult = (WVPResult<StreamInfo>)result1;  
117 - if (wvpResult.getCode() == ErrorCode.SUCCESS.getCode()) {  
118 - StreamInfo data = wvpResult.getData(); 111 + WVPResult<StreamInfo> wvpResult1 = (WVPResult<StreamInfo>)result1;
  112 + WVPResult<StreamInfo> clone = null;
  113 + try {
  114 + clone = (WVPResult<StreamInfo>)wvpResult1.clone();
  115 + } catch (CloneNotSupportedException e) {
  116 + throw new RuntimeException(e);
  117 + }
  118 + if (clone.getCode() == ErrorCode.SUCCESS.getCode()) {
  119 + StreamInfo data = clone.getData().clone();
119 data.channgeStreamIp(request.getLocalName()); 120 data.channgeStreamIp(request.getLocalName());
120 - ((WVPResult<StreamInfo>)result1).setData(data); 121 + clone.setData(data);
121 } 122 }
122 - return result1; 123 + return clone;
123 }); 124 });
124 125
125 // 录像查询以channelId作为deviceId查询 126 // 录像查询以channelId作为deviceId查询
src/main/java/com/genersoft/iot/vmp/vmanager/streamProxy/StreamProxyController.java
@@ -6,22 +6,17 @@ import com.genersoft.iot.vmp.conf.exception.ControllerException; @@ -6,22 +6,17 @@ import com.genersoft.iot.vmp.conf.exception.ControllerException;
6 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; 6 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
7 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem; 7 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
8 import com.genersoft.iot.vmp.service.IMediaServerService; 8 import com.genersoft.iot.vmp.service.IMediaServerService;
9 -import com.genersoft.iot.vmp.service.IMediaService;  
10 -import com.genersoft.iot.vmp.storager.IRedisCatchStorage;  
11 import com.genersoft.iot.vmp.service.IStreamProxyService; 9 import com.genersoft.iot.vmp.service.IStreamProxyService;
12 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode; 10 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
13 -import com.genersoft.iot.vmp.vmanager.bean.WVPResult;  
14 import com.github.pagehelper.PageInfo; 11 import com.github.pagehelper.PageInfo;
15 import io.swagger.v3.oas.annotations.Operation; 12 import io.swagger.v3.oas.annotations.Operation;
16 import io.swagger.v3.oas.annotations.Parameter; 13 import io.swagger.v3.oas.annotations.Parameter;
17 -import io.swagger.v3.oas.annotations.Parameters;  
18 import io.swagger.v3.oas.annotations.tags.Tag; 14 import io.swagger.v3.oas.annotations.tags.Tag;
19 import org.slf4j.Logger; 15 import org.slf4j.Logger;
20 import org.slf4j.LoggerFactory; 16 import org.slf4j.LoggerFactory;
21 import org.springframework.beans.factory.annotation.Autowired; 17 import org.springframework.beans.factory.annotation.Autowired;
22 import org.springframework.stereotype.Controller; 18 import org.springframework.stereotype.Controller;
23 import org.springframework.util.ObjectUtils; 19 import org.springframework.util.ObjectUtils;
24 -import org.springframework.util.StringUtils;  
25 import org.springframework.web.bind.annotation.*; 20 import org.springframework.web.bind.annotation.*;
26 21
27 @SuppressWarnings("rawtypes") 22 @SuppressWarnings("rawtypes")
@@ -63,7 +58,7 @@ public class StreamProxyController { @@ -63,7 +58,7 @@ public class StreamProxyController {
63 }) 58 })
64 @PostMapping(value = "/save") 59 @PostMapping(value = "/save")
65 @ResponseBody 60 @ResponseBody
66 - public StreamInfo save(@RequestBody StreamProxyItem param){ 61 + public StreamInfo save(@RequestBody StreamProxyItem param){
67 logger.info("添加代理: " + JSONObject.toJSONString(param)); 62 logger.info("添加代理: " + JSONObject.toJSONString(param));
68 if (ObjectUtils.isEmpty(param.getMediaServerId())) { 63 if (ObjectUtils.isEmpty(param.getMediaServerId())) {
69 param.setMediaServerId("auto"); 64 param.setMediaServerId("auto");