Commit 142efdd9159678a6cbd734e07952fdee9fbf0c3e
1 parent
d09d8f11
修复单个添加的推流级联国标的问题
Showing
8 changed files
with
17 additions
and
8 deletions
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
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 | ... | ... |