Commit 5b3dc4d5957050c2ce3e3c0013337168d8c9f700

Authored by 648540858
1 parent 250a059c

优化点播结束后关闭RTPServer

src/main/java/com/genersoft/iot/vmp/common/VideoManagerConstants.java
@@ -99,6 +99,12 @@ public class VideoManagerConstants { @@ -99,6 +99,12 @@ public class VideoManagerConstants {
99 */ 99 */
100 public static final String VM_MSG_STREAM_PUSH_REQUESTED = "VM_MSG_STREAM_PUSH_REQUESTED"; 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 * redis 消息请求所有的在线通道 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,7 +12,6 @@ import org.springframework.data.redis.connection.RedisConnectionFactory;
12 import org.springframework.data.redis.core.RedisTemplate; 12 import org.springframework.data.redis.core.RedisTemplate;
13 import org.springframework.data.redis.listener.PatternTopic; 13 import org.springframework.data.redis.listener.PatternTopic;
14 import org.springframework.data.redis.listener.RedisMessageListenerContainer; 14 import org.springframework.data.redis.listener.RedisMessageListenerContainer;
15 -import org.springframework.data.redis.serializer.RedisSerializer;  
16 import org.springframework.data.redis.serializer.StringRedisSerializer; 15 import org.springframework.data.redis.serializer.StringRedisSerializer;
17 16
18 import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer; 17 import com.genersoft.iot.vmp.utils.redis.FastJsonRedisSerializer;
@@ -43,7 +42,10 @@ public class RedisConfig extends CachingConfigurerSupport { @@ -43,7 +42,10 @@ public class RedisConfig extends CachingConfigurerSupport {
43 private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener; 42 private RedisPushStreamStatusMsgListener redisPushStreamStatusMsgListener;
44 43
45 @Autowired 44 @Autowired
46 - private RedisPushStreamListMsgListener redisPushStreamListMsgListener; 45 + private RedisPushStreamStatusListMsgListener redisPushStreamListMsgListener;
  46 +
  47 + @Autowired
  48 + private RedisPushStreamResponseListener redisPushStreamResponseListener;
47 49
48 @Bean 50 @Bean
49 public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) { 51 public RedisTemplate<Object, Object> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
@@ -81,7 +83,7 @@ public class RedisConfig extends CachingConfigurerSupport { @@ -81,7 +83,7 @@ public class RedisConfig extends CachingConfigurerSupport {
81 container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY)); 83 container.addMessageListener(redisGbPlayMsgListener, new PatternTopic(RedisGbPlayMsgListener.WVP_PUSH_STREAM_KEY));
82 container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE)); 84 container.addMessageListener(redisPushStreamStatusMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_STATUS_CHANGE));
83 container.addMessageListener(redisPushStreamListMsgListener, new PatternTopic(VideoManagerConstants.VM_MSG_PUSH_STREAM_LIST_CHANGE)); 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 return container; 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,7 +694,7 @@ public class SIPCommander implements ISIPCommander {
694 dialog = streamSession.getDialogByStream(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 694 dialog = streamSession.getDialogByStream(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
695 } 695 }
696 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc()); 696 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
697 - mediaServerService.closeRTPServer(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 697 + mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream());
698 streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 698 streamSession.remove(ssrcTransaction.getDeviceId(), ssrcTransaction.getChannelId(), ssrcTransaction.getStream());
699 699
700 if (dialog == null) { 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,7 +121,7 @@ public class ByeRequestProcessor extends SIPRequestProcessorParent implements In
121 StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId); 121 StreamInfo streamInfo = redisCatchStorage.queryPlayByDevice(device.getDeviceId(), channelId);
122 if (streamInfo != null) { 122 if (streamInfo != null) {
123 redisCatchStorage.stopPlay(streamInfo); 123 redisCatchStorage.stopPlay(streamInfo);
124 - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, streamInfo.getStream()); 124 + mediaServerService.closeRTPServer(streamInfo.getMediaServerId(), streamInfo.getStream());
125 } 125 }
126 SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null); 126 SsrcTransaction ssrcTransactionForPlay = streamSession.getSsrcTransaction(device.getDeviceId(), channelId, "play", null);
127 if (ssrcTransactionForPlay != null){ 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,6 +24,7 @@ import com.genersoft.iot.vmp.service.IStreamPushService;
24 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; 24 import com.genersoft.iot.vmp.service.bean.MessageForPushChannel;
25 import com.genersoft.iot.vmp.service.bean.SSRCInfo; 25 import com.genersoft.iot.vmp.service.bean.SSRCInfo;
26 import com.genersoft.iot.vmp.service.impl.RedisGbPlayMsgListener; 26 import com.genersoft.iot.vmp.service.impl.RedisGbPlayMsgListener;
  27 +import com.genersoft.iot.vmp.service.impl.RedisPushStreamResponseListener;
27 import com.genersoft.iot.vmp.storager.IRedisCatchStorage; 28 import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
28 import com.genersoft.iot.vmp.storager.IVideoManagerStorage; 29 import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
29 import com.genersoft.iot.vmp.utils.DateUtil; 30 import com.genersoft.iot.vmp.utils.DateUtil;
@@ -74,7 +75,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -74,7 +75,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
74 private DynamicTask dynamicTask; 75 private DynamicTask dynamicTask;
75 76
76 @Autowired 77 @Autowired
77 - private SIPCommander cmder; 78 + private RedisPushStreamResponseListener redisPushStreamResponseListener;
78 79
79 @Autowired 80 @Autowired
80 private IPlayService playService; 81 private IPlayService playService;
@@ -556,7 +557,6 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -556,7 +557,6 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
556 otherWvpPushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 557 otherWvpPushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
557 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 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,6 +639,23 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
639 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 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,8 +79,8 @@ public class CatalogQueryMessageHandler extends SIPRequestProcessorParent implem
79 List<DeviceChannel> allChannels = new ArrayList<>(); 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 if (catalogs.size() > 0) { 86 if (catalogs.size() > 0) {
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -139,6 +139,7 @@ public class ZLMRTPServerFactory { @@ -139,6 +139,7 @@ public class ZLMRTPServerFactory {
139 param.put("stream_id", streamId); 139 param.put("stream_id", streamId);
140 JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(serverItem, param); 140 JSONObject jsonObject = zlmresTfulUtils.closeRtpServer(serverItem, param);
141 if (jsonObject != null ) { 141 if (jsonObject != null ) {
  142 + System.out.println(jsonObject);
142 if (jsonObject.getInteger("code") == 0) { 143 if (jsonObject.getInteger("code") == 0) {
143 result = jsonObject.getInteger("hit") == 1; 144 result = jsonObject.getInteger("hit") == 1;
144 }else { 145 }else {
src/main/java/com/genersoft/iot/vmp/service/IMediaServerService.java
@@ -50,7 +50,9 @@ public interface IMediaServerService { @@ -50,7 +50,9 @@ public interface IMediaServerService {
50 50
51 SSRCInfo openRTPServer(MediaServerItem mediaServerItem, String streamId, String ssrc, boolean ssrcCheck, boolean isPlayback, Integer port); 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 void clearRTPServer(MediaServerItem mediaServerItem); 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,6 +48,8 @@ public class MessageForPushChannel {
48 */ 48 */
49 private String mediaServerId; 49 private String mediaServerId;
50 50
  51 +
  52 +
51 public static MessageForPushChannel getInstance(int type, String app, String stream, String gbId, 53 public static MessageForPushChannel getInstance(int type, String app, String stream, String gbId,
52 String platFormId, String platFormName, String serverId, 54 String platFormId, String platFormName, String serverId,
53 String mediaServerId){ 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,7 +145,7 @@ public class DeviceServiceImpl implements IDeviceService {
145 if (ssrcTransactions != null && ssrcTransactions.size() > 0) { 145 if (ssrcTransactions != null && ssrcTransactions.size() > 0) {
146 for (SsrcTransaction ssrcTransaction : ssrcTransactions) { 146 for (SsrcTransaction ssrcTransaction : ssrcTransactions) {
147 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc()); 147 mediaServerService.releaseSsrc(ssrcTransaction.getMediaServerId(), ssrcTransaction.getSsrc());
148 - mediaServerService.closeRTPServer(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 148 + mediaServerService.closeRTPServer(ssrcTransaction.getMediaServerId(), ssrcTransaction.getStream());
149 streamSession.remove(deviceId, ssrcTransaction.getChannelId(), ssrcTransaction.getStream()); 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,16 +164,18 @@ public class MediaServerServiceImpl implements IMediaServerService {
164 } 164 }
165 165
166 @Override 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 @Override 181 @Override
src/main/java/com/genersoft/iot/vmp/service/impl/PlayServiceImpl.java
@@ -270,7 +270,7 @@ public class PlayServiceImpl implements IPlayService { @@ -270,7 +270,7 @@ public class PlayServiceImpl implements IPlayService {
270 logger.info("[点播超时] 消息未响应 deviceId: {}, channelId: {}", device.getDeviceId(), channelId); 270 logger.info("[点播超时] 消息未响应 deviceId: {}, channelId: {}", device.getDeviceId(), channelId);
271 timeoutCallback.run(0, "点播超时"); 271 timeoutCallback.run(0, "点播超时");
272 mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); 272 mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
273 - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); 273 + mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
274 streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); 274 streamSession.remove(device.getDeviceId(), channelId, finalSsrcInfo.getStream());
275 } 275 }
276 }, userSetting.getPlayTimeout()); 276 }, userSetting.getPlayTimeout());
@@ -333,7 +333,7 @@ public class PlayServiceImpl implements IPlayService { @@ -333,7 +333,7 @@ public class PlayServiceImpl implements IPlayService {
333 }); 333 });
334 } 334 }
335 // 关闭rtp server 335 // 关闭rtp server
336 - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); 336 + mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
337 // 重新开启ssrc server 337 // 重新开启ssrc server
338 mediaServerService.openRTPServer(mediaServerItem, finalSsrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), false, finalSsrcInfo.getPort()); 338 mediaServerService.openRTPServer(mediaServerItem, finalSsrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), false, finalSsrcInfo.getPort());
339 339
@@ -341,7 +341,7 @@ public class PlayServiceImpl implements IPlayService { @@ -341,7 +341,7 @@ public class PlayServiceImpl implements IPlayService {
341 } 341 }
342 }, (event) -> { 342 }, (event) -> {
343 dynamicTask.stop(timeOutTaskKey); 343 dynamicTask.stop(timeOutTaskKey);
344 - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, finalSsrcInfo.getStream()); 344 + mediaServerService.closeRTPServer(mediaServerItem, finalSsrcInfo.getStream());
345 // 释放ssrc 345 // 释放ssrc
346 mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc()); 346 mediaServerService.releaseSsrc(mediaServerItem.getId(), finalSsrcInfo.getSsrc());
347 347
@@ -445,7 +445,7 @@ public class PlayServiceImpl implements IPlayService { @@ -445,7 +445,7 @@ public class PlayServiceImpl implements IPlayService {
445 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); 445 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null);
446 }else { 446 }else {
447 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); 447 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
448 - mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); 448 + mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
449 streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); 449 streamSession.remove(deviceId, channelId, ssrcInfo.getStream());
450 } 450 }
451 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); 451 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null);
@@ -533,7 +533,7 @@ public class PlayServiceImpl implements IPlayService { @@ -533,7 +533,7 @@ public class PlayServiceImpl implements IPlayService {
533 }); 533 });
534 } 534 }
535 // 关闭rtp server 535 // 关闭rtp server
536 - mediaServerService.closeRTPServer(device.getDeviceId(), channelId, ssrcInfo.getStream()); 536 + mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
537 // 重新开启ssrc server 537 // 重新开启ssrc server
538 mediaServerService.openRTPServer(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), true, ssrcInfo.getPort()); 538 mediaServerService.openRTPServer(mediaServerItem, ssrcInfo.getStream(), ssrcInResponse, device.isSsrcCheck(), true, ssrcInfo.getPort());
539 } 539 }
@@ -593,7 +593,7 @@ public class PlayServiceImpl implements IPlayService { @@ -593,7 +593,7 @@ public class PlayServiceImpl implements IPlayService {
593 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); 593 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null);
594 }else { 594 }else {
595 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); 595 mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc());
596 - mediaServerService.closeRTPServer(deviceId, channelId, ssrcInfo.getStream()); 596 + mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream());
597 streamSession.remove(deviceId, channelId, ssrcInfo.getStream()); 597 streamSession.remove(deviceId, channelId, ssrcInfo.getStream());
598 } 598 }
599 cmder.streamByeCmd(device.getDeviceId(), channelId, ssrcInfo.getStream(), null); 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,7 +9,6 @@ import com.genersoft.iot.vmp.service.IStreamPushService;
9 import com.genersoft.iot.vmp.utils.DateUtil; 9 import com.genersoft.iot.vmp.utils.DateUtil;
10 import org.slf4j.Logger; 10 import org.slf4j.Logger;
11 import org.slf4j.LoggerFactory; 11 import org.slf4j.LoggerFactory;
12 -import org.springframework.beans.factory.annotation.Autowired;  
13 import org.springframework.data.redis.connection.Message; 12 import org.springframework.data.redis.connection.Message;
14 import org.springframework.data.redis.connection.MessageListener; 13 import org.springframework.data.redis.connection.MessageListener;
15 import org.springframework.stereotype.Component; 14 import org.springframework.stereotype.Component;
@@ -23,9 +22,9 @@ import java.util.*; @@ -23,9 +22,9 @@ import java.util.*;
23 * @Description: 接收redis发送的推流设备列表更新通知 22 * @Description: 接收redis发送的推流设备列表更新通知
24 */ 23 */
25 @Component 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 @Resource 28 @Resource
30 private IMediaServerService mediaServerService; 29 private IMediaServerService mediaServerService;
31 30