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 5 import java.io.Serializable;
6 6  
7 7 @Schema(description = "流信息")
8   -public class StreamInfo implements Serializable {
  8 +public class StreamInfo implements Serializable, Cloneable{
9 9  
10 10 @Schema(description = "应用名")
11 11 private String app;
... ... @@ -463,4 +463,15 @@ public class StreamInfo implements Serializable {
463 463 public void setTransactionInfo(TransactionInfo transactionInfo) {
464 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 3  
4 4 import org.springframework.boot.context.properties.ConfigurationProperties;
5 5 import org.springframework.stereotype.Component;
  6 +import org.springframework.util.ObjectUtils;
6 7  
7 8 @Component
8 9 @ConfigurationProperties(prefix = "sip", ignoreInvalidFields = true)
... ... @@ -92,4 +93,10 @@ public class SipConfig {
92 93 public void setAlarm(boolean alarm) {
93 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 72 try {
73 73 ListeningPoint tcpListeningPoint = sipStack.createListeningPoint(monitorIp, port, "TCP");
74 74 SipProviderImpl tcpSipProvider = (SipProviderImpl)sipStack.createSipProvider(tcpListeningPoint);
  75 +
75 76 tcpSipProvider.setDialogErrorsAutomaticallyHandled();
76 77 tcpSipProvider.addSipListener(sipProcessorObserver);
77 78 tcpSipProviderMap.put(monitorIp, tcpSipProvider);
... ... @@ -134,4 +135,11 @@ public class SipLayer implements CommandLineRunner {
134 135 }
135 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 106 }
107 107  
108 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 1 package com.genersoft.iot.vmp.gb28181.transmit.callback;
2 2  
3   -import com.alibaba.fastjson2.JSON;
4 3 import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
5 4 import org.springframework.stereotype.Component;
6 5 import org.springframework.util.ObjectUtils;
... ... @@ -130,23 +129,26 @@ public class DeferredResultHolder {
130 129 if (deferredResultMap == null) {
131 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 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 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 4 import com.genersoft.iot.vmp.gb28181.SipLayer;
  5 +import com.genersoft.iot.vmp.gb28181.bean.Device;
13 6 import com.genersoft.iot.vmp.gb28181.bean.SipTransactionInfo;
14 7 import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
15 8 import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
... ... @@ -20,8 +13,15 @@ import gov.nist.javax.sip.message.SIPResponse;
20 13 import org.springframework.beans.factory.annotation.Autowired;
21 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 27 * @description:摄像头命令request创造器 TODO 冗余代码太多待优化
... ... @@ -52,7 +52,7 @@ public class SIPRequestHeaderProvider {
52 52 SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
53 53 // via
54 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 56 viaHeader.setRPort();
57 57 viaHeaders.add(viaHeader);
58 58 // from
... ... @@ -85,7 +85,8 @@ public class SIPRequestHeaderProvider {
85 85 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
86 86 //via
87 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 90 viaHeader.setRPort();
90 91 viaHeaders.add(viaHeader);
91 92  
... ... @@ -107,7 +108,7 @@ public class SIPRequestHeaderProvider {
107 108  
108 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 112 // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
112 113 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
113 114 // Subject
... ... @@ -124,7 +125,7 @@ public class SIPRequestHeaderProvider {
124 125 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
125 126 // via
126 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 129 viaHeader.setRPort();
129 130 viaHeaders.add(viaHeader);
130 131 //from
... ... @@ -143,7 +144,7 @@ public class SIPRequestHeaderProvider {
143 144 CSeqHeader cSeqHeader = sipLayer.getSipFactory().createHeaderFactory().createCSeqHeader(redisCatchStorage.getCSEQ(), Request.INVITE);
144 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 148 // Address concatAddress = sipLayer.getSipFactory().createAddressFactory().createAddress(sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(), device.getHost().getIp()+":"+device.getHost().getPort()));
148 149 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
149 150  
... ... @@ -164,7 +165,7 @@ public class SIPRequestHeaderProvider {
164 165 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
165 166 // via
166 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 169 viaHeaders.add(viaHeader);
169 170 //from
170 171 SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
... ... @@ -185,7 +186,7 @@ public class SIPRequestHeaderProvider {
185 186  
186 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 190 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
190 191  
191 192 request.addHeader(SipUtils.createUserAgentHeader(sipLayer.getSipFactory(), gitUtil));
... ... @@ -199,7 +200,7 @@ public class SIPRequestHeaderProvider {
199 200 SipURI requestURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(device.getDeviceId(), device.getHostAddress());
200 201 // via
201 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 204 device.getTransport(), SipUtils.getNewViaTag());
204 205 viaHeader.setRPort();
205 206 viaHeaders.add(viaHeader);
... ... @@ -222,7 +223,7 @@ public class SIPRequestHeaderProvider {
222 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 227 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
227 228  
228 229 // Expires
... ... @@ -254,7 +255,7 @@ public class SIPRequestHeaderProvider {
254 255 SipURI requestLine = sipLayer.getSipFactory().createAddressFactory().createSipURI(channelId, device.getHostAddress());
255 256 // via
256 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 259 viaHeaders.add(viaHeader);
259 260 //from
260 261 SipURI fromSipURI = sipLayer.getSipFactory().createAddressFactory().createSipURI(sipConfig.getId(),sipConfig.getDomain());
... ... @@ -275,7 +276,7 @@ public class SIPRequestHeaderProvider {
275 276  
276 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 280 request.addHeader(sipLayer.getSipFactory().createHeaderFactory().createContactHeader(concatAddress));
280 281  
281 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 33 import javax.sip.InvalidArgumentException;
34 34 import javax.sip.ResponseEvent;
35 35 import javax.sip.SipException;
36   -import javax.sip.SipFactory;
37 36 import javax.sip.header.CallIdHeader;
38 37 import javax.sip.message.Request;
39 38 import java.text.ParseException;
... ... @@ -182,9 +181,9 @@ public class SIPCommander implements ISIPCommander {
182 181 ptzXml.append("</Info>\r\n");
183 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 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 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 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 345 streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
347 346 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
348 347 errorEvent.response(e);
... ... @@ -442,21 +441,21 @@ public class SIPCommander implements ISIPCommander {
442 441 // 添加订阅
443 442 subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
444 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 445 hookEvent.call(inviteStreamInfo);
447 446 }
448 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 452 ResponseEvent responseEvent = (ResponseEvent) event.event;
454 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 455 okEvent.response(event);
457 456 });
458 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 544 HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId());
546 545 // 添加订阅
547 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 548 subscribe.removeSubscribe(hookSubscribe);
550 549 hookSubscribe.getContent().put("regist", false);
551 550 hookSubscribe.getContent().put("schema", "rtsp");
... ... @@ -554,7 +553,7 @@ public class SIPCommander implements ISIPCommander {
554 553 (MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> {
555 554 logger.info("[录像]下载结束, 发送BYE");
556 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 557 } catch (InvalidArgumentException | ParseException | SipException |
559 558 SsrcTransactionNotFoundException e) {
560 559 logger.error("[录像]下载结束, 发送BYE失败 {}", e.getMessage());
... ... @@ -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 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 569 ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
571 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 595 streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
597 596  
598 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 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 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 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 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 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 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 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 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 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 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 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 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 1021  
1023 1022  
1024 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 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 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 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 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 1184 if (requestOld != null) {
1186 1185 callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
1187 1186 } else {
1188   - callIdHeader = sipSender.getNewCallIdHeader(device.getLocalIp(),device.getTransport());
  1187 + callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
1189 1188 }
1190 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 1192 return request;
1194 1193 }
1195 1194  
... ... @@ -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 1259 if (requestOld != null) {
1261 1260 callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
1262 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 1265 // 有效时间默认为60秒以上
1267 1266 SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), requestOld, device.getSubscribeCycleForCatalog(), "Catalog",
1268 1267 callIdHeader);
1269   - sipSender.transmitRequest(device.getLocalIp(), request, errorEvent, okEvent);
  1268 + sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
1270 1269 return request;
1271 1270 }
1272 1271  
... ... @@ -1287,9 +1286,9 @@ public class SIPCommander implements ISIPCommander {
1287 1286 dragXml.append(cmdString);
1288 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 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 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 1373 @Override
... ... @@ -1398,8 +1397,8 @@ public class SIPCommander implements ISIPCommander {
1398 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 1 package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl;
2 2  
3 3 import com.genersoft.iot.vmp.conf.SipConfig;
  4 +import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
4 5 import com.genersoft.iot.vmp.gb28181.bean.Device;
5 6 import com.genersoft.iot.vmp.gb28181.bean.WvpSipDate;
6 7 import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
7 8 import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
8 9 import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
9 10 import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
10   -import com.genersoft.iot.vmp.gb28181.auth.DigestServerAuthenticationHelper;
11 11 import com.genersoft.iot.vmp.service.IDeviceService;
12 12 import com.genersoft.iot.vmp.utils.DateUtil;
13 13 import gov.nist.javax.sip.RequestEventExt;
14 14 import gov.nist.javax.sip.address.AddressImpl;
15 15 import gov.nist.javax.sip.address.SipUri;
16   -import gov.nist.javax.sip.header.Expires;
17 16 import gov.nist.javax.sip.header.SIPDateHeader;
18 17 import gov.nist.javax.sip.message.SIPRequest;
19 18 import org.slf4j.Logger;
... ... @@ -25,8 +24,10 @@ import org.springframework.util.ObjectUtils;
25 24  
26 25 import javax.sip.RequestEvent;
27 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 31 import javax.sip.message.Response;
31 32 import java.security.NoSuchAlgorithmException;
32 33 import java.text.ParseException;
... ... @@ -76,7 +77,7 @@ public class RegisterRequestProcessor extends SIPRequestProcessorParent implemen
76 77 Response response = null;
77 78 boolean passwordCorrect = false;
78 79 // 注册标志
79   - boolean registerFlag = false;
  80 + boolean registerFlag;
80 81 FromHeader fromHeader = (FromHeader) request.getHeader(FromHeader.NAME);
81 82 AddressImpl address = (AddressImpl) fromHeader.getAddress();
82 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 568 public JSONObject onServerStarted(HttpServletRequest request, @RequestBody JSONObject jsonObject){
569 569  
570 570 jsonObject.put("ip", request.getRemoteAddr());
571   - System.out.println(jsonObject.toJSONString()
572   - );
573 571 ZLMServerConfig zlmServerConfig = JSON.to(ZLMServerConfig.class, jsonObject);
574 572 zlmServerConfig.setIp(request.getRemoteAddr());
575 573 logger.info("[ZLM HOOK] zlm 启动 " + zlmServerConfig.getGeneralMediaServerId());
... ... @@ -632,7 +630,6 @@ public class ZLMHttpHookListener {
632 630 @ResponseBody
633 631 @PostMapping(value = "/on_rtp_server_timeout", produces = "application/json;charset=UTF-8")
634 632 public JSONObject onRtpServerTimeout(HttpServletRequest request, @RequestBody OnRtpServerTimeoutHookParam param){
635   - System.out.println(param);
636 633 logger.info("[ZLM HOOK] rtpServer收流超时:{}->{}({})", param.getMediaServerId(), param.getStream_id(), param.getSsrc());
637 634  
638 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 115 if (mediaServerItem == null) {
116 116 throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到可用的zlm");
117 117 }
  118 + String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
118 119  
119 120 RequestMessage msg = new RequestMessage();
120   - String key = DeferredResultHolder.CALLBACK_CMD_PLAY + deviceId + channelId;
121 121 msg.setKey(key);
122 122  
123 123 Device device = redisCatchStorage.getDevice(deviceId);
... ... @@ -181,7 +181,6 @@ public class PlayServiceImpl implements IPlayService {
181 181 streamId = String.format("%s_%s", device.getDeviceId(), channelId);
182 182 }
183 183 SSRCInfo ssrcInfo = mediaServerService.openRTPServer(mediaServerItem, streamId, device.isSsrcCheck(), false);
184   - logger.info(JSONObject.toJSONString(ssrcInfo));
185 184 if (ssrcInfo == null) {
186 185 WVPResult wvpResult = new WVPResult();
187 186 wvpResult.setCode(ErrorCode.ERROR100.getCode());
... ... @@ -189,7 +188,7 @@ public class PlayServiceImpl implements IPlayService {
189 188 msg.setData(wvpResult);
190 189  
191 190 resultHolder.invokeAllResult(msg);
192   - return playResult;
  191 + return;
193 192 }
194 193 play(mediaServerItem, ssrcInfo, device, channelId, (mediaServerItemInUse, response) -> {
195 194 if (hookEvent != null) {
... ... @@ -248,16 +247,14 @@ public class PlayServiceImpl implements IPlayService {
248 247 }
249 248 }
250 249 }, userSetting.getPlayTimeout());
251   - final String ssrc = ssrcInfo.getSsrc();
252   - final String stream = ssrcInfo.getStream();
253 250 //端口获取失败的ssrcInfo 没有必要发送点播指令
254 251 if (ssrcInfo.getPort() <= 0) {
255 252 logger.info("[点播端口分配异常],deviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, ssrcInfo);
256 253 dynamicTask.stop(timeOutTaskKey);
257 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 259 RequestMessage msg = new RequestMessage();
263 260 msg.setKey(DeferredResultHolder.CALLBACK_CMD_PLAY + device.getDeviceId() + channelId);
... ... @@ -274,7 +271,7 @@ public class PlayServiceImpl implements IPlayService {
274 271 onPublishHandlerForPlay(mediaServerItemInuse, response, device.getDeviceId(), channelId);
275 272 hookEvent.response(mediaServerItemInuse, response);
276 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 275 String path = "snap";
279 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 111 "<if test=\"firmware != null\">, firmware='${firmware}'</if>" +
112 112 "<if test=\"transport != null\">, transport='${transport}'</if>" +
113 113 "<if test=\"ip != null\">, ip='${ip}'</if>" +
  114 + "<if test=\"localIp != null\">, localIp='${localIp}'</if>" +
114 115 "<if test=\"port != null\">, port=${port}</if>" +
115 116 "<if test=\"hostAddress != null\">, hostAddress='${hostAddress}'</if>" +
116 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 4 import io.swagger.v3.oas.annotations.media.Schema;
5 5  
6 6 @Schema(description = "统一返回结果")
7   -public class WVPResult<T> {
  7 +public class WVPResult<T> implements Cloneable{
8 8  
9 9 public WVPResult() {
10 10 }
... ... @@ -64,4 +64,8 @@ public class WVPResult&lt;T&gt; {
64 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 83 public DeferredResult<WVPResult<StreamInfo>> play(HttpServletRequest request, @PathVariable String deviceId,
84 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 86 // 获取可用的zlm
101 87 Device device = storager.queryVideoDevice(deviceId);
102 88 MediaServerItem newMediaServerItem = playService.getNewMediaServerItem(device);
... ... @@ -110,16 +96,31 @@ public class PlayController {
110 96 DeferredResult<WVPResult<StreamInfo>> result = new DeferredResult<>(userSetting.getPlayTimeout().longValue());
111 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 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 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 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 6 import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
7 7 import com.genersoft.iot.vmp.media.zlm.dto.StreamProxyItem;
8 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 9 import com.genersoft.iot.vmp.service.IStreamProxyService;
12 10 import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
13   -import com.genersoft.iot.vmp.vmanager.bean.WVPResult;
14 11 import com.github.pagehelper.PageInfo;
15 12 import io.swagger.v3.oas.annotations.Operation;
16 13 import io.swagger.v3.oas.annotations.Parameter;
17   -import io.swagger.v3.oas.annotations.Parameters;
18 14 import io.swagger.v3.oas.annotations.tags.Tag;
19 15 import org.slf4j.Logger;
20 16 import org.slf4j.LoggerFactory;
21 17 import org.springframework.beans.factory.annotation.Autowired;
22 18 import org.springframework.stereotype.Controller;
23 19 import org.springframework.util.ObjectUtils;
24   -import org.springframework.util.StringUtils;
25 20 import org.springframework.web.bind.annotation.*;
26 21  
27 22 @SuppressWarnings("rawtypes")
... ... @@ -63,7 +58,7 @@ public class StreamProxyController {
63 58 })
64 59 @PostMapping(value = "/save")
65 60 @ResponseBody
66   - public StreamInfo save(@RequestBody StreamProxyItem param){
  61 + public StreamInfo save(@RequestBody StreamProxyItem param){
67 62 logger.info("添加代理: " + JSONObject.toJSONString(param));
68 63 if (ObjectUtils.isEmpty(param.getMediaServerId())) {
69 64 param.setMediaServerId("auto");
... ...