Commit a29a0a0785f966294ba01982fba62c1ff0f23bea
1 parent
ef742e71
增加对设备的兼容性
Showing
6 changed files
with
24 additions
and
23 deletions
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 |