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,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 |