Commit a29a0a0785f966294ba01982fba62c1ff0f23bea

Authored by panlinlin
1 parent ef742e71

增加对设备的兼容性

src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java
@@ -5,7 +5,10 @@ import java.util.List; @@ -5,7 +5,10 @@ import java.util.List;
5 import java.util.Random; 5 import java.util.Random;
6 6
7 import com.genersoft.iot.vmp.conf.SipConfig; 7 import com.genersoft.iot.vmp.conf.SipConfig;
  8 +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
8 import com.genersoft.iot.vmp.utils.SpringBeanFactory; 9 import com.genersoft.iot.vmp.utils.SpringBeanFactory;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
9 12
10 /** 13 /**
11 * @Description:SIP信令中的SSRC工具类。SSRC值由10位十进制整数组成的字符串,第一位为0代表实况,为1则代表回放;第二位至第六位由监控域ID的第4位到第8位组成;最后4位为不重复的4个整数 14 * @Description:SIP信令中的SSRC工具类。SSRC值由10位十进制整数组成的字符串,第一位为0代表实况,为1则代表回放;第二位至第六位由监控域ID的第4位到第8位组成;最后4位为不重复的4个整数
@@ -14,6 +17,8 @@ import com.genersoft.iot.vmp.utils.SpringBeanFactory; @@ -14,6 +17,8 @@ import com.genersoft.iot.vmp.utils.SpringBeanFactory;
14 */ 17 */
15 public class SsrcUtil { 18 public class SsrcUtil {
16 19
  20 + private final static Logger logger = LoggerFactory.getLogger(SsrcUtil.class);
  21 +
17 private static String ssrcPrefix; 22 private static String ssrcPrefix;
18 23
19 private static List<String> isUsed; 24 private static List<String> isUsed;
@@ -59,6 +64,10 @@ public class SsrcUtil { @@ -59,6 +64,10 @@ public class SsrcUtil {
59 * 64 *
60 */ 65 */
61 public static void releaseSsrc(String ssrc) { 66 public static void releaseSsrc(String ssrc) {
  67 + if (ssrc == null) {
  68 + logger.error("要释放ssrc为null");
  69 + return;
  70 + }
62 String sn = ssrc.substring(6); 71 String sn = ssrc.substring(6);
63 isUsed.remove(sn); 72 isUsed.remove(sn);
64 notUsed.add(sn); 73 notUsed.add(sn);
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
@@ -42,7 +42,9 @@ public class VideoStreamSessionManager { @@ -42,7 +42,9 @@ public class VideoStreamSessionManager {
42 42
43 public void remove(String deviceId, String channelId) { 43 public void remove(String deviceId, String channelId) {
44 sessionMap.remove(deviceId + "_" + channelId); 44 sessionMap.remove(deviceId + "_" + channelId);
45 - SsrcUtil.releaseSsrc(ssrcMap.get(deviceId + "_" + channelId)); 45 + if (ssrcMap.get(deviceId + "_" + channelId) != null) {
  46 + SsrcUtil.releaseSsrc(ssrcMap.get(deviceId + "_" + channelId));
  47 + }
46 ssrcMap.remove(deviceId + "_" + channelId); 48 ssrcMap.remove(deviceId + "_" + channelId);
47 streamIdMap.remove(deviceId + "_" + channelId); 49 streamIdMap.remove(deviceId + "_" + channelId);
48 } 50 }
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java
@@ -69,8 +69,7 @@ public class SIPRequestHeaderProvider { @@ -69,8 +69,7 @@ public class SIPRequestHeaderProvider {
69 SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress()); 69 SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
70 //via 70 //via
71 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>(); 71 ArrayList<ViaHeader> viaHeaders = new ArrayList<ViaHeader>();
72 - ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(device.getIp(), device.getPort(), device.getTransport(), viaTag);  
73 -// ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag); 72 + ViaHeader viaHeader = sipFactory.createHeaderFactory().createViaHeader(sipConfig.getSipIp(), sipConfig.getSipPort(), device.getTransport(), viaTag);
74 viaHeader.setRPort(); 73 viaHeader.setRPort();
75 viaHeaders.add(viaHeader); 74 viaHeaders.add(viaHeader);
76 75
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -21,6 +21,7 @@ import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils; @@ -21,6 +21,7 @@ import com.genersoft.iot.vmp.media.zlm.ZLMRESTfulUtils;
21 import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory; 21 import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
22 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 22 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
23 import com.genersoft.iot.vmp.storager.IVideoManagerStorager; 23 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
  24 +import gov.nist.javax.sip.message.SIPRequest;
24 import org.slf4j.Logger; 25 import org.slf4j.Logger;
25 import org.slf4j.LoggerFactory; 26 import org.slf4j.LoggerFactory;
26 import org.springframework.beans.factory.annotation.Autowired; 27 import org.springframework.beans.factory.annotation.Autowired;
@@ -625,15 +626,9 @@ public class SIPCommander implements ISIPCommander { @@ -625,15 +626,9 @@ public class SIPCommander implements ISIPCommander {
625 } 626 }
626 Request byeRequest = dialog.createRequest(Request.BYE); 627 Request byeRequest = dialog.createRequest(Request.BYE);
627 SipURI byeURI = (SipURI) byeRequest.getRequestURI(); 628 SipURI byeURI = (SipURI) byeRequest.getRequestURI();
628 - String vh = transaction.getRequest().getHeader(ViaHeader.NAME).toString();  
629 - Pattern p = Pattern.compile("(\\d+\\.\\d+\\.\\d+\\.\\d+)\\:(\\d+)");  
630 - Matcher matcher = p.matcher(vh);  
631 - if (matcher.find()) {  
632 - String ip = matcher.group(1);  
633 - byeURI.setHost(ip);  
634 - String port = matcher.group(2);  
635 - byeURI.setPort(Integer.parseInt(port));  
636 - } 629 + SIPRequest request = (SIPRequest)transaction.getRequest();
  630 + byeURI.setHost(request.getRemoteAddress().getHostName());
  631 + byeURI.setPort(request.getRemotePort());
637 ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME); 632 ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME);
638 String protocol = viaHeader.getTransport().toUpperCase(); 633 String protocol = viaHeader.getTransport().toUpperCase();
639 ClientTransaction clientTransaction = null; 634 ClientTransaction clientTransaction = null;
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java
@@ -2,16 +2,13 @@ package com.genersoft.iot.vmp.gb28181.transmit.response.impl; @@ -2,16 +2,13 @@ package com.genersoft.iot.vmp.gb28181.transmit.response.impl;
2 2
3 import java.text.ParseException; 3 import java.text.ParseException;
4 4
5 -import javax.sip.Dialog;  
6 -import javax.sip.InvalidArgumentException;  
7 -import javax.sip.ResponseEvent;  
8 -import javax.sip.SipException; 5 +import javax.sip.*;
9 import javax.sip.address.SipURI; 6 import javax.sip.address.SipURI;
10 import javax.sip.header.CSeqHeader; 7 import javax.sip.header.CSeqHeader;
11 -import javax.sip.header.ViaHeader;  
12 import javax.sip.message.Request; 8 import javax.sip.message.Request;
13 import javax.sip.message.Response; 9 import javax.sip.message.Response;
14 10
  11 +import gov.nist.javax.sip.ResponseEventExt;
15 import org.springframework.stereotype.Component; 12 import org.springframework.stereotype.Component;
16 13
17 import com.genersoft.iot.vmp.conf.SipConfig; 14 import com.genersoft.iot.vmp.conf.SipConfig;
@@ -46,16 +43,15 @@ public class InviteResponseProcessor implements ISIPResponseProcessor { @@ -46,16 +43,15 @@ public class InviteResponseProcessor implements ISIPResponseProcessor {
46 // 成功响应 43 // 成功响应
47 // 下发ack 44 // 下发ack
48 if (statusCode == Response.OK) { 45 if (statusCode == Response.OK) {
  46 + ResponseEventExt event = (ResponseEventExt)evt;
49 Dialog dialog = evt.getDialog(); 47 Dialog dialog = evt.getDialog();
50 CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME); 48 CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
51 Request reqAck = dialog.createAck(cseq.getSeqNumber()); 49 Request reqAck = dialog.createAck(cseq.getSeqNumber());
52 -  
53 SipURI requestURI = (SipURI) reqAck.getRequestURI(); 50 SipURI requestURI = (SipURI) reqAck.getRequestURI();
54 - ViaHeader viaHeader = (ViaHeader) response.getHeader(ViaHeader.NAME);  
55 - requestURI.setHost(viaHeader.getHost());  
56 - requestURI.setPort(viaHeader.getPort()); 51 + requestURI.setHost(event.getRemoteIpAddress());
  52 + requestURI.setPort(event.getRemotePort());
57 reqAck.setRequestURI(requestURI); 53 reqAck.setRequestURI(requestURI);
58 - 54 + System.out.println("向 " + event.getRemoteIpAddress() + ":" + event.getRemotePort() + "回复ack");
59 dialog.sendAck(reqAck); 55 dialog.sendAck(reqAck);
60 } 56 }
61 } catch (InvalidArgumentException | SipException e) { 57 } catch (InvalidArgumentException | SipException e) {
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -251,7 +251,7 @@ public class ZLMHttpHookListener { @@ -251,7 +251,7 @@ public class ZLMHttpHookListener {
251 JSONArray tracks = json.getJSONArray("tracks"); 251 JSONArray tracks = json.getJSONArray("tracks");
252 boolean regist = json.getBoolean("regist"); 252 boolean regist = json.getBoolean("regist");
253 if (tracks != null) { 253 if (tracks != null) {
254 - System.out.println("222222" + schema); 254 + System.out.println("on_stream_changed->>" + schema);
255 } 255 }
256 if ("rtmp".equals(schema)){ 256 if ("rtmp".equals(schema)){
257 257