From a29a0a0785f966294ba01982fba62c1ff0f23bea Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期四, 22 四月 2021 17:33:07 +0800 Subject: [PATCH] 增加对设备的兼容性 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java | 16 ++++++---------- src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java | 9 +++++++++ src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java | 4 +++- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java | 3 +-- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 13 ++++--------- src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java | 2 +- 6 files changed, 24 insertions(+), 23 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java index d6b75f8..6a1401d 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java @@ -5,7 +5,10 @@ import java.util.Random; import com.genersoft.iot.vmp.conf.SipConfig; +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.utils.SpringBeanFactory; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @Description:SIP淇′护涓殑SSRC宸ュ叿绫汇�係SRC鍊肩敱10浣嶅崄杩涘埗鏁存暟缁勬垚鐨勫瓧绗︿覆锛岀涓�浣嶄负0浠h〃瀹炲喌锛屼负1鍒欎唬琛ㄥ洖鏀撅紱绗簩浣嶈嚦绗叚浣嶇敱鐩戞帶鍩烮D鐨勭4浣嶅埌绗�8浣嶇粍鎴愶紱鏈�鍚�4浣嶄负涓嶉噸澶嶇殑4涓暣鏁� @@ -13,6 +16,8 @@ * @date: 2020骞�5鏈�10鏃� 涓婂崍11:57:57 */ public class SsrcUtil { + + private final static Logger logger = LoggerFactory.getLogger(SsrcUtil.class); private static String ssrcPrefix; @@ -59,6 +64,10 @@ * */ public static void releaseSsrc(String ssrc) { + if (ssrc == null) { + logger.error("瑕侀噴鏀緎src涓簄ull"); + return; + } String sn = ssrc.substring(6); isUsed.remove(sn); notUsed.add(sn); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java index b6c0dfc..5ea57c1 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java @@ -42,7 +42,9 @@ public void remove(String deviceId, String channelId) { sessionMap.remove(deviceId + "_" + channelId); - SsrcUtil.releaseSsrc(ssrcMap.get(deviceId + "_" + channelId)); + if (ssrcMap.get(deviceId + "_" + channelId) != null) { + SsrcUtil.releaseSsrc(ssrcMap.get(deviceId + "_" + channelId)); + } ssrcMap.remove(deviceId + "_" + channelId); streamIdMap.remove(deviceId + "_" + channelId); } 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 44bfc54..cecbe3c 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 @@ -69,8 +69,7 @@ SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress()); //via ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); - ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(device.getIp(), device.getPort(), device.getTransport(), viaTag); -// ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag); + ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag); viaHeader.setRPort(); viaHeaders.add(viaHeader); diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index 5f31d87..529feaf 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -21,6 +21,7 @@ import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; import com.genersoft.iot.vmp.storager.IRedisCatchStorage; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +import gov.nist.javax.sip.message.SIPRequest; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -625,15 +626,9 @@ } Request byeRequest = dialog.createRequest(Request.BYE); SipURI byeURI = (SipURI) byeRequest.getRequestURI(); - String vh = transaction.getRequest().getHeader(ViaHeader.NAME).toString(); - Pattern p = Pattern.compile("(\\d+\\.\\d+\\.\\d+\\.\\d+)\\:(\\d+)"); - Matcher matcher = p.matcher(vh); - if (matcher.find()) { - String ip = matcher.group(1); - byeURI.setHost(ip); - String port = matcher.group(2); - byeURI.setPort(Integer.parseInt(port)); - } + SIPRequest request = (SIPRequest)transaction.getRequest(); + byeURI.setHost(request.getRemoteAddress().getHostName()); + byeURI.setPort(request.getRemotePort()); ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME); String protocol = viaHeader.getTransport().toUpperCase(); ClientTransaction clientTransaction = null; 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 83500aa..0e238b0 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 @@ -2,16 +2,13 @@ import java.text.ParseException; -import javax.sip.Dialog; -import javax.sip.InvalidArgumentException; -import javax.sip.ResponseEvent; -import javax.sip.SipException; +import javax.sip.*; import javax.sip.address.SipURI; import javax.sip.header.CSeqHeader; -import javax.sip.header.ViaHeader; import javax.sip.message.Request; import javax.sip.message.Response; +import gov.nist.javax.sip.ResponseEventExt; import org.springframework.stereotype.Component; import com.genersoft.iot.vmp.conf.SipConfig; @@ -46,16 +43,15 @@ // 鎴愬姛鍝嶅簲 // 涓嬪彂ack if (statusCode == Response.OK) { + ResponseEventExt event = (ResponseEventExt)evt; 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); - requestURI.setHost(viaHeader.getHost()); - requestURI.setPort(viaHeader.getPort()); + requestURI.setHost(event.getRemoteIpAddress()); + requestURI.setPort(event.getRemotePort()); reqAck.setRequestURI(requestURI); - + System.out.println("鍚� " + event.getRemoteIpAddress() + ":" + event.getRemotePort() + "鍥炲ack"); dialog.sendAck(reqAck); } } catch (InvalidArgumentException | SipException e) { diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java index cf1ce4c..14719cc 100644 --- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java +++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java @@ -251,7 +251,7 @@ JSONArray tracks = json.getJSONArray("tracks"); boolean regist = json.getBoolean("regist"); if (tracks != null) { - System.out.println("222222" + schema); + System.out.println("on_stream_changed->>" + schema); } if ("rtmp".equals(schema)){ -- Gitblit v1.8.0