兼容海康信令问题 #493
This commit is contained in:
parent
54a69c2f74
commit
128158dbb5
@ -112,6 +112,13 @@ public class VideoStreamSessionManager {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public SsrcTransaction getSsrcTransaction(String deviceId, String channelId, String callId, String stream){
|
public SsrcTransaction getSsrcTransaction(String deviceId, String channelId, String callId, String stream){
|
||||||
|
|
||||||
|
if (StringUtils.isEmpty(deviceId)) {
|
||||||
|
deviceId ="*";
|
||||||
|
}
|
||||||
|
if (StringUtils.isEmpty(channelId)) {
|
||||||
|
channelId ="*";
|
||||||
|
}
|
||||||
if (StringUtils.isEmpty(callId)) {
|
if (StringUtils.isEmpty(callId)) {
|
||||||
callId ="*";
|
callId ="*";
|
||||||
}
|
}
|
||||||
|
@ -708,22 +708,22 @@ public class SIPCommander implements ISIPCommander {
|
|||||||
}
|
}
|
||||||
SIPDialog dialog;
|
SIPDialog dialog;
|
||||||
if (callId != null) {
|
if (callId != null) {
|
||||||
dialog = streamSession.getDialogByCallId(deviceId, channelId, callId);
|
dialog = streamSession.getDialogByCallId(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), callId);
|
||||||
}else {
|
}else {
|
||||||
if (stream == null) {
|
if (stream == null && ssrcTransaction == null && ssrcTransaction.getStream() == null) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
dialog = streamSession.getDialogByStream(deviceId, channelId, stream);
|
dialog = streamSession.getDialogByStream(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
|
||||||
}
|
}
|
||||||
if (ssrcTransaction != null) {
|
if (ssrcTransaction != null) {
|
||||||
MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransaction.getMediaServerId());
|
MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransaction.getMediaServerId());
|
||||||
mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc());
|
mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc());
|
||||||
mediaServerService.closeRTPServer(deviceId, channelId, ssrcTransaction.getStream());
|
mediaServerService.closeRTPServer(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
|
||||||
streamSession.remove(deviceId, channelId, ssrcTransaction.getStream());
|
streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dialog == null) {
|
if (dialog == null) {
|
||||||
logger.warn("[ {} -> {}]停止视频流的时候发现对话已丢失", deviceId, channelId);
|
logger.warn("[ {} -> {}]停止视频流的时候发现对话已丢失", ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
SipStack sipStack = udpSipProvider.getSipStack();
|
SipStack sipStack = udpSipProvider.getSipStack();
|
||||||
|
@ -72,7 +72,7 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
|
|||||||
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, null, callIdHeader.getCallId());
|
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();
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,8 @@ package com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.notify
|
|||||||
import com.genersoft.iot.vmp.common.StreamInfo;
|
import com.genersoft.iot.vmp.common.StreamInfo;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
import com.genersoft.iot.vmp.gb28181.bean.Device;
|
||||||
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform;
|
||||||
|
import com.genersoft.iot.vmp.gb28181.bean.SsrcTransaction;
|
||||||
|
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
||||||
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.SIPRequestProcessorParent;
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.SIPRequestProcessorParent;
|
||||||
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
|
import com.genersoft.iot.vmp.gb28181.transmit.event.request.impl.message.IMessageHandler;
|
||||||
@ -39,6 +41,9 @@ public class MediaStatusNotifyMessageHandler extends SIPRequestProcessorParent i
|
|||||||
@Autowired
|
@Autowired
|
||||||
private IRedisCatchStorage redisCatchStorage;
|
private IRedisCatchStorage redisCatchStorage;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private VideoStreamSessionManager sessionManager;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void afterPropertiesSet() throws Exception {
|
public void afterPropertiesSet() throws Exception {
|
||||||
notifyMessageHandler.addHandler(cmdType, this);
|
notifyMessageHandler.addHandler(cmdType, this);
|
||||||
@ -61,13 +66,19 @@ public class MediaStatusNotifyMessageHandler extends SIPRequestProcessorParent i
|
|||||||
String NotifyType =getText(rootElement, "NotifyType");
|
String NotifyType =getText(rootElement, "NotifyType");
|
||||||
if (NotifyType.equals("121")){
|
if (NotifyType.equals("121")){
|
||||||
logger.info("[录像流]推送完毕,收到关流通知");
|
logger.info("[录像流]推送完毕,收到关流通知");
|
||||||
String channelId =getText(rootElement, "DeviceID");
|
|
||||||
// 查询是设备
|
// 查询是设备
|
||||||
StreamInfo streamInfo = redisCatchStorage.queryDownload(device.getDeviceId(), channelId, null, callIdHeader.getCallId());
|
StreamInfo streamInfo = redisCatchStorage.queryDownload(null, null, null, callIdHeader.getCallId());
|
||||||
|
if (streamInfo != null) {
|
||||||
// 设置进度100%
|
// 设置进度100%
|
||||||
streamInfo.setProgress(1);
|
streamInfo.setProgress(1);
|
||||||
redisCatchStorage.startDownload(streamInfo, callIdHeader.getCallId());
|
redisCatchStorage.startDownload(streamInfo, callIdHeader.getCallId());
|
||||||
cmder.streamByeCmd(device.getDeviceId(), channelId, null, callIdHeader.getCallId());
|
}
|
||||||
|
|
||||||
|
// 先从会话内查找
|
||||||
|
SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null);
|
||||||
|
if (ssrcTransaction != null) { // 兼容海康 媒体通知 消息from字段不是设备ID的问题
|
||||||
|
cmder.streamByeCmd(device.getDeviceId(), ssrcTransaction.getChannelId(), null, callIdHeader.getCallId());
|
||||||
|
}
|
||||||
// TODO 如果级联播放,需要给上级发送此通知
|
// TODO 如果级联播放,需要给上级发送此通知
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,7 +1,6 @@
|
|||||||
package com.genersoft.iot.vmp.utils;
|
package com.genersoft.iot.vmp.utils;
|
||||||
|
|
||||||
|
|
||||||
import java.text.SimpleDateFormat;
|
|
||||||
import java.time.Instant;
|
import java.time.Instant;
|
||||||
import java.time.LocalDate;
|
import java.time.LocalDate;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
|
Loading…
Reference in New Issue
Block a user