panlinlin
2021-04-22 a29a0a0785f966294ba01982fba62c1ff0f23bea
增加对设备的兼容性
6个文件已修改
47 ■■■■ 已修改文件
src/main/java/com/genersoft/iot/vmp/gb28181/session/SsrcUtil.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/session/VideoStreamSessionManager.java 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/SIPRequestHeaderProvider.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/response/impl/InviteResponseProcessor.java 16 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
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工具类。SSRC值由10位十进制整数组成的字符串,第一位为0代表实况,为1则代表回放;第二位至第六位由监控域ID的第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("要释放ssrc为null");
            return;
        }
        String sn = ssrc.substring(6);
        isUsed.remove(sn);
        notUsed.add(sn);
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);
    }
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);
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;
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) {
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)){