添加国标级联录像控制功能

pull/530/head
mk1990 2022-06-22 16:26:41 +08:00
parent 6c919937bd
commit 4b4afa4ef7
3 changed files with 2465 additions and 2428 deletions

View File

@ -1,355 +1,355 @@
package com.genersoft.iot.vmp.gb28181.transmit.cmd; package com.genersoft.iot.vmp.gb28181.transmit.cmd;
import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe; import com.genersoft.iot.vmp.media.zlm.ZLMHttpHookSubscribe;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.service.bean.SSRCInfo; import com.genersoft.iot.vmp.service.bean.SSRCInfo;
import javax.sip.Dialog; import javax.sip.Dialog;
/** /**
* @description: * @description:
* @author: swwheihei * @author: swwheihei
* @date: 202053 9:16:34 * @date: 202053 9:16:34
*/ */
public interface ISIPCommander { public interface ISIPCommander {
/** /**
* 使 * 使
* *
* @param device * @param device
* @param channelId * @param channelId
* @param leftRight 0: 1: 2: * @param leftRight 0: 1: 2:
* @param upDown 0: 1: 2: * @param upDown 0: 1: 2:
*/ */
boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown); boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown);
/** /**
* *
* *
* @param device * @param device
* @param channelId * @param channelId
* @param leftRight 0: 1: 2: * @param leftRight 0: 1: 2:
* @param upDown 0: 1: 2: * @param upDown 0: 1: 2:
* @param moveSpeed * @param moveSpeed
*/ */
boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown, int moveSpeed); boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown, int moveSpeed);
/** /**
* 使 * 使
* *
* @param device * @param device
* @param channelId * @param channelId
* @param inOut 0: 1: 2: * @param inOut 0: 1: 2:
*/ */
boolean ptzZoomCmd(Device device,String channelId,int inOut); boolean ptzZoomCmd(Device device,String channelId,int inOut);
/** /**
* *
* *
* @param device * @param device
* @param channelId * @param channelId
* @param inOut 0: 1: 2: * @param inOut 0: 1: 2:
*/ */
boolean ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed); boolean ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed);
/** /**
* *
* *
* @param device * @param device
* @param channelId * @param channelId
* @param leftRight 0: 1: 2: * @param leftRight 0: 1: 2:
* @param upDown 0: 1: 2: * @param upDown 0: 1: 2:
* @param inOut 0: 1: 2: * @param inOut 0: 1: 2:
* @param moveSpeed * @param moveSpeed
* @param zoomSpeed * @param zoomSpeed
*/ */
boolean ptzCmd(Device device,String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed); boolean ptzCmd(Device device,String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed);
/** /**
* PTZFI * PTZFI
* *
* @param device * @param device
* @param channelId * @param channelId
* @param cmdCode * @param cmdCode
* @param parameter1 1 * @param parameter1 1
* @param parameter2 2 * @param parameter2 2
* @param combineCode2 2 * @param combineCode2 2
*/ */
boolean frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2); boolean frontEndCmd(Device device, String channelId, int cmdCode, int parameter1, int parameter2, int combineCode2);
/** /**
* *
* @param device * @param device
* @param channelId * @param channelId
* @param cmdString * @param cmdString
*/ */
boolean fronEndCmd(Device device, String channelId, String cmdString, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent); boolean fronEndCmd(Device device, String channelId, String cmdString, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent);
/** /**
* *
* @param device * @param device
* @param channelId * @param channelId
*/ */
void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent); void playStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @param channelId * @param channelId
* @param startTime ,yyyy-MM-dd HH:mm:ss * @param startTime ,yyyy-MM-dd HH:mm:ss
* @param endTime ,yyyy-MM-dd HH:mm:ss * @param endTime ,yyyy-MM-dd HH:mm:ss
*/ */
void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInf, Device device, String channelId, String startTime, String endTime,InviteStreamCallback inviteStreamCallback, InviteStreamCallback event, SipSubscribe.Event errorEvent); void playbackStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInf, Device device, String channelId, String startTime, String endTime,InviteStreamCallback inviteStreamCallback, InviteStreamCallback event, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @param channelId * @param channelId
* @param startTime ,yyyy-MM-dd HH:mm:ss * @param startTime ,yyyy-MM-dd HH:mm:ss
* @param endTime ,yyyy-MM-dd HH:mm:ss * @param endTime ,yyyy-MM-dd HH:mm:ss
* @param downloadSpeed * @param downloadSpeed
*/ */
void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId, void downloadStreamCmd(MediaServerItem mediaServerItem, SSRCInfo ssrcInfo, Device device, String channelId,
String startTime, String endTime, int downloadSpeed, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent, String startTime, String endTime, int downloadSpeed, InviteStreamCallback inviteStreamCallback, InviteStreamCallback hookEvent,
SipSubscribe.Event errorEvent); SipSubscribe.Event errorEvent);
/** /**
* *
*/ */
void streamByeCmd(String deviceId, String channelId, String stream, String callId, SipSubscribe.Event okEvent); void streamByeCmd(String deviceId, String channelId, String stream, String callId, SipSubscribe.Event okEvent);
void streamByeCmd(String deviceId, String channelId, String stream, String callId); void streamByeCmd(String deviceId, String channelId, String stream, String callId);
/** /**
* *
*/ */
void playPauseCmd(Device device, StreamInfo streamInfo); void playPauseCmd(Device device, StreamInfo streamInfo);
/** /**
* *
*/ */
void playResumeCmd(Device device, StreamInfo streamInfo); void playResumeCmd(Device device, StreamInfo streamInfo);
/** /**
* *
*/ */
void playSeekCmd(Device device, StreamInfo streamInfo, long seekTime); void playSeekCmd(Device device, StreamInfo streamInfo, long seekTime);
/** /**
* *
*/ */
void playSpeedCmd(Device device, StreamInfo streamInfo, Double speed); void playSpeedCmd(Device device, StreamInfo streamInfo, Double speed);
/** /**
* *
* @param device * @param device
* @param streamInfo * @param streamInfo
* @param content * @param content
*/ */
void playbackControlCmd(Device device, StreamInfo streamInfo, String content); void playbackControlCmd(Device device, StreamInfo streamInfo, String content,SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent);
/** /**
* 广 * 广
* *
* @param device * @param device
* @param channelId * @param channelId
*/ */
boolean audioBroadcastCmd(Device device,String channelId); boolean audioBroadcastCmd(Device device,String channelId);
/** /**
* 广 * 广
* *
* @param device * @param device
*/ */
void audioBroadcastCmd(Device device, SipSubscribe.Event okEvent); void audioBroadcastCmd(Device device, SipSubscribe.Event okEvent);
boolean audioBroadcastCmd(Device device); boolean audioBroadcastCmd(Device device);
/** /**
* *
* *
* @param device * @param device
* @param channelId * @param channelId
* @param recordCmdStr Record / StopRecord * @param recordCmdStr Record / StopRecord
*/ */
boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent); boolean recordCmd(Device device, String channelId, String recordCmdStr, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
*/ */
boolean teleBootCmd(Device device); boolean teleBootCmd(Device device);
/** /**
* / * /
* *
* @param device * @param device
*/ */
boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent); boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @param alarmMethod * @param alarmMethod
* @param alarmType * @param alarmType
*/ */
boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent); boolean alarmCmd(Device device, String alarmMethod, String alarmType, SipSubscribe.Event errorEvent);
/** /**
* ,IDR * ,IDR
* *
* @param device * @param device
* @param channelId * @param channelId
*/ */
boolean iFrameCmd(Device device, String channelId); boolean iFrameCmd(Device device, String channelId);
/** /**
* *
* *
* @param device * @param device
* @param enabled 使1 = 0 = * @param enabled 使1 = 0 =
* @param resetTime 使:(s) * @param resetTime 使:(s)
* @param presetIndex 使0~255 * @param presetIndex 使0~255
*/ */
boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent); boolean homePositionCmd(Device device, String channelId, String enabled, String resetTime, String presetIndex, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
*/ */
boolean deviceConfigCmd(Device device); boolean deviceConfigCmd(Device device);
/** /**
* basicParam * basicParam
* *
* @param device * @param device
* @param channelId * @param channelId
* @param name / * @param name /
* @param expiration * @param expiration
* @param heartBeatInterval * @param heartBeatInterval
* @param heartBeatCount * @param heartBeatCount
*/ */
boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent); boolean deviceBasicConfigCmd(Device device, String channelId, String name, String expiration, String heartBeatInterval, String heartBeatCount, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
*/ */
boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent); boolean deviceStatusQuery(Device device, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @return * @return
*/ */
boolean deviceInfoQuery(Device device); boolean deviceInfoQuery(Device device);
/** /**
* *
* *
* @param device * @param device
*/ */
boolean catalogQuery(Device device, int sn, SipSubscribe.Event errorEvent); boolean catalogQuery(Device device, int sn, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @param startTime ,yyyy-MM-dd HH:mm:ss * @param startTime ,yyyy-MM-dd HH:mm:ss
* @param endTime ,yyyy-MM-dd HH:mm:ss * @param endTime ,yyyy-MM-dd HH:mm:ss
* @param sn * @param sn
*/ */
boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, Integer Secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent); boolean recordInfoQuery(Device device, String channelId, String startTime, String endTime, int sn, Integer Secrecy, String type, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @param startPriority * @param startPriority
* @param endPriority * @param endPriority
* @param alarmMethod * @param alarmMethod
* @param alarmType * @param alarmType
* @param startTime * @param startTime
* @param endTime * @param endTime
* @return true = * @return true =
*/ */
boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod, boolean alarmInfoQuery(Device device, String startPriority, String endPriority, String alarmMethod,
String alarmType, String startTime, String endTime, SipSubscribe.Event errorEvent); String alarmType, String startTime, String endTime, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @param channelId * @param channelId
* @param configType * @param configType
*/ */
boolean deviceConfigQuery(Device device, String channelId, String configType, SipSubscribe.Event errorEvent); boolean deviceConfigQuery(Device device, String channelId, String configType, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
*/ */
boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent); boolean presetQuery(Device device, String channelId, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
*/ */
boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent); boolean mobilePostitionQuery(Device device, SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @return true = * @return true =
*/ */
boolean mobilePositionSubscribe(Device device, Dialog dialog, SipSubscribe.Event okEvent , SipSubscribe.Event errorEvent); boolean mobilePositionSubscribe(Device device, Dialog dialog, SipSubscribe.Event okEvent , SipSubscribe.Event errorEvent);
/** /**
* *
* @param device * @param device
* @param expires 0 = * @param expires 0 =
* @param startPriority * @param startPriority
* @param endPriority * @param endPriority
* @param alarmType * @param alarmType
* @param startTime * @param startTime
* @param endTime * @param endTime
* @return true = * @return true =
*/ */
boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime); boolean alarmSubscribe(Device device, int expires, String startPriority, String endPriority, String alarmMethod, String alarmType, String startTime, String endTime);
/** /**
* *
* @param device * @param device
* @return true = * @return true =
*/ */
boolean catalogSubscribe(Device device, Dialog dialog, SipSubscribe.Event okEvent ,SipSubscribe.Event errorEvent); boolean catalogSubscribe(Device device, Dialog dialog, SipSubscribe.Event okEvent ,SipSubscribe.Event errorEvent);
/** /**
* *
* *
* @param device * @param device
* @param channelId id * @param channelId id
* @param cmdString * @param cmdString
*/ */
boolean dragZoomCmd(Device device, String channelId, String cmdString); boolean dragZoomCmd(Device device, String channelId, String cmdString);
/** /**
* NOTIFY * NOTIFY
* @param device * @param device
* @param deviceAlarm * @param deviceAlarm
* @return * @return
*/ */
boolean sendAlarmMessage(Device device, DeviceAlarm deviceAlarm); boolean sendAlarmMessage(Device device, DeviceAlarm deviceAlarm);
} }

