Commit 142efdd9159678a6cbd734e07952fdee9fbf0c3e

Authored by 648540858
1 parent d09d8f11

修复单个添加的推流级联国标的问题

src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -123,7 +123,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -123,7 +123,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
123 SipURI sipUri = (SipURI) request.getRequestURI(); 123 SipURI sipUri = (SipURI) request.getRequestURI();
124 //从subject读取channelId,不再从request-line读取。 有些平台request-line是平台国标编码,不是设备国标编码。 124 //从subject读取channelId,不再从request-line读取。 有些平台request-line是平台国标编码,不是设备国标编码。
125 //String channelId = sipURI.getUser(); 125 //String channelId = sipURI.getUser();
126 - String channelId = SipUtils.getChannelIdFromHeader(request); 126 + String channelId = SipUtils.getChannelIdFromRequest(request);
127 String requesterId = SipUtils.getUserIdFromFromHeader(request); 127 String requesterId = SipUtils.getUserIdFromFromHeader(request);
128 CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME); 128 CallIdHeader callIdHeader = (CallIdHeader) request.getHeader(CallIdHeader.NAME);
129 if (requesterId == null || channelId == null) { 129 if (requesterId == null || channelId == null) {
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/MessageRequestProcessor.java
@@ -27,6 +27,7 @@ import javax.sip.SipException; @@ -27,6 +27,7 @@ import javax.sip.SipException;
27 import javax.sip.address.SipURI; 27 import javax.sip.address.SipURI;
28 import javax.sip.header.CSeqHeader; 28 import javax.sip.header.CSeqHeader;
29 import javax.sip.header.CallIdHeader; 29 import javax.sip.header.CallIdHeader;
  30 +import javax.sip.message.Request;
30 import javax.sip.message.Response; 31 import javax.sip.message.Response;
31 import java.text.ParseException; 32 import java.text.ParseException;
32 import java.util.Map; 33 import java.util.Map;
@@ -68,22 +69,23 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement @@ -68,22 +69,23 @@ public class MessageRequestProcessor extends SIPRequestProcessorParent implement
68 69
69 @Override 70 @Override
70 public void process(RequestEvent evt) { 71 public void process(RequestEvent evt) {
  72 + SIPRequest sipRequest = (SIPRequest)evt.getRequest();
71 logger.debug("接收到消息:" + evt.getRequest()); 73 logger.debug("接收到消息:" + evt.getRequest());
72 String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest()); 74 String deviceId = SipUtils.getUserIdFromFromHeader(evt.getRequest());
73 - CallIdHeader callIdHeader = (CallIdHeader)evt.getRequest().getHeader(CallIdHeader.NAME); 75 + CallIdHeader callIdHeader = sipRequest.getCallIdHeader();
74 // 先从会话内查找 76 // 先从会话内查找
75 SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null); 77 SsrcTransaction ssrcTransaction = sessionManager.getSsrcTransaction(null, null, callIdHeader.getCallId(), null);
76 - if (ssrcTransaction != null) { // 兼容海康 媒体通知 消息from字段不是设备ID的问题 78 + // 兼容海康 媒体通知 消息from字段不是设备ID的问题
  79 + if (ssrcTransaction != null) {
77 deviceId = ssrcTransaction.getDeviceId(); 80 deviceId = ssrcTransaction.getDeviceId();
78 } 81 }
79 // 查询设备是否存在 82 // 查询设备是否存在
80 - CSeqHeader cseqHeader = (CSeqHeader) evt.getRequest().getHeader(CSeqHeader.NAME);  
81 - String method = cseqHeader.getMethod();  
82 Device device = redisCatchStorage.getDevice(deviceId); 83 Device device = redisCatchStorage.getDevice(deviceId);
83 // 查询上级平台是否存在 84 // 查询上级平台是否存在
84 ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId); 85 ParentPlatform parentPlatform = storage.queryParentPlatByServerGBId(deviceId);
85 try { 86 try {
86 if (device != null && parentPlatform != null) { 87 if (device != null && parentPlatform != null) {
  88 +
87 logger.warn("[重复]平台与设备编号重复:{}", deviceId); 89 logger.warn("[重复]平台与设备编号重复:{}", deviceId);
88 SIPRequest request = (SIPRequest) evt.getRequest(); 90 SIPRequest request = (SIPRequest) evt.getRequest();
89 String hostAddress = request.getRemoteAddress().getHostAddress(); 91 String hostAddress = request.getRemoteAddress().getHostAddress();
src/main/java/com/genersoft/iot/vmp/gb28181/utils/SipUtils.java
@@ -23,9 +23,10 @@ public class SipUtils { @@ -23,9 +23,10 @@ public class SipUtils {
23 /** 23 /**
24 * 从subject读取channelId 24 * 从subject读取channelId
25 * */ 25 * */
26 - public static String getChannelIdFromHeader(Request request) { 26 + public static String getChannelIdFromRequest(Request request) {
27 Header subject = request.getHeader("subject"); 27 Header subject = request.getHeader("subject");
28 if (subject == null) { 28 if (subject == null) {
  29 + // 如果缺失subject
29 return null; 30 return null;
30 } 31 }
31 return ((Subject) subject).getSubject().split(":")[0]; 32 return ((Subject) subject).getSubject().split(":")[0];
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -451,7 +451,6 @@ public class ZLMHttpHookListener { @@ -451,7 +451,6 @@ public class ZLMHttpHookListener {
451 redisCatchStorage.stopPlayback(streamInfo.getDeviceID(), streamInfo.getChannelId(), 451 redisCatchStorage.stopPlayback(streamInfo.getDeviceID(), streamInfo.getChannelId(),
452 streamInfo.getStream(), null); 452 streamInfo.getStream(), null);
453 } 453 }
454 -  
455 } 454 }
456 }else { 455 }else {
457 if (!"rtp".equals(app)){ 456 if (!"rtp".equals(app)){
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -85,6 +85,7 @@ public class ZLMMediaListManager { @@ -85,6 +85,7 @@ public class ZLMMediaListManager {
85 streamPushMapper.add(transform); 85 streamPushMapper.add(transform);
86 }else { 86 }else {
87 streamPushMapper.update(transform); 87 streamPushMapper.update(transform);
  88 + gbStreamMapper.updateMediaServer(mediaItem.getApp(), mediaItem.getStream(), mediaItem.getMediaServerId());
88 } 89 }
89 if (transform != null) { 90 if (transform != null) {
90 if (getChannelOnlineEventLister(transform.getApp(), transform.getStream()) != null) { 91 if (getChannelOnlineEventLister(transform.getApp(), transform.getStream()) != null) {
src/main/java/com/genersoft/iot/vmp/service/impl/StreamPushServiceImpl.java
@@ -485,6 +485,7 @@ public class StreamPushServiceImpl implements IStreamPushService { @@ -485,6 +485,7 @@ public class StreamPushServiceImpl implements IStreamPushService {
485 try { 485 try {
486 int addStreamResult = streamPushMapper.add(stream); 486 int addStreamResult = streamPushMapper.add(stream);
487 if (!StringUtils.isEmpty(stream.getGbId())) { 487 if (!StringUtils.isEmpty(stream.getGbId())) {
  488 + stream.setStreamType("push");
488 gbStreamMapper.add(stream); 489 gbStreamMapper.add(stream);
489 } 490 }
490 dataSourceTransactionManager.commit(transactionStatus); 491 dataSourceTransactionManager.commit(transactionStatus);
src/main/java/com/genersoft/iot/vmp/storager/dao/GbStreamMapper.java
@@ -143,4 +143,9 @@ public interface GbStreamMapper { @@ -143,4 +143,9 @@ public interface GbStreamMapper {
143 "</foreach>" + 143 "</foreach>" +
144 "</script>") 144 "</script>")
145 List<GbStream> selectAllForAppAndStream(List<StreamPushItem> streamPushItems); 145 List<GbStream> selectAllForAppAndStream(List<StreamPushItem> streamPushItems);
  146 +
  147 + @Update("UPDATE gb_stream " +
  148 + "SET mediaServerId=#{mediaServerId}" +
  149 + "WHERE app=#{app} AND stream=#{stream}")
  150 + void updateMediaServer(String app, String stream, String mediaServerId);
146 } 151 }
src/main/resources/all-application.yml
@@ -149,7 +149,7 @@ media: @@ -149,7 +149,7 @@ media:
149 enable: true 149 enable: true
150 # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功 150 # [可选] 在此范围内选择端口用于媒体流传输, 必须提前在zlm上配置该属性,不然自动配置此属性可能不成功
151 port-range: 30000,30500 # 端口范围 151 port-range: 30000,30500 # 端口范围
152 - # [可选] 国标级联在此范围内选择端口发送媒体流, 152 + # [可选] 国标级联在此范围内选择端口发送媒体流
153 send-port-range: 30000,30500 # 端口范围 153 send-port-range: 30000,30500 # 端口范围
154 # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用 154 # 录像辅助服务, 部署此服务可以实现zlm录像的管理与下载, 0 表示不使用
155 record-assist-port: 0 155 record-assist-port: 0