From 3d2aeb890b0d6bc13ea44ff6e0d5764bcf7aa529 Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期一, 14 十二月 2020 16:51:29 +0800 Subject: [PATCH] 使用线程安全的map存储订阅信息 修改点播消息内容,提升兼容性 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java | 45 ++++----------------------------------------- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java | 4 +++- src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java | 2 ++ src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 3 +-- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java | 6 ++---- 5 files changed, 12 insertions(+), 48 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java index bfdc8f6..f1ed477 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/SipLayer.java @@ -113,6 +113,7 @@ */ @Override public void processRequest(RequestEvent evt) { + logger.debug(evt.getRequest().toString()); // 鐢变簬jainsip鏄崟绾跨▼绋嬪簭锛屼负鎻愰珮鎬ц兘骞跺彂澶勭悊 processThreadPool.execute(() -> { processorFactory.createRequestProcessor(evt).process(); @@ -122,6 +123,7 @@ @Override public void processResponse(ResponseEvent evt) { Response response = evt.getResponse(); + logger.debug(evt.getResponse().toString()); int status = response.getStatusCode(); if ((status >= 200) && (status < 300)) { // Success! ISIPResponseProcessor processor = processorFactory.createResponseProcessor(evt); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java index a645680..65f0833 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java @@ -84,8 +84,7 @@ SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, host.getAddress()); //via ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); - // ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag); - ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(device.getHost().getIp(), device.getHost().getPort(), device.getTransport(), viaTag); + ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag); viaHeader.setRPort(); viaHeaders.add(viaHeader); //from diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java index aebc601..13d630c 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/request/impl/AckRequestProcessor.java @@ -21,14 +21,12 @@ * 澶勭悊 ACK璇锋眰 * * @param evt - * @param layer - * @param transaction - * @param config - */ + */ @Override public void process(RequestEvent evt) { Request request = evt.getRequest(); Dialog dialog = evt.getDialog(); + if (dialog == null) return; try { Request ackRequest = null; CSeq csReq = (CSeq) request.getHeader(CSeq.NAME); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java index ae7182d..fe5be81 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java @@ -12,6 +12,7 @@ import javax.sip.message.Request; import javax.sip.message.Response; +import gov.nist.javax.sip.header.CSeq; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @@ -23,9 +24,9 @@ /** - * @Description:澶勭悊INVITE鍝嶅簲 + * @Description:澶勭悊INVITE鍝嶅簲 * @author: swwheihei - * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:43:52 + * @date: 2020骞�5鏈�3鏃� 涓嬪崍4:43:52 */ @Component public class InviteResponseProcessor implements ISIPResponseProcessor { @@ -49,49 +50,11 @@ // 鎴愬姛鍝嶅簲 // 涓嬪彂ack if (statusCode == Response.OK) { - // ClientTransaction clientTransaction = evt.getClientTransaction(); - // if(clientTransaction == null){ - // logger.error("鍥炲ACK鏃讹紝clientTransaction涓簄ull >>> {}",response); - // return; - // } - // Dialog clientDialog = clientTransaction.getDialog(); - - // CSeqHeader clientCSeqHeader = (CSeqHeader) - // response.getHeader(CSeqHeader.NAME); - // long cseqId = clientCSeqHeader.getSeqNumber(); - // /* - // createAck鍑芥暟锛屽垱寤虹殑ackRequest锛屼細閲囩敤Invite鍝嶅簲鐨�200OK锛屼腑鐨刢ontact瀛楁涓殑鍦板潃锛屼綔涓虹洰鏍囧湴鍧�銆� - // 鏈夌殑缁堢浼犱笂鏉ョ殑鍙兘杩樻槸鍐呯綉鍦板潃锛屼細閫犳垚ack鍙戦�佷笉鍑哄幓銆傛帴鍙椾笉鍒伴煶瑙嗛娴� - // 鎵�浠ュ湪姝ゅ缁熶竴鏇挎崲鍦板潃銆傚拰鍝嶅簲娑堟伅鐨刅ia澶翠腑鐨勫湴鍧�淇濇寔涓�鑷淬�� - // */ - // Request ackRequest = clientDialog.createAck(cseqId); - // SipURI requestURI = (SipURI) ackRequest.getRequestURI(); - // ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME); - // try { - // requestURI.setHost(viaHeader.getHost()); - // } catch (Exception e) { - // e.printStackTrace(); - // } - // requestURI.setPort(viaHeader.getPort()); - // clientDialog.sendAck(ackRequest); - Dialog dialog = evt.getDialog(); CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME); Request reqAck = dialog.createAck(cseq.getSeqNumber()); - - SipURI requestURI = (SipURI) reqAck.getRequestURI(); - ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME); - // String viaHost =viaHeader.getHost(); - //getHost()鍑芥暟鍙栧洖鐨処P鍦板潃鏄�淸xxx.xxx.xxx.xxx:yyyy]鈥濈殑鏍煎紡锛岄渶鐢ㄦ鍒欒〃杈惧紡鎴彇涓衡�渪xx.xxx.xxx.xxx"鏍煎紡 - // Pattern p = Pattern.compile("(?<=//|)((\\w)+\\.)+\\w+"); - // Matcher matcher = p.matcher(viaHeader.getHost()); - // if (matcher.find()) { - // requestURI.setHost(matcher.group()); - // } - requestURI.setHost(viaHeader.getHost()); - requestURI.setPort(viaHeader.getPort()); - reqAck.setRequestURI(requestURI); dialog.sendAck(reqAck); + } } catch (InvalidArgumentException | SipException e) { e.printStackTrace(); diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java index a4389cf..0c00b82 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookSubscribe.java @@ -13,6 +13,7 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; +import org.springframework.util.ConcurrentReferenceHashMap; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; @@ -20,6 +21,7 @@ import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** * @Description:閽堝 ZLMediaServer鐨刪ook浜嬩欢璁㈤槄 @@ -50,7 +52,7 @@ void response(JSONObject response); } - private Map<HookType, Map<JSONObject, ZLMHttpHookSubscribe.Event>> allSubscribes = new HashMap<>(); + private Map<HookType, Map<JSONObject, ZLMHttpHookSubscribe.Event>> allSubscribes = new ConcurrentHashMap<>(); public void addSubscribe(HookType type, JSONObject hookResponse, ZLMHttpHookSubscribe.Event event) { Map<JSONObject, Event> eventMap = allSubscribes.get(type); -- Gitblit v1.8.0