From 142efdd9159678a6cbd734e07952fdee9fbf0c3e Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期五, 05 八月 2022 09:48:13 +0800
Subject: [PATCH] 修复单个添加的推流级联国标的问题

---
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java          |    2 +-
 src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java                                  |    1 +
 src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java |   10 ++++++----
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java                                       |    1 -
 src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java                                              |    3 ++-
 src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java                                       |    1 +
 src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java                                         |    5 +++++
 src/main/resources/all-application.yml                                                                       |    2 +-
 8 files changed, 17 insertions(+), 8 deletions(-)

diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
index fda3bff..feab109 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -123,7 +123,7 @@
             SipURI sipUri = (SipURI) request.getRequestURI();
             //浠巗ubject璇诲彇channelId,涓嶅啀浠巖equest-line璇诲彇銆� 鏈変簺骞冲彴request-line鏄钩鍙板浗鏍囩紪鐮侊紝涓嶆槸璁惧鍥芥爣缂栫爜銆�
             //String channelId = sipURI.getUser();
-            String channelId = SipUtils.getChannelIdFromHeader(request);
+            String channelId = SipUtils.getChannelIdFromRequest(request);
             String requesterId = SipUtils.getUserIdFromFromHeader(request);
             CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
             if (requesterId == null || channelId == null) {
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
index cd85889..e004b89 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
@@ -27,6 +27,7 @@
 import javax.sip.address.SipURI;
 import javax.sip.header.CSeqHeader;
 import javax.sip.header.CallIdHeader;
+import javax.sip.message.Request;
 import javax.sip.message.Response;
 import java.text.ParseException;
 import java.util.Map;
@@ -68,22 +69,23 @@
 
     @Override
     public void process(RequestEvent evt) {
+        SIPRequest sipRequest = (SIPRequest)evt.getRequest();
         logger.debug("鎺ユ敹鍒版秷鎭細" + evt.getRequest());
         String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
-        CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME);
+        CallIdHeader callIdHeader = sipRequest.getCallIdHeader();
         // 鍏堜粠浼氳瘽鍐呮煡鎵�
         SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null);
-        if (ssrcTransaction != null) { // 鍏煎娴峰悍 濯掍綋閫氱煡 娑堟伅from瀛楁涓嶆槸璁惧ID鐨勯棶棰�
+        // 鍏煎娴峰悍 濯掍綋閫氱煡 娑堟伅from瀛楁涓嶆槸璁惧ID鐨勯棶棰�
+        if (ssrcTransaction != null) {
             deviceId = ssrcTransaction.getDeviceId();
         }
         // 鏌ヨ璁惧鏄惁瀛樺湪
-        CSeqHeader cseqHeader = (CSeqHeader) evt.getRequest().getHeader(CSeqHeader.NAME);
-        String method = cseqHeader.getMethod();
         Device device = redisCatchStorage.getDevice(deviceId);
         // 鏌ヨ涓婄骇骞冲彴鏄惁瀛樺湪
         ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId);
         try {
             if (device != null && parentPlatform != null) {
+
                 logger.warn("[閲嶅]骞冲彴涓庤澶囩紪鍙烽噸澶嶏細{}", deviceId);
                 SIPRequest request = (SIPRequest) evt.getRequest();
                 String hostAddress = request.getRemoteAddress().getHostAddress();
diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
index 35ec640..44e1337 100644
--- a/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
@@ -23,9 +23,10 @@
     /**
      * 浠巗ubject璇诲彇channelId
      * */
-    public static String getChannelIdFromHeader(Request request) {
+    public static String getChannelIdFromRequest(Request request) {
         Header subject = request.getHeader("subject");
         if (subject == null) {
+            // 濡傛灉缂哄けsubject
             return null;
         }
         return ((Subject) subject).getSubject().split(":")[0];
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
index 18654dd..0dc6bd3 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -451,7 +451,6 @@
 						redisCatchStorage.stopPlayback(streamInfo.getDeviceID(), streamInfo.getChannelId(),
 								streamInfo.getStream(), null);
 					}
-
 				}
 			}else {
 				if (!"rtp".equals(app)){
diff --git a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
index f78ca4a..a8b4a8d 100644
--- a/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
+++ b/src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -85,6 +85,7 @@
             streamPushMapper.add(transform);
         }else {
             streamPushMapper.update(transform);
+            gbStreamMapper.updateMediaServer(mediaItem.getApp(), mediaItem.getStream(), mediaItem.getMediaServerId());
         }
         if (transform != null) {
             if (getChannelOnlineEventLister(transform.getApp(), transform.getStream()) != null)  {
diff --git a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
index 8fa0409..5fa83f5 100644
--- a/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
+++ b/src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -485,6 +485,7 @@
         try {
             int addStreamResult = streamPushMapper.add(stream);
             if (!StringUtils.isEmpty(stream.getGbId())) {
+                stream.setStreamType("push");
                 gbStreamMapper.add(stream);
             }
             dataSourceTransactionManager.commit(transactionStatus);
diff --git a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
index 73fff57..7ed6b5a 100644
--- a/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
+++ b/src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
@@ -143,4 +143,9 @@
                    "</foreach>" +
                    "</script>")
     List<GbStream> selectAllForAppAndStream(List<StreamPushItem> streamPushItems);
+
+    @Update("UPDATE gb_stream " +
+            "SET mediaServerId=#{mediaServerId}" +
+            "WHERE app=#{app} AND stream=#{stream}")
+    void updateMediaServer(String app, String stream, String mediaServerId);
 }
diff --git a/src/main/resources/all-application.yml b/src/main/resources/all-application.yml
index ef14c24..b4ec9ef 100644
--- a/src/main/resources/all-application.yml
+++ b/src/main/resources/all-application.yml
@@ -149,7 +149,7 @@
         enable: true
         # [鍙�塢 鍦ㄦ鑼冨洿鍐呴�夋嫨绔彛鐢ㄤ簬濯掍綋娴佷紶杈�, 蹇呴』鎻愬墠鍦▃lm涓婇厤缃灞炴�э紝涓嶇劧鑷姩閰嶇疆姝ゅ睘鎬у彲鑳戒笉鎴愬姛
         port-range: 30000,30500 # 绔彛鑼冨洿
-        # [鍙�塢 鍥芥爣绾ц仈鍦ㄦ鑼冨洿鍐呴�夋嫨绔彛鍙戦�佸獟浣撴祦,
+        # [鍙�塢 鍥芥爣绾ц仈鍦ㄦ鑼冨洿鍐呴�夋嫨绔彛鍙戦�佸獟浣撴祦
         send-port-range: 30000,30500 # 绔彛鑼冨洿
     # 褰曞儚杈呭姪鏈嶅姟锛� 閮ㄧ讲姝ゆ湇鍔″彲浠ュ疄鐜皕lm褰曞儚鐨勭鐞嗕笌涓嬭浇锛� 0 琛ㄧず涓嶄娇鐢�
     record-assist-port: 0

--
Gitblit v1.8.0