648540858
2022-06-03 19a52a20f358b22211dde9da9d25b65c9cbaddcf
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
@@ -657,8 +657,11 @@
                  // 添加流注销的订阅,注销了后向设备发送bye
                  subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey,
                        (MediaServerItem mediaServerItemForEnd, JSONObject jsonForEnd)->{
                           logger.info("[录像]下载结束, 发送BYE");
                           streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), callIdHeader.getCallId());
                           ClientTransaction transaction = streamSession.getTransaction(device.getDeviceId(), channelId, ssrcInfo.getStream(), callIdHeader.getCallId());
                           if (transaction != null) {
                              logger.info("[录像]下载结束, 发送BYE");
                              streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), callIdHeader.getCallId());
                           }
                        });
               });
@@ -705,22 +708,20 @@
         }
         SIPDialog dialog;
         if (callId != null) {
            dialog = streamSession.getDialogByCallId(deviceId, channelId, callId);
            dialog = streamSession.getDialogByCallId(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), callId);
         }else {
            if (stream == null) {
            if (stream == null && ssrcTransaction == null && ssrcTransaction.getStream() == null) {
               return;
            }
            dialog = streamSession.getDialogByStream(deviceId, channelId, stream);
            dialog = streamSession.getDialogByStream(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
         }
         if (ssrcTransaction != null) {
            MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransaction.getMediaServerId());
            mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc());
            mediaServerService.closeRTPServer(deviceId, channelId, ssrcTransaction.getStream());
            streamSession.remove(deviceId, channelId, ssrcTransaction.getStream());
         }
         MediaServerItem mediaServerItem = mediaServerService.getOne(ssrcTransaction.getMediaServerId());
         mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcTransaction.getSsrc());
         mediaServerService.closeRTPServer(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
         streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
         if (dialog == null) {
            logger.warn("[ {} -> {}]停止视频流的时候发现对话已丢失", deviceId, channelId);
            logger.warn("[ {} -> {}]停止视频流的时候发现对话已丢失", ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId());
            return;
         }
         SipStack sipStack = udpSipProvider.getSipStack();
@@ -1486,7 +1487,6 @@
         Request request;
         if (dialog != null) {
            logger.info("发送移动位置订阅消息时 dialog的状态为: {}", dialog.getState());
            request = dialog.createRequest(Request.SUBSCRIBE);
            ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
            request.setContent(subscribePostitionXml.toString(), contentTypeHeader);
@@ -1582,12 +1582,12 @@
         Request request;
         if (dialog != null) {
            logger.info("发送目录订阅消息时 dialog的状态为: {}", dialog.getState());
            request = dialog.createRequest(Request.SUBSCRIBE);
            ExpiresHeader expiresHeader = sipFactory.createHeaderFactory().createExpiresHeader(device.getSubscribeCycleForCatalog());
            request.setExpires(expiresHeader);
            ContentTypeHeader contentTypeHeader = sipFactory.createHeaderFactory().createContentTypeHeader("Application", "MANSCDP+xml");
            request.setContent(cmdXml.toString(), contentTypeHeader);
            ExpiresHeader expireHeader = sipFactory.createHeaderFactory().createExpiresHeader(device.getSubscribeCycleForMobilePosition());
            request.addHeader(expireHeader);
         }else {
            String tm = Long.toString(System.currentTimeMillis());