优化使用来源ip作为流ip
This commit is contained in:
@@ -11,6 +11,7 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.boot.CommandLineRunner;
|
||||
import org.springframework.core.annotation.Order;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import javax.sip.*;
|
||||
import java.util.*;
|
||||
@@ -107,6 +108,9 @@ public class SipLayer implements CommandLineRunner {
|
||||
}
|
||||
|
||||
public SipProviderImpl getUdpSipProvider(String ip) {
|
||||
if (ObjectUtils.isEmpty(ip)) {
|
||||
return null;
|
||||
}
|
||||
return udpSipProviderMap.get(ip);
|
||||
}
|
||||
|
||||
@@ -125,6 +129,9 @@ public class SipLayer implements CommandLineRunner {
|
||||
}
|
||||
|
||||
public SipProviderImpl getTcpSipProvider(String ip) {
|
||||
if (ObjectUtils.isEmpty(ip)) {
|
||||
return null;
|
||||
}
|
||||
return tcpSipProviderMap.get(ip);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5,22 +5,19 @@ import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
|
||||
import com.genersoft.iot.vmp.gb28181.utils.SipUtils;
|
||||
import com.genersoft.iot.vmp.utils.GitUtil;
|
||||
import gov.nist.javax.sip.SipProviderImpl;
|
||||
import gov.nist.javax.sip.message.SIPRequest;
|
||||
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.stereotype.Component;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
|
||||
import javax.sip.SipException;
|
||||
import javax.sip.SipFactory;
|
||||
import javax.sip.header.CallIdHeader;
|
||||
import javax.sip.header.UserAgentHeader;
|
||||
import javax.sip.header.ViaHeader;
|
||||
import javax.sip.message.Message;
|
||||
import javax.sip.message.Request;
|
||||
import javax.sip.message.Response;
|
||||
import java.net.InetAddress;
|
||||
import java.text.ParseException;
|
||||
|
||||
/**
|
||||
@@ -109,6 +106,10 @@ public class SIPSender {
|
||||
}
|
||||
|
||||
public CallIdHeader getNewCallIdHeader(String ip, String transport){
|
||||
if (ObjectUtils.isEmpty(ip) || ObjectUtils.isEmpty(transport)) {
|
||||
return transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider().getNewCallId()
|
||||
: sipLayer.getUdpSipProvider().getNewCallId();
|
||||
}
|
||||
return transport.equalsIgnoreCase("TCP") ? sipLayer.getTcpSipProvider(ip).getNewCallId()
|
||||
: sipLayer.getUdpSipProvider(ip).getNewCallId();
|
||||
}
|
||||
|
||||
@@ -1,15 +1,16 @@
|
||||
package com.genersoft.iot.vmp.gb28181.transmit.callback;
|
||||
|
||||
import java.util.HashMap;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.genersoft.iot.vmp.vmanager.bean.DeferredResultEx;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.util.ObjectUtils;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.context.request.async.DeferredResult;
|
||||
|
||||
/**
|
||||
* @description: 异步请求处理
|
||||
* @author: swwheihei
|
||||
@@ -51,31 +52,48 @@ public class DeferredResultHolder {
|
||||
|
||||
public static final String CALLBACK_CMD_BROADCAST = "CALLBACK_BROADCAST";
|
||||
|
||||
private Map<String, Map<String, DeferredResult>> map = new ConcurrentHashMap<>();
|
||||
private Map<String, Map<String, DeferredResultEx>> map = new ConcurrentHashMap<>();
|
||||
|
||||
|
||||
public void put(String key, String id, DeferredResult result) {
|
||||
Map<String, DeferredResult> deferredResultMap = map.get(key);
|
||||
public void put(String key, String id, DeferredResultEx result) {
|
||||
Map<String, DeferredResultEx> deferredResultMap = map.get(key);
|
||||
if (deferredResultMap == null) {
|
||||
deferredResultMap = new ConcurrentHashMap<>();
|
||||
map.put(key, deferredResultMap);
|
||||
}
|
||||
deferredResultMap.put(id, result);
|
||||
}
|
||||
|
||||
public DeferredResult get(String key, String id) {
|
||||
Map<String, DeferredResult> deferredResultMap = map.get(key);
|
||||
|
||||
public void put(String key, String id, DeferredResult result) {
|
||||
Map<String, DeferredResultEx> deferredResultMap = map.get(key);
|
||||
if (deferredResultMap == null) {
|
||||
deferredResultMap = new ConcurrentHashMap<>();
|
||||
map.put(key, deferredResultMap);
|
||||
}
|
||||
deferredResultMap.put(id, new DeferredResultEx(result));
|
||||
}
|
||||
|
||||
public DeferredResultEx get(String key, String id) {
|
||||
Map<String, DeferredResultEx> deferredResultMap = map.get(key);
|
||||
if (deferredResultMap == null || ObjectUtils.isEmpty(id)) {
|
||||
return null;
|
||||
}
|
||||
return deferredResultMap.get(id);
|
||||
}
|
||||
|
||||
public Collection<DeferredResultEx> getAllByKey(String key) {
|
||||
Map<String, DeferredResultEx> deferredResultMap = map.get(key);
|
||||
if (deferredResultMap == null) {
|
||||
return null;
|
||||
}
|
||||
return deferredResultMap.values();
|
||||
}
|
||||
|
||||
public boolean exist(String key, String id){
|
||||
if (key == null) {
|
||||
return false;
|
||||
}
|
||||
Map<String, DeferredResult> deferredResultMap = map.get(key);
|
||||
Map<String, DeferredResultEx> deferredResultMap = map.get(key);
|
||||
if (id == null) {
|
||||
return deferredResultMap != null;
|
||||
}else {
|
||||
@@ -88,15 +106,15 @@ public class DeferredResultHolder {
|
||||
* @param msg
|
||||
*/
|
||||
public void invokeResult(RequestMessage msg) {
|
||||
Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey());
|
||||
Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
|
||||
if (deferredResultMap == null) {
|
||||
return;
|
||||
}
|
||||
DeferredResult result = deferredResultMap.get(msg.getId());
|
||||
DeferredResultEx result = deferredResultMap.get(msg.getId());
|
||||
if (result == null) {
|
||||
return;
|
||||
}
|
||||
result.setResult(msg.getData());
|
||||
result.getDeferredResult().setResult(msg.getData());
|
||||
deferredResultMap.remove(msg.getId());
|
||||
if (deferredResultMap.size() == 0) {
|
||||
map.remove(msg.getKey());
|
||||
@@ -108,18 +126,27 @@ public class DeferredResultHolder {
|
||||
* @param msg
|
||||
*/
|
||||
public void invokeAllResult(RequestMessage msg) {
|
||||
Map<String, DeferredResult> deferredResultMap = map.get(msg.getKey());
|
||||
Map<String, DeferredResultEx> deferredResultMap = map.get(msg.getKey());
|
||||
if (deferredResultMap == null) {
|
||||
return;
|
||||
}
|
||||
Set<String> ids = deferredResultMap.keySet();
|
||||
for (String id : ids) {
|
||||
DeferredResult result = deferredResultMap.get(id);
|
||||
DeferredResultEx result = deferredResultMap.get(id);
|
||||
if (result == null) {
|
||||
return;
|
||||
}
|
||||
result.setResult(msg.getData());
|
||||
if (result.getFilter() != null) {
|
||||
Object handler = result.getFilter().handler(msg.getData());
|
||||
System.out.println(JSON.toJSONString(handler));
|
||||
result.getDeferredResult().setResult(handler);
|
||||
}else {
|
||||
result.getDeferredResult().setResult(msg.getData());
|
||||
}
|
||||
|
||||
}
|
||||
map.remove(msg.getKey());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -8,14 +8,13 @@ import com.genersoft.iot.vmp.gb28181.event.SipSubscribe;
|
||||
import com.genersoft.iot.vmp.gb28181.session.VideoStreamSessionManager;
|
||||
import com.genersoft.iot.vmp.gb28181.transmit.SIPProcessorObserver;
|
||||
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.impl.SIPCommanderFroPlatform;
|
||||
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.utils.SipUtils;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMMediaListManager;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
|
||||
import com.genersoft.iot.vmp.media.zlm.ZlmHttpHookSubscribe;
|
||||
import com.genersoft.iot.vmp.media.zlm.dto.*;
|
||||
import com.genersoft.iot.vmp.service.IMediaServerService;
|
||||
import com.genersoft.iot.vmp.service.IPlayService;
|
||||
@@ -39,9 +38,10 @@ import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import javax.sdp.*;
|
||||
import javax.sip.*;
|
||||
import javax.sip.InvalidArgumentException;
|
||||
import javax.sip.RequestEvent;
|
||||
import javax.sip.SipException;
|
||||
import javax.sip.header.CallIdHeader;
|
||||
import javax.sip.message.Request;
|
||||
import javax.sip.message.Response;
|
||||
import java.text.ParseException;
|
||||
import java.time.Instant;
|
||||
@@ -479,7 +479,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
|
||||
playService.play(mediaServerItem, ssrcInfo, device, channelId, hookEvent, errorEvent, (code, msg) -> {
|
||||
logger.info("[上级点播]超时, 用户:{}, 通道:{}", username, channelId);
|
||||
redisCatchStorage.deleteSendRTPServer(platform.getServerGBId(), channelId, callIdHeader.getCallId(), null);
|
||||
}, null);
|
||||
});
|
||||
} else {
|
||||
sendRtpItem.setStreamId(playTransaction.getStream());
|
||||
// 写入redis, 超时时回复
|
||||
|
||||
Reference in New Issue
Block a user