View File

@ -1,121 +1,143 @@
package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.info; package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.info;
import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.gb28181.bean.*; import com.genersoft.iot.vmp.gb28181.bean.*;
import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager; import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver; import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor;
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent; import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
import com.genersoft.iot.vmp.gb28181.utils.SipUtils; import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
import gov.nist.javax.sip.message.SIPRequest; import gov.nist.javax.sip.message.SIPRequest;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import javax.sip.InvalidArgumentException; import javax.sip.InvalidArgumentException;
import javax.sip.RequestEvent; import javax.sip.RequestEvent;
import javax.sip.SipException; import javax.sip.SipException;
import javax.sip.header.*; import javax.sip.header.*;
import javax.sip.message.Response; import javax.sip.message.Response;
import java.text.ParseException; import java.text.ParseException;
@Component @Component
public class InfoRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor { public class InfoRequestProcessor extends SIPRequestProcessorParent implements InitializingBean, ISIPRequestProcessor {
private final static Logger logger = LoggerFactory.getLogger(InfoRequestProcessor.class); private final static Logger logger = LoggerFactory.getLogger(InfoRequestProcessor.class);
private final String method = "INFO"; private final String method = "INFO";
@Autowired @Autowired
private SIPProcessorObserver sipProcessorObserver; private SIPProcessorObserver sipProcessorObserver;
@Autowired @Autowired
private IVideoManagerStorage storage; private IVideoManagerStorage storage;
@Autowired @Autowired
private SipSubscribe sipSubscribe; private SipSubscribe sipSubscribe;
@Autowired @Autowired
private IRedisCatchStorage redisCatchStorage; private IRedisCatchStorage redisCatchStorage;
@Autowired @Autowired
private IVideoManagerStorage storager; private IVideoManagerStorage storager;
@Autowired @Autowired
private SIPCommander cmder; private SIPCommander cmder;
@Autowired @Autowired
private VideoStreamSessionManager sessionManager; private VideoStreamSessionManager sessionManager;
@Override @Override
public void afterPropertiesSet() throws Exception { public void afterPropertiesSet() throws Exception {
// 添加消息处理的订阅 // 添加消息处理的订阅
sipProcessorObserver.addRequestProcessor(method, this); sipProcessorObserver.addRequestProcessor(method, this);
} }
@Override @Override
public void process(RequestEvent evt) { public void process(RequestEvent evt) {
logger.debug("接收到消息:" + evt.getRequest()); logger.debug("接收到消息:" + evt.getRequest());
String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME); CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
// 先从会话内查找 // 先从会话内查找
SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null); SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null);
if (ssrcTransaction != null) { // 兼容海康 媒体通知 消息from字段不是设备ID的问题 if (ssrcTransaction != null) { // 兼容海康 媒体通知 消息from字段不是设备ID的问题
deviceId = ssrcTransaction.getDeviceId(); deviceId = ssrcTransaction.getDeviceId();
} }
// 查询设备是否存在 // 查询设备是否存在
Device device = redisCatchStorage.getDevice(deviceId); Device device = redisCatchStorage.getDevice(deviceId);
// 查询上级平台是否存在 // 查询上级平台是否存在
ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId); ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId);
try { try {
if (device != null && parentPlatform != null) { if (device != null && parentPlatform != null) {
logger.warn("[重复]平台与设备编号重复:{}", deviceId); logger.warn("[重复]平台与设备编号重复:{}", deviceId);
SIPRequest request = (SIPRequest) evt.getRequest(); SIPRequest request = (SIPRequest) evt.getRequest();
String hostAddress = request.getRemoteAddress().getHostAddress(); String hostAddress = request.getRemoteAddress().getHostAddress();
int remotePort = request.getRemotePort(); int remotePort = request.getRemotePort();
if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) { if (device.getHostAddress().equals(hostAddress + ":" + remotePort)) {
parentPlatform = null; parentPlatform = null;
}else { }else {
device = null; device = null;
} }
} }
if (device == null && parentPlatform == null) { if (device == null && parentPlatform == null) {
// 不存在则回复404 // 不存在则回复404
responseAck(evt, Response.NOT_FOUND, "device "+ deviceId +" not found"); responseAck(evt, Response.NOT_FOUND, "device "+ deviceId +" not found");
logger.warn("[设备未找到 ] {}", deviceId); logger.warn("[设备未找到 ] {}", deviceId);
if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){ if (sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()) != null){
SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new DeviceNotFoundEvent(evt.getDialog())); SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new DeviceNotFoundEvent(evt.getDialog()));
sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()).response(eventResult); sipSubscribe.getErrorSubscribe(callIdHeader.getCallId()).response(eventResult);
}; };
}else { }else {
ContentTypeHeader header = (ContentTypeHeader)evt.getRequest().getHeader(ContentTypeHeader.NAME); ContentTypeHeader header = (ContentTypeHeader)evt.getRequest().getHeader(ContentTypeHeader.NAME);
String contentType = header.getContentType(); String contentType = header.getContentType();
String contentSubType = header.getContentSubType(); String contentSubType = header.getContentSubType();
if ("Application".equals(contentType) && "MANSRTSP".equals(contentSubType)) { if ("Application".equals(contentType) && "MANSRTSP".equals(contentSubType)) {
SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(null, null, null, callIdHeader.getCallId()); SendRtpItem sendRtpItem = redisCatchStorage.querySendRTPServer(null, null, null, callIdHeader.getCallId());
String streamId = sendRtpItem.getStreamId(); String streamId = sendRtpItem.getStreamId();
StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null); StreamInfo streamInfo = redisCatchStorage.queryPlayback(null, null, streamId, null);
if (null == streamInfo) { if (null == streamInfo) {
responseAck(evt, Response.NOT_FOUND, "stream " + streamId + " not found"); responseAck(evt, Response.NOT_FOUND, "stream " + streamId + " not found");
return; return;
} }
Device device1 = storager.queryVideoDevice(streamInfo.getDeviceID()); Device device1 = storager.queryVideoDevice(streamInfo.getDeviceID());
cmder.playbackControlCmd(device1,streamInfo,new String(evt.getRequest().getRawContent())); cmder.playbackControlCmd(device1,streamInfo,new String(evt.getRequest().getRawContent()),eventResult -> {
} // 失败的回复
} try {
} catch (SipException e) { responseAck(evt, eventResult.statusCode, eventResult.msg);
logger.warn("SIP 回复错误", e); } catch (SipException e) {
} catch (InvalidArgumentException e) { e.printStackTrace();
logger.warn("参数无效", e); } catch (InvalidArgumentException e) {
} catch (ParseException e) { e.printStackTrace();
logger.warn("SIP回复时解析异常", e); } catch (ParseException e) {
} e.printStackTrace();
} }
}, eventResult -> {
// 成功的回复
} try {
responseAck(evt, eventResult.statusCode);
} catch (SipException e) {
e.printStackTrace();
} catch (InvalidArgumentException e) {
e.printStackTrace();
} catch (ParseException e) {
e.printStackTrace();
}
});
}
}
} catch (SipException e) {
logger.warn("SIP 回复错误", e);
} catch (InvalidArgumentException e) {
logger.warn("参数无效", e);
} catch (ParseException e) {
logger.warn("SIP回复时解析异常", e);
}
}
}