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 5 import java.util.Random;
6 6  
7 7 import com.genersoft.iot.vmp.conf.SipConfig;
  8 +import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
8 9 import com.genersoft.iot.vmp.utils.SpringBeanFactory;
  10 +import org.slf4j.Logger;
  11 +import org.slf4j.LoggerFactory;
9 12  
10 13 /**
11 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 17 */
15 18 public class SsrcUtil {
16 19  
  20 + private final static Logger logger = LoggerFactory.getLogger(SsrcUtil.class);
  21 +
17 22 private static String ssrcPrefix;
18 23  
19 24 private static List<String> isUsed;
... ... @@ -59,6 +64,10 @@ public class SsrcUtil {
59 64 *
60 65 */
61 66 public static void releaseSsrc(String ssrc) {
  67 + if (ssrc == null) {
  68 + logger.error("要释放ssrc为null");
  69 + return;
  70 + }
62 71 String sn = ssrc.substring(6);
63 72 isUsed.remove(sn);
64 73 notUsed.add(sn);
... ...
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java
... ... @@ -42,7 +42,9 @@ public class VideoStreamSessionManager {
42 42  
43 43 public void remove(String deviceId, String channelId) {
44 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 48 ssrcMap.remove(deviceId + "_" + channelId);
47 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 69 SipURI requestLine = sipFactory.createAddressFactory().createSipURI(channelId, device.getHostAddress());
70 70 //via
71 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 73 viaHeader.setRPort();
75 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 21 import com.genersoft.iot.vmp.media.zlm.ZLMRTPServerFactory;
22 22 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
23 23 import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
  24 +import gov.nist.javax.sip.message.SIPRequest;
24 25 import org.slf4j.Logger;
25 26 import org.slf4j.LoggerFactory;
26 27 import org.springframework.beans.factory.annotation.Autowired;
... ... @@ -625,15 +626,9 @@ public class SIPCommander implements ISIPCommander {
625 626 }
626 627 Request byeRequest = dialog.createRequest(Request.BYE);
627 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 632 ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME);
638 633 String protocol = viaHeader.getTransport().toUpperCase();
639 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 2  
3 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 6 import javax.sip.address.SipURI;
10 7 import javax.sip.header.CSeqHeader;
11   -import javax.sip.header.ViaHeader;
12 8 import javax.sip.message.Request;
13 9 import javax.sip.message.Response;
14 10  
  11 +import gov.nist.javax.sip.ResponseEventExt;
15 12 import org.springframework.stereotype.Component;
16 13  
17 14 import com.genersoft.iot.vmp.conf.SipConfig;
... ... @@ -46,16 +43,15 @@ public class InviteResponseProcessor implements ISIPResponseProcessor {
46 43 // 成功响应
47 44 // 下发ack
48 45 if (statusCode == Response.OK) {
  46 + ResponseEventExt event = (ResponseEventExt)evt;
49 47 Dialog dialog = evt.getDialog();
50 48 CSeqHeader cseq = (CSeqHeader) response.getHeader(CSeqHeader.NAME);
51 49 Request reqAck = dialog.createAck(cseq.getSeqNumber());
52   -
53 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 53 reqAck.setRequestURI(requestURI);
58   -
  54 + System.out.println("向 " + event.getRemoteIpAddress() + ":" + event.getRemotePort() + "回复ack");
59 55 dialog.sendAck(reqAck);
60 56 }
61 57 } catch (InvalidArgumentException | SipException e) {
... ...
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
... ... @@ -251,7 +251,7 @@ public class ZLMHttpHookListener {
251 251 JSONArray tracks = json.getJSONArray("tracks");
252 252 boolean regist = json.getBoolean("regist");
253 253 if (tracks != null) {
254   - System.out.println("222222" + schema);
  254 + System.out.println("on_stream_changed->>" + schema);
255 255 }
256 256 if ("rtmp".equals(schema)){
257 257  
... ...