From a45bb7d9df6c57a05fdc5c8d750c288283f91e49 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期一, 07 三月 2022 08:27:38 +0800
Subject: [PATCH] 导出sql
---
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java | 134 ++++++++++++++++++++++++++++++++++++++++++--
1 files changed, 126 insertions(+), 8 deletions(-)
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
index 5dcffe7..b55b044 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommanderFroPlatform.java
@@ -1,14 +1,20 @@
package com.genersoft.iot.vmp.gb28181.transmit.cmd.impl;
-import com.genersoft.iot.vmp.gb28181.bean.DeviceChannel;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
-import com.genersoft.iot.vmp.gb28181.bean.ParentPlatformCatch;
-import com.genersoft.iot.vmp.gb28181.bean.SubscribeInfo;
+import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.ISIPCommanderForPlatform;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.SIPRequestHeaderPlarformProvider;
+import com.genersoft.iot.vmp.gb28181.utils.DateUtil;
+import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
+import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
+import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.bean.GPSMsgInfo;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
+import com.genersoft.iot.vmp.utils.SerializeUtils;
+import gov.nist.javax.sip.SipProviderImpl;
+import gov.nist.javax.sip.SipStackImpl;
+import gov.nist.javax.sip.message.SIPRequest;
+import gov.nist.javax.sip.stack.SIPDialog;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -17,12 +23,17 @@
import org.springframework.context.annotation.Lazy;
import org.springframework.lang.Nullable;
import org.springframework.stereotype.Component;
+import org.springframework.util.StringUtils;
import javax.sip.*;
+import javax.sip.address.SipURI;
import javax.sip.header.CallIdHeader;
+import javax.sip.header.ViaHeader;
import javax.sip.header.WWWAuthenticateHeader;
import javax.sip.message.Request;
+import java.lang.reflect.Field;
import java.text.ParseException;
+import java.util.HashSet;
import java.util.List;
import java.util.UUID;
@@ -39,17 +50,23 @@
private IRedisCatchStorage redisCatchStorage;
@Autowired
+ private IMediaServerService mediaServerService;
+
+ @Autowired
private SipSubscribe sipSubscribe;
+
+ @Autowired
+ private ZLMRTPServerFactory zlmrtpServerFactory;
@Lazy
@Autowired
@Qualifier(value="tcpSipProvider")
- private SipProvider tcpSipProvider;
+ private SipProviderImpl tcpSipProvider;
@Lazy
@Autowired
@Qualifier(value="udpSipProvider")
- private SipProvider udpSipProvider;
+ private SipProviderImpl udpSipProvider;
@Override
public boolean register(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
@@ -58,13 +75,12 @@
@Override
public boolean unregister(ParentPlatform parentPlatform, SipSubscribe.Event errorEvent , SipSubscribe.Event okEvent) {
- parentPlatform.setExpires("0");
ParentPlatformCatch parentPlatformCatch = redisCatchStorage.queryPlatformCatchInfo(parentPlatform.getServerGBId());
if (parentPlatformCatch != null) {
parentPlatformCatch.setParentPlatform(parentPlatform);
redisCatchStorage.updatePlatformCatchInfo(parentPlatformCatch);
}
-
+ parentPlatform.setExpires("0");
return register(parentPlatform, null, null, errorEvent, okEvent, false);
}
@@ -496,5 +512,107 @@
catalogXml.append("</Notify>\r\n");
return catalogXml.toString();
}
+ @Override
+ public boolean recordInfo(DeviceChannel deviceChannel, ParentPlatform parentPlatform, String fromTag, RecordInfo recordInfo) {
+ if ( parentPlatform ==null) {
+ return false;
+ }
+ try {
+ StringBuffer recordXml = new StringBuffer(600);
+ recordXml.append("<?xml version=\"1.0\" encoding=\"GB2312\"?>\r\n");
+ recordXml.append("<Response>\r\n");
+ recordXml.append("<CmdType>RecordInfo</CmdType>\r\n");
+ recordXml.append("<SN>" +recordInfo.getSn() + "</SN>\r\n");
+ recordXml.append("<DeviceID>" + recordInfo.getDeviceId() + "</DeviceID>\r\n");
+ recordXml.append("<SumNum>" + recordInfo.getSumNum() + "</SumNum>\r\n");
+ recordXml.append("<RecordList Num=\"" + recordInfo.getRecordList().size()+"\">\r\n");
+ for (RecordItem recordItem : recordInfo.getRecordList()) {
+ recordXml.append("<Item>\r\n");
+ if (deviceChannel != null) {
+ recordXml.append("<DeviceID>" + recordItem.getDeviceId() + "</DeviceID>\r\n");
+ recordXml.append("<Name>" + recordItem.getName() + "</Name>\r\n");
+ recordXml.append("<StartTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getStartTime()) + "</StartTime>\r\n");
+ recordXml.append("<EndTime>" + DateUtil.yyyy_MM_dd_HH_mm_ssToISO8601(recordItem.getEndTime()) + "</EndTime>\r\n");
+ recordXml.append("<Secrecy>" + recordItem.getSecrecy() + "</Secrecy>\r\n");
+ recordXml.append("<Type>" + recordItem.getType() + "</Type>\r\n");
+ if (!StringUtils.isEmpty(recordItem.getFileSize())) {
+ recordXml.append("<FileSize>" + recordItem.getFileSize() + "</FileSize>\r\n");
+ }
+ if (!StringUtils.isEmpty(recordItem.getFilePath())) {
+ recordXml.append("<FilePath>" + recordItem.getFilePath() + "</FilePath>\r\n");
+ }
+ }
+ recordXml.append("</Item>\r\n");
+ }
+ recordXml.append("</RecordList>\r\n");
+ recordXml.append("</Response>\r\n");
+
+ // callid
+ CallIdHeader callIdHeader = parentPlatform.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId()
+ : udpSipProvider.getNewCallId();
+ Request request = headerProviderPlarformProvider.createMessageRequest(parentPlatform, recordXml.toString(), fromTag, callIdHeader);
+ transmitRequest(parentPlatform, request);
+
+ } catch (SipException | ParseException | InvalidArgumentException e) {
+ e.printStackTrace();
+ return false;
+ }
+ return true;
+ }
+
+ @Override
+ public void streamByeCmd(ParentPlatform platform, String callId) {
+ SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(platform.getServerGBId(), null, null, callId);
+ if (sendRtpItem != null) {
+ String mediaServerId = sendRtpItem.getMediaServerId();
+ MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
+ if (mediaServerItem != null) {
+ mediaServerService.releaseSsrc(mediaServerItem.getId(), sendRtpItem.getSsrc());
+ zlmrtpServerFactory.closeRTPServer(mediaServerItem, sendRtpItem.getStreamId());
+ }
+ byte[] dialogByteArray = sendRtpItem.getDialog();
+ if (dialogByteArray != null) {
+ SIPDialog dialog = (SIPDialog) SerializeUtils.deSerialize(dialogByteArray);
+ SipStack sipStack = udpSipProvider.getSipStack();
+ SIPDialog sipDialog = ((SipStackImpl) sipStack).putDialog(dialog);
+ if (dialog != sipDialog) {
+ dialog = sipDialog;
+ } else {
+ try {
+ dialog.setSipProvider(udpSipProvider);
+ Field sipStackField = SIPDialog.class.getDeclaredField("sipStack");
+ sipStackField.setAccessible(true);
+ sipStackField.set(dialog, sipStack);
+ Field eventListenersField = SIPDialog.class.getDeclaredField("eventListeners");
+ eventListenersField.setAccessible(true);
+ eventListenersField.set(dialog, new HashSet<>());
+
+ byte[] transactionByteArray = sendRtpItem.getTransaction();
+ ClientTransaction clientTransaction = (ClientTransaction) SerializeUtils.deSerialize(transactionByteArray);
+ Request byeRequest = dialog.createRequest(Request.BYE);
+ SipURI byeURI = (SipURI) byeRequest.getRequestURI();
+ SIPRequest request = (SIPRequest) clientTransaction.getRequest();
+ byeURI.setHost(request.getRemoteAddress().getHostName());
+ byeURI.setPort(request.getRemotePort());
+ if ("TCP".equals(platform.getTransport())) {
+ clientTransaction = tcpSipProvider.getNewClientTransaction(byeRequest);
+ } else if ("UDP".equals(platform.getTransport())) {
+ clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest);
+ }
+ dialog.sendRequest(clientTransaction);
+ } catch (SipException e) {
+ e.printStackTrace();
+ } catch (ParseException e) {
+ e.printStackTrace();
+ } catch (NoSuchFieldException e) {
+ e.printStackTrace();
+ } catch (IllegalAccessException e) {
+ e.printStackTrace();
+ }
+
+ }
+ }
+ }
+ }
}
--
Gitblit v1.8.0