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