|
|
@@ -1,44 +1,41 @@
|
|
|
package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
|
|
|
|
|
|
-import com.alibaba.fastjson.JSONObject;
|
|
|
+import com.alibaba.fastjson2.JSONObject;
|
|
|
import com.genersoft.iot.vmp.common.HfyAiInfo;
|
|
|
import com.genersoft.iot.vmp.common.StreamInfo;
|
|
|
-import com.genersoft.iot.vmp.conf.DynamicTask;
|
|
|
import com.genersoft.iot.vmp.conf.SipConfig;
|
|
|
import com.genersoft.iot.vmp.conf.UserSetting;
|
|
|
import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException;
|
|
|
+import com.genersoft.iot.vmp.gb28181.SipLayer;
|
|
|
import com.genersoft.iot.vmp.gb28181.bean.*;
|
|
|
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
|
|
|
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
|
|
-import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder;
|
|
|
+import com.genersoft.iot.vmp.gb28181.transmit.SIPSender;
|
|
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommander;
|
|
|
import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderProvider;
|
|
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.TestInviteRequestProcessor;
|
|
|
+import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
|
|
|
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
|
|
|
+import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
|
|
|
import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeFactory;
|
|
|
import com.genersoft.iot.vmp.media.zlm.dto.HookSubscribeForStreamChange;
|
|
|
-
|
|
|
-import com.genersoft.iot.vmp.utils.DateUtil;
|
|
|
-import com.genersoft.iot.vmp.gb28181.utils.NumericUtil;
|
|
|
-import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
|
|
|
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
|
|
|
import com.genersoft.iot.vmp.service.IMediaServerService;
|
|
|
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
|
|
|
-import com.genersoft.iot.vmp.utils.GitUtil;
|
|
|
-import gov.nist.javax.sip.SipProviderImpl;
|
|
|
+import com.genersoft.iot.vmp.utils.DateUtil;
|
|
|
import gov.nist.javax.sip.message.SIPRequest;
|
|
|
import gov.nist.javax.sip.message.SIPResponse;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
-import org.springframework.beans.factory.annotation.Qualifier;
|
|
|
import org.springframework.context.annotation.DependsOn;
|
|
|
import org.springframework.stereotype.Component;
|
|
|
import org.springframework.util.ObjectUtils;
|
|
|
-import org.springframework.web.context.request.async.DeferredResult;
|
|
|
|
|
|
-import javax.sip.*;
|
|
|
-import javax.sip.header.*;
|
|
|
+import javax.sip.InvalidArgumentException;
|
|
|
+import javax.sip.ResponseEvent;
|
|
|
+import javax.sip.SipException;
|
|
|
+import javax.sip.header.CallIdHeader;
|
|
|
import javax.sip.message.Request;
|
|
|
import java.text.ParseException;
|
|
|
import java.util.List;
|
|
|
@@ -58,19 +55,11 @@ public class SIPCommander implements ISIPCommander {
|
|
|
private SipConfig sipConfig;
|
|
|
|
|
|
@Autowired
|
|
|
- private SipFactory sipFactory;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- private GitUtil gitUtil;
|
|
|
-
|
|
|
- @Autowired
|
|
|
- @Qualifier(value = "tcpSipProvider")
|
|
|
- private SipProviderImpl tcpSipProvider;
|
|
|
+ private SipLayer sipLayer;
|
|
|
|
|
|
@Autowired
|
|
|
- @Qualifier(value = "udpSipProvider")
|
|
|
- private SipProviderImpl udpSipProvider;
|
|
|
-
|
|
|
+ private SIPSender sipSender;
|
|
|
+
|
|
|
@Autowired
|
|
|
private SIPRequestHeaderProvider headerProvider;
|
|
|
|
|
|
@@ -83,20 +72,14 @@ public class SIPCommander implements ISIPCommander {
|
|
|
@Autowired
|
|
|
private ZlmHttpHookSubscribe subscribe;
|
|
|
|
|
|
- @Autowired
|
|
|
- private SipSubscribe sipSubscribe;
|
|
|
|
|
|
- @Autowired
|
|
|
- private IMediaServerService mediaServerService;
|
|
|
|
|
|
@Autowired
|
|
|
- private DynamicTask dynamicTask;
|
|
|
+ private IMediaServerService mediaServerService;
|
|
|
|
|
|
@Autowired
|
|
|
private TestInviteRequestProcessor testInviteRequestProcessor;
|
|
|
|
|
|
-
|
|
|
-
|
|
|
/**
|
|
|
* 云台方向放控制,使用配置文件中的默认镜头移动速度
|
|
|
*
|
|
|
@@ -201,7 +184,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
public void ptzCmd(Device device, String channelId, int leftRight, int upDown, int inOut, int moveSpeed,
|
|
|
int zoomSpeed) throws InvalidArgumentException, SipException, ParseException {
|
|
|
String cmdStr = SipUtils.cmdString(leftRight, upDown, inOut, moveSpeed, zoomSpeed);
|
|
|
- StringBuffer ptzXml = new StringBuffer(200);
|
|
|
+ StringBuilder ptzXml = new StringBuilder(200);
|
|
|
String charset = device.getCharset();
|
|
|
ptzXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
|
|
|
ptzXml.append("<Control>\r\n");
|
|
|
@@ -213,13 +196,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
ptzXml.append("<ControlPriority>5</ControlPriority>\r\n");
|
|
|
ptzXml.append("</Info>\r\n");
|
|
|
ptzXml.append("</Control>\r\n");
|
|
|
+
|
|
|
+ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
-
|
|
|
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
-
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
|
|
|
}
|
|
|
|
|
|
|
|
|
@@ -239,12 +219,16 @@ public class SIPCommander implements ISIPCommander {
|
|
|
ptzXml.append("</Info>\r\n");
|
|
|
ptzXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
|
|
|
+// CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+// : udpSipProvider.getNewCallId();
|
|
|
+//
|
|
|
+// Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+//
|
|
|
+// transmitRequest(device.getTransport(), request);
|
|
|
};
|
|
|
|
|
|
/**
|
|
|
@@ -275,11 +259,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
ptzXml.append("</Control>\r\n");
|
|
|
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
|
|
|
- SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+
|
|
|
+ SIPRequest request = (SIPRequest) headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -305,13 +288,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
ptzXml.append("<ControlPriority>5</ControlPriority>\r\n");
|
|
|
ptzXml.append("</Info>\r\n");
|
|
|
ptzXml.append("</Control>\r\n");
|
|
|
-
|
|
|
-
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
-
|
|
|
- Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, okEvent);
|
|
|
+
|
|
|
+
|
|
|
+ Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request, errorEvent, okEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -342,12 +322,17 @@ public class SIPCommander implements ISIPCommander {
|
|
|
subscribe.removeSubscribe(hookSubscribe);
|
|
|
}
|
|
|
});
|
|
|
- //
|
|
|
+ String sdpIp;
|
|
|
+ if (!ObjectUtils.isEmpty(device.getSdpIp())) {
|
|
|
+ sdpIp = device.getSdpIp();
|
|
|
+ }else {
|
|
|
+ sdpIp = mediaServerItem.getSdpIp();
|
|
|
+ }
|
|
|
StringBuffer content = new StringBuffer(200);
|
|
|
content.append("v=0\r\n");
|
|
|
- content.append("o=" + channelId + " 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("s=Play\r\n");
|
|
|
- content.append("c=IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("c=IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("t=0 0\r\n");
|
|
|
|
|
|
if (userSetting.isSeniorSdp()) {
|
|
|
@@ -404,11 +389,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
// f字段:f= v/编码格式/分辨率/帧率/码率类型/码率大小a/编码格式/码率大小/采样率
|
|
|
// content.append("f=v/2/5/25/1/4000a/1/8/1" + "\r\n"); // 未发现支持此特性的设备
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equalsIgnoreCase("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
|
|
|
- Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(), callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, (e -> {
|
|
|
+
|
|
|
+ Request request = headerProvider.createInviteRequest(device, channelId, content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(),sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, (e -> {
|
|
|
streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream());
|
|
|
mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
|
|
|
errorEvent.response(e);
|
|
|
@@ -436,13 +420,18 @@ public class SIPCommander implements ISIPCommander {
|
|
|
|
|
|
|
|
|
logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
|
|
-
|
|
|
+ String sdpIp;
|
|
|
+ if (!ObjectUtils.isEmpty(device.getSdpIp())) {
|
|
|
+ sdpIp = device.getSdpIp();
|
|
|
+ }else {
|
|
|
+ sdpIp = mediaServerItem.getSdpIp();
|
|
|
+ }
|
|
|
StringBuffer content = new StringBuffer(200);
|
|
|
content.append("v=0\r\n");
|
|
|
- content.append("o=" + channelId + " 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("s=Playback\r\n");
|
|
|
content.append("u=" + channelId + ":0\r\n");
|
|
|
- content.append("c=IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("c=IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("t=" + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime) + " "
|
|
|
+ DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) + "\r\n");
|
|
|
|
|
|
@@ -496,27 +485,25 @@ public class SIPCommander implements ISIPCommander {
|
|
|
|
|
|
content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, "rtsp", mediaServerItem.getId());
|
|
|
// 添加订阅
|
|
|
subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
|
|
|
if (hookEvent != null) {
|
|
|
- InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream());
|
|
|
+ InviteStreamInfo inviteStreamInfo = new InviteStreamInfo(mediaServerItemInUse, json,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream());
|
|
|
hookEvent.call(inviteStreamInfo);
|
|
|
}
|
|
|
subscribe.removeSubscribe(hookSubscribe);
|
|
|
});
|
|
|
- Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader, ssrcInfo.getSsrc());
|
|
|
+ Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()), ssrcInfo.getSsrc());
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, event -> {
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, event -> {
|
|
|
ResponseEvent responseEvent = (ResponseEvent) event.event;
|
|
|
SIPResponse response = (SIPResponse) responseEvent.getResponse();
|
|
|
- streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback);
|
|
|
+ streamSession.put(device.getDeviceId(), channelId,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.playback);
|
|
|
okEvent.response(event);
|
|
|
});
|
|
|
if (inviteStreamCallback != null) {
|
|
|
- inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
|
|
|
+ inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()).getCallId(), "rtp", ssrcInfo.getStream()));
|
|
|
}
|
|
|
}
|
|
|
|
|
|
@@ -542,7 +529,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
// String _ssrc = ssrcInfo.getSsrc();
|
|
|
return content.toString();
|
|
|
}
|
|
|
- public void sendBoradcastInviteCmd(ServerTransaction serverTransaction,MediaServerItem mediaServerItem,SSRCInfo ssrcInfo,Device device,
|
|
|
+ public void sendBoradcastInviteCmd(SIPRequest request,MediaServerItem mediaServerItem,SSRCInfo ssrcInfo,Device device,
|
|
|
String startTime, String endTime,
|
|
|
InviteStreamCallback inviteStreamCallback,
|
|
|
SipSubscribe.Event okEvent,
|
|
|
@@ -553,8 +540,8 @@ public class SIPCommander implements ISIPCommander {
|
|
|
// 使用 返回sdp ack 数据给设备
|
|
|
logger.info("返回给设备的 audio invite sdp部分为{}",sdpContent);
|
|
|
try {
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+// CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+// : udpSipProvider.getNewCallId();
|
|
|
// dynamicTask.startDelay(callIdHeader.getCallId(), () -> {
|
|
|
// logger.info("Ack 等待超时");
|
|
|
// // 释放 zlm 的推流端口
|
|
|
@@ -572,7 +559,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
// device.getHostAddress(),
|
|
|
// device.getPort()
|
|
|
// );
|
|
|
- testInviteRequestProcessor.responseBroadcastSdpACK(serverTransaction,
|
|
|
+ testInviteRequestProcessor.responseBroadcastSdpACK(request,
|
|
|
sdpContent,
|
|
|
sipConfig.getId(),
|
|
|
mediaServerItem.getSdpIp(),
|
|
|
@@ -612,17 +599,23 @@ public class SIPCommander implements ISIPCommander {
|
|
|
*/
|
|
|
@Override
|
|
|
public void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
|
|
|
- String startTime, String endTime, int downloadSpeed, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
|
|
|
- SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
+ String startTime, String endTime, int downloadSpeed,
|
|
|
+ InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
|
|
|
+ SipSubscribe.Event errorEvent,SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
|
|
|
logger.info("{} 分配的ZLM为: {} [{}:{}]", ssrcInfo.getStream(), mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
|
|
-
|
|
|
+ String sdpIp;
|
|
|
+ if (!ObjectUtils.isEmpty(device.getSdpIp())) {
|
|
|
+ sdpIp = device.getSdpIp();
|
|
|
+ }else {
|
|
|
+ sdpIp = mediaServerItem.getSdpIp();
|
|
|
+ }
|
|
|
StringBuffer content = new StringBuffer(200);
|
|
|
content.append("v=0\r\n");
|
|
|
- content.append("o=" + channelId + " 0 0 IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("o=" + channelId + " 0 0 IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("s=Download\r\n");
|
|
|
content.append("u=" + channelId + ":0\r\n");
|
|
|
- content.append("c=IN IP4 " + mediaServerItem.getSdpIp() + "\r\n");
|
|
|
+ content.append("c=IN IP4 " + sdpIp + "\r\n");
|
|
|
content.append("t=" + DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(startTime) + " "
|
|
|
+ DateUtil.yyyy_MM_dd_HH_mm_ssToTimestamp(endTime) + "\r\n");
|
|
|
|
|
|
@@ -677,14 +670,14 @@ public class SIPCommander implements ISIPCommander {
|
|
|
content.append("a=downloadspeed:" + downloadSpeed + "\r\n");
|
|
|
|
|
|
content.append("y=" + ssrcInfo.getSsrc() + "\r\n");//ssrc
|
|
|
-
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
-
|
|
|
+ logger.debug("此时请求下载信令的ssrc===>{}",ssrcInfo.getSsrc());
|
|
|
HookSubscribeForStreamChange hookSubscribe = HookSubscribeFactory.on_stream_changed("rtp", ssrcInfo.getStream(), true, null, mediaServerItem.getId());
|
|
|
// 添加订阅
|
|
|
+ CallIdHeader newCallIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()), device.getTransport());
|
|
|
+ String callId=newCallIdHeader.getCallId();
|
|
|
subscribe.addSubscribe(hookSubscribe, (MediaServerItem mediaServerItemInUse, JSONObject json) -> {
|
|
|
- hookEvent.call(new InviteStreamInfo(mediaServerItem, json, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
|
|
|
+ logger.debug("sipc 添加订阅===callId {}",callId);
|
|
|
+ hookEvent.call(new InviteStreamInfo(mediaServerItem, json,callId, "rtp", ssrcInfo.getStream()));
|
|
|
subscribe.removeSubscribe(hookSubscribe);
|
|
|
hookSubscribe.getContent().put("regist", false);
|
|
|
hookSubscribe.getContent().put("schema", "rtsp");
|
|
|
@@ -693,7 +686,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
(MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd) -> {
|
|
|
logger.info("[录像]下载结束, 发送BYE");
|
|
|
try {
|
|
|
- streamByeCmd(device, channelId, ssrcInfo.getStream(), callIdHeader.getCallId());
|
|
|
+ streamByeCmd(device, channelId, ssrcInfo.getStream(),callId);
|
|
|
} catch (InvalidArgumentException | ParseException | SipException |
|
|
|
SsrcTransactionNotFoundException e) {
|
|
|
logger.error("[录像]下载结束, 发送BYE失败 {}", e.getMessage());
|
|
|
@@ -701,14 +694,24 @@ public class SIPCommander implements ISIPCommander {
|
|
|
});
|
|
|
});
|
|
|
|
|
|
- Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader, ssrcInfo.getSsrc());
|
|
|
+ Request request = headerProvider.createPlaybackInviteRequest(device, channelId, content.toString(), null, SipUtils.getNewFromTag(), null,newCallIdHeader, ssrcInfo.getSsrc());
|
|
|
if (inviteStreamCallback != null) {
|
|
|
- inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null, callIdHeader.getCallId(), "rtp", ssrcInfo.getStream()));
|
|
|
+ inviteStreamCallback.call(new InviteStreamInfo(mediaServerItem, null,callId, "rtp", ssrcInfo.getStream()));
|
|
|
}
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, okEvent -> {
|
|
|
- ResponseEvent responseEvent = (ResponseEvent) okEvent.event;
|
|
|
+
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, event -> {
|
|
|
+ ResponseEvent responseEvent = (ResponseEvent) event.event;
|
|
|
SIPResponse response = (SIPResponse) responseEvent.getResponse();
|
|
|
- streamSession.put(device.getDeviceId(), channelId, callIdHeader.getCallId(), ssrcInfo.getStream(), ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
|
|
|
+ String contentString =new String(response.getRawContent());
|
|
|
+ int ssrcIndex = contentString.indexOf("y=");
|
|
|
+ String ssrc=ssrcInfo.getSsrc();
|
|
|
+ if (ssrcIndex >= 0) {
|
|
|
+ ssrc = contentString.substring(ssrcIndex + 2, ssrcIndex + 12);
|
|
|
+ }
|
|
|
+ logger.debug("接收到的下载响应ssrc====>{}",ssrcInfo.getSsrc());
|
|
|
+ logger.debug("接收到的下载响应ssrc====>{}",ssrc);
|
|
|
+ streamSession.put(device.getDeviceId(), channelId, response.getCallIdHeader().getCallId(), ssrcInfo.getStream(), ssrc, mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.download);
|
|
|
+ okEvent.response(event);
|
|
|
});
|
|
|
}
|
|
|
|
|
|
@@ -735,7 +738,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
|
|
|
|
|
|
Request byteRequest = headerProvider.createByteRequest(device, channelId, ssrcTransaction.getSipTransactionInfo());
|
|
|
- transmitRequest(device.getTransport(), byteRequest, null, okEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), byteRequest, null, okEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -768,12 +771,13 @@ public class SIPCommander implements ISIPCommander {
|
|
|
broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
|
|
|
broadcastXml.append("</Notify>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+// CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
+// : udpSipProvider.getNewCallId();
|
|
|
+// Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+// transmitRequest(device.getTransport(), request);
|
|
|
logger.info("[下发broadcast]");
|
|
|
- Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
-
|
|
|
+ Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
|
|
|
}
|
|
|
|
|
|
public void startAudioBroadcastCmd(MediaServerItem mediaServerItem,
|
|
|
@@ -789,8 +793,8 @@ public class SIPCommander implements ISIPCommander {
|
|
|
}
|
|
|
logger.info("{} 分配的ZLM为: {} [{}:{}]", stream, mediaServerItem.getId(), mediaServerItem.getIp(), ssrcInfo.getPort());
|
|
|
// 创建broadcast 触发器
|
|
|
- DeferredResult<String> result = new DeferredResult<>(3 * 1000L);
|
|
|
- String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + device.getDeviceId();
|
|
|
+// DeferredResult<String> result = new DeferredResult<>(3 * 1000L);
|
|
|
+// String key = DeferredResultHolder.CALLBACK_CMD_BROADCAST + device.getDeviceId();
|
|
|
// 下发broadcast命令
|
|
|
StringBuffer broadcastXml = new StringBuffer(200);
|
|
|
String charset = device.getCharset();
|
|
|
@@ -802,6 +806,11 @@ public class SIPCommander implements ISIPCommander {
|
|
|
broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
|
|
|
broadcastXml.append("</Notify>\r\n");
|
|
|
|
|
|
+
|
|
|
+
|
|
|
+ Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
|
|
|
+
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -817,11 +826,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n");
|
|
|
broadcastXml.append("</Notify>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -834,7 +842,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
* @param recordCmdStr 录像命令:Record / StopRecord
|
|
|
*/
|
|
|
@Override
|
|
|
- public void recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
+ public void recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
StringBuffer cmdXml = new StringBuffer(200);
|
|
|
String charset = device.getCharset();
|
|
|
cmdXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n");
|
|
|
@@ -849,11 +857,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
cmdXml.append("<RecordCmd>" + recordCmdStr + "</RecordCmd>\r\n");
|
|
|
cmdXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -874,11 +881,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
cmdXml.append("<TeleBoot>Boot</TeleBoot>\r\n");
|
|
|
cmdXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -888,7 +894,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
* @param guardCmdStr "SetGuard"/"ResetGuard"
|
|
|
*/
|
|
|
@Override
|
|
|
- public void guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
+ public void guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
|
|
|
StringBuffer cmdXml = new StringBuffer(200);
|
|
|
String charset = device.getCharset();
|
|
|
@@ -900,11 +906,8 @@ public class SIPCommander implements ISIPCommander {
|
|
|
cmdXml.append("<GuardCmd>" + guardCmdStr + "</GuardCmd>\r\n");
|
|
|
cmdXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
-
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -913,7 +916,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
* @param device 视频设备
|
|
|
*/
|
|
|
@Override
|
|
|
- public void alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
+ public void alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
|
|
|
StringBuffer cmdXml = new StringBuffer(200);
|
|
|
String charset = device.getCharset();
|
|
|
@@ -937,11 +940,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
}
|
|
|
cmdXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -967,23 +969,23 @@ public class SIPCommander implements ISIPCommander {
|
|
|
cmdXml.append("<IFameCmd>Send</IFameCmd>\r\n");
|
|
|
cmdXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 看守位控制命令
|
|
|
*
|
|
|
* @param device 视频设备
|
|
|
+ * @param channelId 通道id,非通道则是设备本身
|
|
|
* @param enabled 看守位使能:1 = 开启,0 = 关闭
|
|
|
* @param resetTime 自动归位时间间隔,开启看守位时使用,单位:秒(s)
|
|
|
* @param presetIndex 调用预置位编号,开启看守位时使用,取值范围0~255
|
|
|
*/
|
|
|
@Override
|
|
|
- public void homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
+ public void homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent,SipSubscribe.Event okEvent) throws InvalidArgumentException, SipException, ParseException {
|
|
|
|
|
|
StringBuffer cmdXml = new StringBuffer(200);
|
|
|
String charset = device.getCharset();
|
|
|
@@ -1015,11 +1017,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
cmdXml.append("</HomePosition>\r\n");
|
|
|
cmdXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent,okEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1079,11 +1080,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
cmdXml.append("</BasicParam>\r\n");
|
|
|
cmdXml.append("</Control>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1103,12 +1103,9 @@ public class SIPCommander implements ISIPCommander {
|
|
|
catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
|
|
|
catalogXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
-
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1128,12 +1125,11 @@ public class SIPCommander implements ISIPCommander {
|
|
|
catalogXml.append("<DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
|
|
|
catalogXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -1154,12 +1150,11 @@ public class SIPCommander implements ISIPCommander {
|
|
|
catalogXml.append(" <DeviceID>" + device.getDeviceId() + "</DeviceID>\r\n");
|
|
|
catalogXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, catalogXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1200,13 +1195,12 @@ public class SIPCommander implements ISIPCommander {
|
|
|
}
|
|
|
recordInfoXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
Request request = headerProvider.createMessageRequest(device, recordInfoXml.toString(),
|
|
|
- SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+ SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, okEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1252,11 +1246,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
}
|
|
|
cmdXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1283,11 +1276,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
cmdXml.append("<ConfigType>" + configType + "</ConfigType>\r\n");
|
|
|
cmdXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1311,11 +1303,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
}
|
|
|
cmdXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, cmdXml.toString(), null, SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -1336,12 +1327,11 @@ public class SIPCommander implements ISIPCommander {
|
|
|
mobilePostitionXml.append("<Interval>60</Interval>\r\n");
|
|
|
mobilePostitionXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+ Request request = headerProvider.createMessageRequest(device, mobilePostitionXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -1369,14 +1359,13 @@ public class SIPCommander implements ISIPCommander {
|
|
|
CallIdHeader callIdHeader;
|
|
|
|
|
|
if (requestOld != null) {
|
|
|
- callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
|
|
|
+ callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
|
|
|
} else {
|
|
|
- callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+ callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
|
|
|
}
|
|
|
- SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), requestOld, device.getSubscribeCycleForMobilePosition(), "presence", callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
|
|
|
+ SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, subscribePostitionXml.toString(), requestOld, device.getSubscribeCycleForMobilePosition(), "presence",callIdHeader); //Position;id=" + tm.substring(tm.length() - 4));
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, okEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
@@ -1423,11 +1412,10 @@ public class SIPCommander implements ISIPCommander {
|
|
|
}
|
|
|
cmdXml.append("</Query>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+
|
|
|
|
|
|
- Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence", callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+ Request request = headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "presence",sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request);
|
|
|
|
|
|
}
|
|
|
|
|
|
@@ -1446,20 +1434,18 @@ public class SIPCommander implements ISIPCommander {
|
|
|
CallIdHeader callIdHeader;
|
|
|
|
|
|
if (requestOld != null) {
|
|
|
- callIdHeader = sipFactory.createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
|
|
|
+ callIdHeader = sipLayer.getSipFactory().createHeaderFactory().createCallIdHeader(requestOld.getCallIdHeader().getCallId());
|
|
|
} else {
|
|
|
- callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+ callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
|
|
|
}
|
|
|
|
|
|
// 有效时间默认为60秒以上
|
|
|
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), requestOld, device.getSubscribeCycleForCatalog(), "Catalog",
|
|
|
callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, okEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
public SIPRequest hfyAiAlarmSubScribe(Device device, int expires, String startTime, String endTime, List<HfyAiInfo> aiDataList, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent)throws InvalidArgumentException, SipException, ParseException {
|
|
|
StringBuffer cmdXml = new StringBuffer(200);
|
|
|
@@ -1501,11 +1487,12 @@ public class SIPCommander implements ISIPCommander {
|
|
|
|
|
|
CallIdHeader callIdHeader;
|
|
|
|
|
|
- callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
+ callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport());
|
|
|
|
|
|
+// SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "hfyAi", callIdHeader);
|
|
|
+// transmitRequest(device.getTransport(), request, errorEvent, okEvent);
|
|
|
SIPRequest request = (SIPRequest) headerProvider.createSubscribeRequest(device, cmdXml.toString(), null, expires, "hfyAi", callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, okEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request,errorEvent, okEvent);
|
|
|
return request;
|
|
|
}
|
|
|
|
|
|
@@ -1525,59 +1512,14 @@ public class SIPCommander implements ISIPCommander {
|
|
|
}
|
|
|
dragXml.append(cmdString);
|
|
|
dragXml.append("</Control>\r\n");
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
- Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
+
|
|
|
+ Request request = headerProvider.createMessageRequest(device, dragXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
logger.debug("拉框信令: " + request.toString());
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
|
|
|
}
|
|
|
|
|
|
|
|
|
- @Override
|
|
|
- public void transmitRequest(String transport, Request request) throws SipException, ParseException {
|
|
|
- transmitRequest(transport, request, null, null);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void transmitRequest(String transport, Request request, SipSubscribe.Event errorEvent) throws SipException, ParseException {
|
|
|
- transmitRequest(transport, request, errorEvent, null);
|
|
|
- }
|
|
|
-
|
|
|
- @Override
|
|
|
- public void transmitRequest(String transport, Request request, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) throws SipException, ParseException {
|
|
|
-
|
|
|
- if (request.getHeader(UserAgentHeader.NAME) == null) {
|
|
|
- try {
|
|
|
- request.addHeader(SipUtils.createUserAgentHeader(sipFactory, gitUtil));
|
|
|
- } catch (ParseException e) {
|
|
|
- logger.error("添加UserAgentHeader失败", e);
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
|
|
|
- // 添加错误订阅
|
|
|
- if (errorEvent != null) {
|
|
|
- sipSubscribe.addErrorSubscribe(callIdHeader.getCallId(), (eventResult -> {
|
|
|
- errorEvent.response(eventResult);
|
|
|
- sipSubscribe.removeErrorSubscribe(eventResult.callId);
|
|
|
- sipSubscribe.removeOkSubscribe(eventResult.callId);
|
|
|
- }));
|
|
|
- }
|
|
|
- // 添加订阅
|
|
|
- if (okEvent != null) {
|
|
|
- sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), eventResult -> {
|
|
|
- okEvent.response(eventResult);
|
|
|
- sipSubscribe.removeOkSubscribe(eventResult.callId);
|
|
|
- sipSubscribe.removeErrorSubscribe(eventResult.callId);
|
|
|
- });
|
|
|
- }
|
|
|
- if ("TCP".equals(transport)) {
|
|
|
- tcpSipProvider.sendRequest(request);
|
|
|
- } else if ("UDP".equals(transport)) {
|
|
|
- udpSipProvider.sendRequest(request);
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
+
|
|
|
|
|
|
|
|
|
/**
|
|
|
@@ -1652,7 +1594,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- transmitRequest(device.getTransport(), request, errorEvent, okEvent);
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()), request, errorEvent, okEvent);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -1660,7 +1602,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
if (device == null) {
|
|
|
return;
|
|
|
}
|
|
|
- logger.info("[发送 报警通知] {}/{}->{},{}", device.getDeviceId(), deviceAlarm.getChannelId(),
|
|
|
+ logger.info("[发送报警通知]设备: {}/{}->{},{}", device.getDeviceId(), deviceAlarm.getChannelId(),
|
|
|
deviceAlarm.getLongitude(), deviceAlarm.getLatitude());
|
|
|
|
|
|
String characterSet = device.getCharset();
|
|
|
@@ -1672,7 +1614,7 @@ public class SIPCommander implements ISIPCommander {
|
|
|
deviceStatusXml.append("<DeviceID>" + deviceAlarm.getChannelId() + "</DeviceID>\r\n");
|
|
|
deviceStatusXml.append("<AlarmPriority>" + deviceAlarm.getAlarmPriority() + "</AlarmPriority>\r\n");
|
|
|
deviceStatusXml.append("<AlarmMethod>" + deviceAlarm.getAlarmMethod() + "</AlarmMethod>\r\n");
|
|
|
- deviceStatusXml.append("<AlarmTime>" + deviceAlarm.getAlarmTime() + "</AlarmTime>\r\n");
|
|
|
+ deviceStatusXml.append("<AlarmTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(deviceAlarm.getAlarmTime()) + "</AlarmTime>\r\n");
|
|
|
deviceStatusXml.append("<AlarmDescription>" + deviceAlarm.getAlarmDescription() + "</AlarmDescription>\r\n");
|
|
|
deviceStatusXml.append("<Longitude>" + deviceAlarm.getLongitude() + "</Longitude>\r\n");
|
|
|
deviceStatusXml.append("<Latitude>" + deviceAlarm.getLatitude() + "</Latitude>\r\n");
|
|
|
@@ -1681,10 +1623,9 @@ public class SIPCommander implements ISIPCommander {
|
|
|
deviceStatusXml.append("</info>\r\n");
|
|
|
deviceStatusXml.append("</Notify>\r\n");
|
|
|
|
|
|
- CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
|
|
|
- : udpSipProvider.getNewCallId();
|
|
|
- Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, callIdHeader);
|
|
|
- transmitRequest(device.getTransport(), request);
|
|
|
+
|
|
|
+ Request request = headerProvider.createMessageRequest(device, deviceStatusXml.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null,sipSender.getNewCallIdHeader(sipLayer.getLocalIp(device.getLocalIp()),device.getTransport()));
|
|
|
+ sipSender.transmitRequest(sipLayer.getLocalIp(device.getLocalIp()),request);
|
|
|
|
|
|
|
|
|
}
|