Commit 5b3dc4d5957050c2ce3e3c0013337168d8c9f700
1 parent
250a059c
优化点播结束后关闭RTPServer
Showing
15 changed files
with
193 additions
and
29 deletions
src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
| ... | ... | @@ -99,6 +99,12 @@ public class VideoManagerConstants { |
| 99 | 99 | */ |
| 100 | 100 | public static final String VM_MSG_STREAM_PUSH_REQUESTED = "VM_MSG_STREAM_PUSH_REQUESTED"; |
| 101 | 101 | |
| 102 | + | |
| 103 | + /** | |
| 104 | + * redis 消息通知平台通知设备推流结果 | |
| 105 | + */ | |
| 106 | + public static final String VM_MSG_STREAM_PUSH_RESPONSE = "VM_MSG_STREAM_PUSH_RESPONSE"; | |
| 107 | + | |
| 102 | 108 | /** |
| 103 | 109 | * redis 消息请求所有的在线通道 |
| 104 | 110 | */ | ... | ... |
src/main/java/com/genersoft/iot/vmp/conf/redis/RedisConfig.java
| ... | ... | @@ -12,7 +12,6 @@ import org.springframework.data.redis.connection.RedisConnectionFactory; |
| 12 | 12 | import org.springframework.data.redis.core.RedisTemplate; |
| 13 | 13 | import org.springframework.data.redis.listener.PatternTopic; |
| 14 | 14 | import org.springframework.data.redis.listener.RedisMessageListenerContainer; |
| 15 | -import org.springframework.data.redis.serializer.RedisSerializer; | |
| 16 | 15 | import org.springframework.data.redis.serializer.StringRedisSerializer; |
| 17 | 16 | |
| 18 | 17 | import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer; |
| ... | ... | @@ -43,7 +42,10 @@ public class RedisConfig extends CachingConfigurerSupport { |
| 43 | 42 | private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener; |
| 44 | 43 | |
| 45 | 44 | @Autowired |
| 46 | - private RedisPushStreamListMsgListener redisPushStreamListMsgListener; | |
| 45 | + private RedisPushStreamStatusListMsgListener redisPushStreamListMsgListener; | |
| 46 | + | |
| 47 | + @Autowired | |
| 48 | + private RedisPushStreamResponseListener redisPushStreamResponseListener; | |
| 47 | 49 | |
| 48 | 50 | @Bean |
| 49 | 51 | public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { |
| ... | ... | @@ -81,7 +83,7 @@ public class RedisConfig extends CachingConfigurerSupport { |
| 81 | 83 | container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY)); |
| 82 | 84 | container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE)); |
| 83 | 85 | container.addMessageListener(redisPushStreamListMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_LIST_CHANGE)); |
| 86 | + container.addMessageListener(redisPushStreamResponseListener, new PatternTopic(VideoManagerConstants.VM_MSG_STREAM_PUSH_RESPONSE)); | |
| 84 | 87 | return container; |
| 85 | 88 | } |
| 86 | - | |
| 87 | 89 | } | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
| ... | ... | @@ -694,7 +694,7 @@ public class SIPCommander implements ISIPCommander { |
| 694 | 694 | dialog = streamSession.getDialogByStream(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); |
| 695 | 695 | } |
| 696 | 696 | mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc()); |
| 697 | - mediaServerService.closeRTPServer(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); | |
| 697 | + mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream()); | |
| 698 | 698 | streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); |
| 699 | 699 | |
| 700 | 700 | if (dialog == null) { | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/ByeRequestProcessor.java
| ... | ... | @@ -121,7 +121,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In |
| 121 | 121 | StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId); |
| 122 | 122 | if (streamInfo != null) { |
| 123 | 123 | redisCatchStorage.stopPlay(streamInfo); |
| 124 | - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, streamInfo.getStream()); | |
| 124 | + mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream()); | |
| 125 | 125 | } |
| 126 | 126 | SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null); |
| 127 | 127 | if (ssrcTransactionForPlay != null){ | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
| ... | ... | @@ -24,6 +24,7 @@ import com.genersoft.iot.vmp.service.IStreamPushService; |
| 24 | 24 | import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; |
| 25 | 25 | import com.genersoft.iot.vmp.service.bean.SSRCInfo; |
| 26 | 26 | import com.genersoft.iot.vmp.service.impl.RedisGbPlayMsgListener; |
| 27 | +import com.genersoft.iot.vmp.service.impl.RedisPushStreamResponseListener; | |
| 27 | 28 | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| 28 | 29 | import com.genersoft.iot.vmp.storager.IVideoManagerStorage; |
| 29 | 30 | import com.genersoft.iot.vmp.utils.DateUtil; |
| ... | ... | @@ -74,7 +75,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements |
| 74 | 75 | private DynamicTask dynamicTask; |
| 75 | 76 | |
| 76 | 77 | @Autowired |
| 77 | - private SIPCommander cmder; | |
| 78 | + private RedisPushStreamResponseListener redisPushStreamResponseListener; | |
| 78 | 79 | |
| 79 | 80 | @Autowired |
| 80 | 81 | private IPlayService playService; |
| ... | ... | @@ -556,7 +557,6 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements |
| 556 | 557 | otherWvpPushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, |
| 557 | 558 | mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); |
| 558 | 559 | } |
| 559 | - | |
| 560 | 560 | } |
| 561 | 561 | /** |
| 562 | 562 | * 通知流上线 |
| ... | ... | @@ -639,6 +639,23 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements |
| 639 | 639 | mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); |
| 640 | 640 | } |
| 641 | 641 | }); |
| 642 | + | |
| 643 | + // 添加回复的拒绝或者错误的通知 | |
| 644 | + redisPushStreamResponseListener.addEvent(gbStream.getApp(), gbStream.getStream(), response -> { | |
| 645 | + if (response.getCode() != 0) { | |
| 646 | + dynamicTask.stop(callIdHeader.getCallId()); | |
| 647 | + mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream()); | |
| 648 | + try { | |
| 649 | + responseAck(evt, Response.TEMPORARILY_UNAVAILABLE, response.getMsg()); | |
| 650 | + } catch (SipException e) { | |
| 651 | + throw new RuntimeException(e); | |
| 652 | + } catch (InvalidArgumentException e) { | |
| 653 | + throw new RuntimeException(e); | |
| 654 | + } catch (ParseException e) { | |
| 655 | + throw new RuntimeException(e); | |
| 656 | + } | |
| 657 | + } | |
| 658 | + }); | |
| 642 | 659 | } |
| 643 | 660 | } |
| 644 | 661 | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/query/cmd/CatalogQueryMessageHandler.java
| ... | ... | @@ -79,8 +79,8 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem |
| 79 | 79 | List<DeviceChannel> allChannels = new ArrayList<>(); |
| 80 | 80 | |
| 81 | 81 | // 回复平台 |
| 82 | - DeviceChannel deviceChannel = getChannelForPlatform(parentPlatform); | |
| 83 | - allChannels.add(deviceChannel); | |
| 82 | +// DeviceChannel deviceChannel = getChannelForPlatform(parentPlatform); | |
| 83 | +// allChannels.add(deviceChannel); | |
| 84 | 84 | |
| 85 | 85 | // 回复目录 |
| 86 | 86 | if (catalogs.size() > 0) { | ... | ... |
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
| ... | ... | @@ -139,6 +139,7 @@ public class ZLMRTPServerFactory { |
| 139 | 139 | param.put("stream_id", streamId); |
| 140 | 140 | JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(serverItem, param); |
| 141 | 141 | if (jsonObject != null ) { |
| 142 | + System.out.println(jsonObject); | |
| 142 | 143 | if (jsonObject.getInteger("code") == 0) { |
| 143 | 144 | result = jsonObject.getInteger("hit") == 1; |
| 144 | 145 | }else { | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
| ... | ... | @@ -50,7 +50,9 @@ public interface IMediaServerService { |
| 50 | 50 | |
| 51 | 51 | SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port); |
| 52 | 52 | |
| 53 | - void closeRTPServer(String deviceId, String channelId, String ssrc); | |
| 53 | + void closeRTPServer(MediaServerItem mediaServerItem, String streamId); | |
| 54 | + | |
| 55 | + void closeRTPServer(String mediaServerId, String streamId); | |
| 54 | 56 | |
| 55 | 57 | void clearRTPServer(MediaServerItem mediaServerItem); |
| 56 | 58 | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/bean/MessageForPushChannel.java
| ... | ... | @@ -48,6 +48,8 @@ public class MessageForPushChannel { |
| 48 | 48 | */ |
| 49 | 49 | private String mediaServerId; |
| 50 | 50 | |
| 51 | + | |
| 52 | + | |
| 51 | 53 | public static MessageForPushChannel getInstance(int type, String app, String stream, String gbId, |
| 52 | 54 | String platFormId, String platFormName, String serverId, |
| 53 | 55 | String mediaServerId){ | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/bean/MessageForPushChannelResponse.java
0 → 100644
| 1 | +package com.genersoft.iot.vmp.service.bean; | |
| 2 | + | |
| 3 | +/** | |
| 4 | + * 当redis回复推流结果上级平台 | |
| 5 | + * @author lin | |
| 6 | + */ | |
| 7 | +public class MessageForPushChannelResponse { | |
| 8 | + /** | |
| 9 | + * 错误玛 | |
| 10 | + * 0 成功 1 失败 | |
| 11 | + */ | |
| 12 | + private int code; | |
| 13 | + /** | |
| 14 | + * 错误内容 | |
| 15 | + */ | |
| 16 | + private String msg; | |
| 17 | + | |
| 18 | + /** | |
| 19 | + * 流应用名 | |
| 20 | + */ | |
| 21 | + private String app; | |
| 22 | + | |
| 23 | + /** | |
| 24 | + * 流Id | |
| 25 | + */ | |
| 26 | + private String stream; | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + public static MessageForPushChannelResponse getInstance(int code, String msg, String app, String stream){ | |
| 31 | + MessageForPushChannelResponse messageForPushChannel = new MessageForPushChannelResponse(); | |
| 32 | + messageForPushChannel.setCode(code); | |
| 33 | + messageForPushChannel.setMsg(msg); | |
| 34 | + messageForPushChannel.setApp(app); | |
| 35 | + messageForPushChannel.setStream(stream); | |
| 36 | + return messageForPushChannel; | |
| 37 | + } | |
| 38 | + | |
| 39 | + | |
| 40 | + public int getCode() { | |
| 41 | + return code; | |
| 42 | + } | |
| 43 | + | |
| 44 | + public void setCode(int code) { | |
| 45 | + this.code = code; | |
| 46 | + } | |
| 47 | + | |
| 48 | + public String getApp() { | |
| 49 | + return app; | |
| 50 | + } | |
| 51 | + | |
| 52 | + public void setApp(String app) { | |
| 53 | + this.app = app; | |
| 54 | + } | |
| 55 | + | |
| 56 | + public String getStream() { | |
| 57 | + return stream; | |
| 58 | + } | |
| 59 | + | |
| 60 | + public void setStream(String stream) { | |
| 61 | + this.stream = stream; | |
| 62 | + } | |
| 63 | + | |
| 64 | + public String getMsg() { | |
| 65 | + return msg; | |
| 66 | + } | |
| 67 | + | |
| 68 | + public void setMsg(String msg) { | |
| 69 | + this.msg = msg; | |
| 70 | + } | |
| 71 | +} | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/impl/DeviceServiceImpl.java
| ... | ... | @@ -145,7 +145,7 @@ public class DeviceServiceImpl implements IDeviceService { |
| 145 | 145 | if (ssrcTransactions != null && ssrcTransactions.size() > 0) { |
| 146 | 146 | for (SsrcTransaction ssrcTransaction : ssrcTransactions) { |
| 147 | 147 | mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc()); |
| 148 | - mediaServerService.closeRTPServer(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); | |
| 148 | + mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream()); | |
| 149 | 149 | streamSession.remove(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); |
| 150 | 150 | } |
| 151 | 151 | } | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
| ... | ... | @@ -164,16 +164,18 @@ public class MediaServerServiceImpl implements IMediaServerService { |
| 164 | 164 | } |
| 165 | 165 | |
| 166 | 166 | @Override |
| 167 | - public void closeRTPServer(String deviceId, String channelId, String stream) { | |
| 168 | - String mediaServerId = streamSession.getMediaServerId(deviceId, channelId, stream); | |
| 169 | - String ssrc = streamSession.getSSRC(deviceId, channelId, stream); | |
| 170 | - MediaServerItem mediaServerItem = this.getOne(mediaServerId); | |
| 171 | - if (mediaServerItem != null) { | |
| 172 | - String streamId = String.format("%s_%s", deviceId, channelId); | |
| 173 | - zlmrtpServerFactory.closeRTPServer(mediaServerItem, streamId); | |
| 174 | - releaseSsrc(mediaServerItem.getId(), ssrc); | |
| 167 | + public void closeRTPServer(MediaServerItem mediaServerItem, String streamId) { | |
| 168 | + if (mediaServerItem == null) { | |
| 169 | + return; | |
| 175 | 170 | } |
| 176 | - streamSession.remove(deviceId, channelId, stream); | |
| 171 | + zlmrtpServerFactory.closeRTPServer(mediaServerItem, streamId); | |
| 172 | + releaseSsrc(mediaServerItem.getId(), streamId); | |
| 173 | + } | |
| 174 | + | |
| 175 | + @Override | |
| 176 | + public void closeRTPServer(String mediaServerId, String streamId) { | |
| 177 | + MediaServerItem mediaServerItem = this.getOne(mediaServerId); | |
| 178 | + closeRTPServer(mediaServerItem, streamId); | |
| 177 | 179 | } |
| 178 | 180 | |
| 179 | 181 | @Override | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
| ... | ... | @@ -270,7 +270,7 @@ public class PlayServiceImpl implements IPlayService { |
| 270 | 270 | logger.info("[点播超时] 消息未响应 deviceId: {}, channelId: {}", device.getDeviceId(), channelId); |
| 271 | 271 | timeoutCallback.run(0, "点播超时"); |
| 272 | 272 | mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); |
| 273 | - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); | |
| 273 | + mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream()); | |
| 274 | 274 | streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); |
| 275 | 275 | } |
| 276 | 276 | }, userSetting.getPlayTimeout()); |
| ... | ... | @@ -333,7 +333,7 @@ public class PlayServiceImpl implements IPlayService { |
| 333 | 333 | }); |
| 334 | 334 | } |
| 335 | 335 | // 关闭rtp server |
| 336 | - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); | |
| 336 | + mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream()); | |
| 337 | 337 | // 重新开启ssrc server |
| 338 | 338 | mediaServerService.openRTPServer(mediaServerItem, finalSsrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), false, finalSsrcInfo.getPort()); |
| 339 | 339 | |
| ... | ... | @@ -341,7 +341,7 @@ public class PlayServiceImpl implements IPlayService { |
| 341 | 341 | } |
| 342 | 342 | }, (event) -> { |
| 343 | 343 | dynamicTask.stop(timeOutTaskKey); |
| 344 | - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); | |
| 344 | + mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream()); | |
| 345 | 345 | // 释放ssrc |
| 346 | 346 | mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); |
| 347 | 347 | |
| ... | ... | @@ -445,7 +445,7 @@ public class PlayServiceImpl implements IPlayService { |
| 445 | 445 | cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); |
| 446 | 446 | }else { |
| 447 | 447 | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| 448 | - mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); | |
| 448 | + mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream()); | |
| 449 | 449 | streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); |
| 450 | 450 | } |
| 451 | 451 | cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); |
| ... | ... | @@ -533,7 +533,7 @@ public class PlayServiceImpl implements IPlayService { |
| 533 | 533 | }); |
| 534 | 534 | } |
| 535 | 535 | // 关闭rtp server |
| 536 | - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, ssrcInfo.getStream()); | |
| 536 | + mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream()); | |
| 537 | 537 | // 重新开启ssrc server |
| 538 | 538 | mediaServerService.openRTPServer(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), true, ssrcInfo.getPort()); |
| 539 | 539 | } |
| ... | ... | @@ -593,7 +593,7 @@ public class PlayServiceImpl implements IPlayService { |
| 593 | 593 | cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); |
| 594 | 594 | }else { |
| 595 | 595 | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| 596 | - mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); | |
| 596 | + mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream()); | |
| 597 | 597 | streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); |
| 598 | 598 | } |
| 599 | 599 | cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/impl/RedisPushStreamResponseListener.java
0 → 100644
| 1 | +package com.genersoft.iot.vmp.service.impl; | |
| 2 | + | |
| 3 | +import com.alibaba.fastjson.JSON; | |
| 4 | +import com.alibaba.fastjson.JSONObject; | |
| 5 | +import com.genersoft.iot.vmp.media.zlm.dto.ChannelOnlineEvent; | |
| 6 | +import com.genersoft.iot.vmp.media.zlm.dto.StreamPushItem; | |
| 7 | +import com.genersoft.iot.vmp.service.IGbStreamService; | |
| 8 | +import com.genersoft.iot.vmp.service.IMediaServerService; | |
| 9 | +import com.genersoft.iot.vmp.service.IStreamPushService; | |
| 10 | +import com.genersoft.iot.vmp.service.bean.MessageForPushChannelResponse; | |
| 11 | +import com.genersoft.iot.vmp.utils.DateUtil; | |
| 12 | +import org.slf4j.Logger; | |
| 13 | +import org.slf4j.LoggerFactory; | |
| 14 | +import org.springframework.data.redis.connection.Message; | |
| 15 | +import org.springframework.data.redis.connection.MessageListener; | |
| 16 | +import org.springframework.stereotype.Component; | |
| 17 | +import org.springframework.util.ObjectUtils; | |
| 18 | + | |
| 19 | +import javax.annotation.Resource; | |
| 20 | +import java.util.ArrayList; | |
| 21 | +import java.util.List; | |
| 22 | +import java.util.Map; | |
| 23 | +import java.util.concurrent.ConcurrentHashMap; | |
| 24 | + | |
| 25 | +/** | |
| 26 | + * 接收redis返回的推流结果 | |
| 27 | + * @author lin | |
| 28 | + */ | |
| 29 | +@Component | |
| 30 | +public class RedisPushStreamResponseListener implements MessageListener { | |
| 31 | + | |
| 32 | + private final static Logger logger = LoggerFactory.getLogger(RedisPushStreamResponseListener.class); | |
| 33 | + | |
| 34 | + private Map<String, PushStreamResponseEvent> responseEvents = new ConcurrentHashMap<>(); | |
| 35 | + | |
| 36 | + public interface PushStreamResponseEvent{ | |
| 37 | + void run(MessageForPushChannelResponse response); | |
| 38 | + } | |
| 39 | + | |
| 40 | + @Override | |
| 41 | + public void onMessage(Message message, byte[] bytes) { | |
| 42 | + // | |
| 43 | + logger.warn("[REDIS消息-请求推流结果]: {}", new String(message.getBody())); | |
| 44 | + MessageForPushChannelResponse response = JSON.parseObject(new String(message.getBody()), MessageForPushChannelResponse.class); | |
| 45 | + if (response == null || ObjectUtils.isEmpty(response.getApp()) || ObjectUtils.isEmpty(response.getStream())){ | |
| 46 | + logger.info("[REDIS消息-请求推流结果]:参数不全"); | |
| 47 | + return; | |
| 48 | + } | |
| 49 | + // 查看正在等待的invite消息 | |
| 50 | + if (responseEvents.get(response.getApp() + response.getStream()) != null) { | |
| 51 | + responseEvents.get(response.getApp() + response.getStream()).run(response); | |
| 52 | + } | |
| 53 | + } | |
| 54 | + | |
| 55 | + public void addEvent(String app, String stream, PushStreamResponseEvent callback) { | |
| 56 | + responseEvents.put(app + stream, callback); | |
| 57 | + } | |
| 58 | + | |
| 59 | + public void removeEvent(String app, String stream) { | |
| 60 | + responseEvents.remove(app + stream); | |
| 61 | + } | |
| 62 | +} | ... | ... |
src/main/java/com/genersoft/iot/vmp/service/impl/RedisPushStreamListMsgListener.java renamed to src/main/java/com/genersoft/iot/vmp/service/impl/RedisPushStreamStatusListMsgListener.java
| ... | ... | @@ -9,7 +9,6 @@ import com.genersoft.iot.vmp.service.IStreamPushService; |
| 9 | 9 | import com.genersoft.iot.vmp.utils.DateUtil; |
| 10 | 10 | import org.slf4j.Logger; |
| 11 | 11 | import org.slf4j.LoggerFactory; |
| 12 | -import org.springframework.beans.factory.annotation.Autowired; | |
| 13 | 12 | import org.springframework.data.redis.connection.Message; |
| 14 | 13 | import org.springframework.data.redis.connection.MessageListener; |
| 15 | 14 | import org.springframework.stereotype.Component; |
| ... | ... | @@ -23,9 +22,9 @@ import java.util.*; |
| 23 | 22 | * @Description: 接收redis发送的推流设备列表更新通知 |
| 24 | 23 | */ |
| 25 | 24 | @Component |
| 26 | -public class RedisPushStreamListMsgListener implements MessageListener { | |
| 25 | +public class RedisPushStreamStatusListMsgListener implements MessageListener { | |
| 27 | 26 | |
| 28 | - private final static Logger logger = LoggerFactory.getLogger(RedisPushStreamListMsgListener.class); | |
| 27 | + private final static Logger logger = LoggerFactory.getLogger(RedisPushStreamStatusListMsgListener.class); | |
| 29 | 28 | @Resource |
| 30 | 29 | private IMediaServerService mediaServerService; |
| 31 | 30 | ... | ... |