Commit b957ab61c7d7f54716f81f4cd9474238fd110e1d

Authored by 648540858
1 parent c77c1a95

bug修复

src/main/java/com/genersoft/iot/vmp/gb28181/task/impl/MobilePositionSubscribeTask.java
@@ -39,9 +39,9 @@ public class MobilePositionSubscribeTask implements ISubscribeTask { @@ -39,9 +39,9 @@ public class MobilePositionSubscribeTask implements ISubscribeTask {
39 dynamicTask.stop(taskKey); 39 dynamicTask.stop(taskKey);
40 } 40 }
41 sipCommander.mobilePositionSubscribe(device, dialog, eventResult -> { 41 sipCommander.mobilePositionSubscribe(device, dialog, eventResult -> {
42 -// if (eventResult.dialog != null || eventResult.dialog.getState().equals(DialogState.CONFIRMED)) {  
43 -// dialog = eventResult.dialog;  
44 -// } 42 + if (eventResult.dialog != null || eventResult.dialog.getState().equals(DialogState.CONFIRMED)) {
  43 + dialog = eventResult.dialog;
  44 + }
45 ResponseEvent event = (ResponseEvent) eventResult.event; 45 ResponseEvent event = (ResponseEvent) eventResult.event;
46 if (event.getResponse().getRawContent() != null) { 46 if (event.getResponse().getRawContent() != null) {
47 // 成功 47 // 成功
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/InviteRequestProcessor.java
@@ -419,12 +419,12 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -419,12 +419,12 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
419 } 419 }
420 } 420 }
421 } else if (gbStream != null) { 421 } else if (gbStream != null) {
422 - if (streamPushItem != null && streamPushItem.isStatus()) {  
423 - // 在线状态 422 + if (streamPushItem != null && streamPushItem.isPushIng()) {
  423 + // 推流状态
424 pushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 424 pushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
425 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 425 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
426 } else { 426 } else {
427 - // 不在线 拉起 427 + // 未推流 拉起
428 notifyStreamOnline(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 428 notifyStreamOnline(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
429 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 429 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
430 } 430 }
@@ -451,7 +451,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -451,7 +451,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
451 int port, Boolean tcpActive, boolean mediaTransmissionTCP, 451 int port, Boolean tcpActive, boolean mediaTransmissionTCP,
452 String channelId, String addressStr, String ssrc, String requesterId) throws InvalidArgumentException, ParseException, SipException { 452 String channelId, String addressStr, String ssrc, String requesterId) throws InvalidArgumentException, ParseException, SipException {
453 // 推流 453 // 推流
454 - if (streamPushItem.getServerId().equals(userSetting.getServerId())) { 454 + if (streamPushItem.isSelf()) {
455 Boolean streamReady = zlmrtpServerFactory.isStreamReady(mediaServerItem, gbStream.getApp(), gbStream.getStream()); 455 Boolean streamReady = zlmrtpServerFactory.isStreamReady(mediaServerItem, gbStream.getApp(), gbStream.getStream());
456 if (streamReady) { 456 if (streamReady) {
457 // 自平台内容 457 // 自平台内容
@@ -500,7 +500,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -500,7 +500,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
500 String channelId, String addressStr, String ssrc, String requesterId) throws InvalidArgumentException, ParseException, SipException { 500 String channelId, String addressStr, String ssrc, String requesterId) throws InvalidArgumentException, ParseException, SipException {
501 if ("proxy".equals(gbStream.getStreamType())) { 501 if ("proxy".equals(gbStream.getStreamType())) {
502 // TODO 控制启用以使设备上线 502 // TODO 控制启用以使设备上线
503 - logger.info("[ app={}, stream={} ]通道离线,启用流后开始推流", gbStream.getApp(), gbStream.getStream()); 503 + logger.info("[ app={}, stream={} ]通道未推流,启用流后开始推流", gbStream.getApp(), gbStream.getStream());
504 responseAck(evt, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline"); 504 responseAck(evt, Response.BAD_REQUEST, "channel [" + gbStream.getGbId() + "] offline");
505 } else if ("push".equals(gbStream.getStreamType())) { 505 } else if ("push".equals(gbStream.getStreamType())) {
506 if (!platform.isStartOfflinePush()) { 506 if (!platform.isStartOfflinePush()) {
@@ -508,7 +508,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -508,7 +508,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
508 return; 508 return;
509 } 509 }
510 // 发送redis消息以使设备上线 510 // 发送redis消息以使设备上线
511 - logger.info("[ app={}, stream={} ]通道离线,发送redis信息控制设备开始推流", gbStream.getApp(), gbStream.getStream()); 511 + logger.info("[ app={}, stream={} ]通道未推流,发送redis信息控制设备开始推流", gbStream.getApp(), gbStream.getStream());
512 512
513 MessageForPushChannel messageForPushChannel = MessageForPushChannel.getInstance(1, 513 MessageForPushChannel messageForPushChannel = MessageForPushChannel.getInstance(1,
514 gbStream.getApp(), gbStream.getStream(), gbStream.getGbId(), gbStream.getPlatformId(), 514 gbStream.getApp(), gbStream.getStream(), gbStream.getGbId(), gbStream.getPlatformId(),
@@ -518,7 +518,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -518,7 +518,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
518 dynamicTask.startDelay(callIdHeader.getCallId(), () -> { 518 dynamicTask.startDelay(callIdHeader.getCallId(), () -> {
519 logger.info("[ app={}, stream={} ] 等待设备开始推流超时", gbStream.getApp(), gbStream.getStream()); 519 logger.info("[ app={}, stream={} ] 等待设备开始推流超时", gbStream.getApp(), gbStream.getStream());
520 try { 520 try {
521 - mediaListManager.removedChannelOnlineEventLister(gbStream.getGbId()); 521 + mediaListManager.removedChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream());
522 responseAck(evt, Response.REQUEST_TIMEOUT); // 超时 522 responseAck(evt, Response.REQUEST_TIMEOUT); // 超时
523 } catch (SipException e) { 523 } catch (SipException e) {
524 e.printStackTrace(); 524 e.printStackTrace();
@@ -533,7 +533,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -533,7 +533,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
533 Boolean finalTcpActive = tcpActive; 533 Boolean finalTcpActive = tcpActive;
534 534
535 // 添加在本机上线的通知 535 // 添加在本机上线的通知
536 - mediaListManager.addChannelOnlineEventLister(gbStream.getGbId(), (app, stream, serverId) -> { 536 + mediaListManager.addChannelOnlineEventLister(gbStream.getApp(), gbStream.getStream(), (app, stream, serverId) -> {
537 dynamicTask.stop(callIdHeader.getCallId()); 537 dynamicTask.stop(callIdHeader.getCallId());
538 if (serverId.equals(userSetting.getServerId())) { 538 if (serverId.equals(userSetting.getServerId())) {
539 SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(mediaServerItem, addressStr, finalPort, ssrc, requesterId, 539 SendRtpItem sendRtpItem = zlmrtpServerFactory.createSendRtpItem(mediaServerItem, addressStr, finalPort, ssrc, requesterId,
@@ -621,7 +621,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements @@ -621,7 +621,7 @@ public class InviteRequestProcessor extends SIPRequestProcessorParent implements
621 // 离线 621 // 离线
622 // 查询是否在本机上线了 622 // 查询是否在本机上线了
623 StreamPushItem currentStreamPushItem = streamPushService.getPush(streamPushItem.getApp(), streamPushItem.getStream()); 623 StreamPushItem currentStreamPushItem = streamPushService.getPush(streamPushItem.getApp(), streamPushItem.getStream());
624 - if (currentStreamPushItem.isStatus()) { 624 + if (currentStreamPushItem.isPushIng()) {
625 // 在线状态 625 // 在线状态
626 pushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive, 626 pushStream(evt, gbStream, streamPushItem, platform, callIdHeader, mediaServerItem, port, tcpActive,
627 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId); 627 mediaTransmissionTCP, channelId, addressStr, ssrc, requesterId);
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/NotifyRequestProcessor.java
@@ -350,17 +350,17 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements @@ -350,17 +350,17 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
350 switch (event) { 350 switch (event) {
351 case CatalogEvent.ON: 351 case CatalogEvent.ON:
352 // 上线 352 // 上线
353 - logger.info("收到来自设备【{}】的通道【{}】上线通知", device.getDeviceId(), channel.getChannelId()); 353 + logger.info("[收到通道上线通知] 来自设备: {}, 通道 {}", device.getDeviceId(), channel.getChannelId());
354 storager.deviceChannelOnline(deviceId, channel.getChannelId()); 354 storager.deviceChannelOnline(deviceId, channel.getChannelId());
355 break; 355 break;
356 case CatalogEvent.OFF : 356 case CatalogEvent.OFF :
357 // 离线 357 // 离线
358 - logger.info("收到来自设备【{}】的通道【{}】离线通知", device.getDeviceId(), channel.getChannelId()); 358 + logger.info("[收到通道离线通知] 来自设备: {}, 通道 {}", device.getDeviceId(), channel.getChannelId());
359 storager.deviceChannelOffline(deviceId, channel.getChannelId()); 359 storager.deviceChannelOffline(deviceId, channel.getChannelId());
360 break; 360 break;
361 case CatalogEvent.VLOST: 361 case CatalogEvent.VLOST:
362 // 视频丢失 362 // 视频丢失
363 - logger.info("收到来自设备【{}】的通道【{}】视频丢失通知", device.getDeviceId(), channel.getChannelId()); 363 + logger.info("[收到通道视频丢失通知] 来自设备: {}, 通道 {}", device.getDeviceId(), channel.getChannelId());
364 storager.deviceChannelOffline(deviceId, channel.getChannelId()); 364 storager.deviceChannelOffline(deviceId, channel.getChannelId());
365 break; 365 break;
366 case CatalogEvent.DEFECT: 366 case CatalogEvent.DEFECT:
@@ -368,17 +368,17 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements @@ -368,17 +368,17 @@ public class NotifyRequestProcessor extends SIPRequestProcessorParent implements
368 break; 368 break;
369 case CatalogEvent.ADD: 369 case CatalogEvent.ADD:
370 // 增加 370 // 增加
371 - logger.info("收到来自设备【{}】的增加通道【{}】通知", device.getDeviceId(), channel.getChannelId()); 371 + logger.info("[收到增加通道通知] 来自设备: {}, 通道 {}", device.getDeviceId(), channel.getChannelId());
372 deviceChannelService.updateChannel(deviceId, channel); 372 deviceChannelService.updateChannel(deviceId, channel);
373 break; 373 break;
374 case CatalogEvent.DEL: 374 case CatalogEvent.DEL:
375 // 删除 375 // 删除
376 - logger.info("收到来自设备【{}】的删除通道【{}】通知", device.getDeviceId(), channel.getChannelId()); 376 + logger.info("[收到删除通道通知] 来自设备: {}, 通道 {}", device.getDeviceId(), channel.getChannelId());
377 storager.delChannel(deviceId, channel.getChannelId()); 377 storager.delChannel(deviceId, channel.getChannelId());
378 break; 378 break;
379 case CatalogEvent.UPDATE: 379 case CatalogEvent.UPDATE:
380 // 更新 380 // 更新
381 - logger.info("收到来自设备【{}】的更新通道【{}】通知", device.getDeviceId(), channel.getChannelId()); 381 + logger.info("[收到更新通道通知] 来自设备: {}, 通道 {}", device.getDeviceId(), channel.getChannelId());
382 deviceChannelService.updateChannel(deviceId, channel); 382 deviceChannelService.updateChannel(deviceId, channel);
383 break; 383 break;
384 default: 384 default:
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/notify/cmd/AlarmNotifyMessageHandler.java
@@ -69,7 +69,7 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme @@ -69,7 +69,7 @@ public class AlarmNotifyMessageHandler extends SIPRequestProcessorParent impleme
69 69
70 @Override 70 @Override
71 public void handForDevice(RequestEvent evt, Device device, Element rootElement) { 71 public void handForDevice(RequestEvent evt, Device device, Element rootElement) {
72 - logger.info("收到来自设备[{}]的报警通知", device.getDeviceId()); 72 + logger.info("[收到报警通知]设备:{}", device.getDeviceId());
73 // 回复200 OK 73 // 回复200 OK
74 try { 74 try {
75 responseAck(evt, Response.OK); 75 responseAck(evt, Response.OK);
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/response/cmd/CatalogResponseMessageHandler.java
@@ -111,7 +111,7 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp @@ -111,7 +111,7 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp
111 int sumNum = Integer.parseInt(sumNumElement.getText()); 111 int sumNum = Integer.parseInt(sumNumElement.getText());
112 112
113 if (sumNum == 0) { 113 if (sumNum == 0) {
114 - logger.info("收到来自设备【{}】的通道: 0个", take.getDevice().getDeviceId()); 114 + logger.info("[收到通道]设备:{}的: 0个", take.getDevice().getDeviceId());
115 // 数据已经完整接收 115 // 数据已经完整接收
116 storager.cleanChannelsForDevice(take.getDevice().getDeviceId()); 116 storager.cleanChannelsForDevice(take.getDevice().getDeviceId());
117 catalogDataCatch.setChannelSyncEnd(take.getDevice().getDeviceId(), null); 117 catalogDataCatch.setChannelSyncEnd(take.getDevice().getDeviceId(), null);
@@ -133,7 +133,7 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp @@ -133,7 +133,7 @@ public class CatalogResponseMessageHandler extends SIPRequestProcessorParent imp
133 } 133 }
134 int sn = Integer.parseInt(snElement.getText()); 134 int sn = Integer.parseInt(snElement.getText());
135 catalogDataCatch.put(take.getDevice().getDeviceId(), sn, sumNum, take.getDevice(), channelList); 135 catalogDataCatch.put(take.getDevice().getDeviceId(), sn, sumNum, take.getDevice(), channelList);
136 - logger.info("收到来自设备【{}】的通道: {}个,{}/{}", take.getDevice().getDeviceId(), channelList.size(), catalogDataCatch.get(take.getDevice().getDeviceId()) == null ? 0 :catalogDataCatch.get(take.getDevice().getDeviceId()).size(), sumNum); 136 + logger.info("[收到通道]设备: {} -> {}个,{}/{}", take.getDevice().getDeviceId(), channelList.size(), catalogDataCatch.get(take.getDevice().getDeviceId()) == null ? 0 :catalogDataCatch.get(take.getDevice().getDeviceId()).size(), sumNum);
137 if (catalogDataCatch.get(take.getDevice().getDeviceId()).size() == sumNum) { 137 if (catalogDataCatch.get(take.getDevice().getDeviceId()).size() == sumNum) {
138 // 数据已经完整接收 138 // 数据已经完整接收
139 boolean resetChannelsResult = storager.resetChannels(take.getDevice().getDeviceId(), catalogDataCatch.get(take.getDevice().getDeviceId())); 139 boolean resetChannelsResult = storager.resetChannels(take.getDevice().getDeviceId(), catalogDataCatch.get(take.getDevice().getDeviceId()));
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -240,6 +240,8 @@ public class ZLMHttpHookListener { @@ -240,6 +240,8 @@ public class ZLMHttpHookListener {
240 if (mediaInfo != null) { 240 if (mediaInfo != null) {
241 assistRESTfulUtils.addStreamCallInfo(mediaInfo, param.getApp(), param.getStream(), callId, null); 241 assistRESTfulUtils.addStreamCallInfo(mediaInfo, param.getApp(), param.getStream(), callId, null);
242 } 242 }
  243 + }else {
  244 + zlmMediaListManager.sendStreamEvent(param.getApp(),param.getStream(), param.getMediaServerId());
243 } 245 }
244 246
245 ret.put("code", 0); 247 ret.put("code", 0);
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMMediaListManager.java
@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject; @@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
4 import com.genersoft.iot.vmp.conf.UserSetting; 4 import com.genersoft.iot.vmp.conf.UserSetting;
5 import com.genersoft.iot.vmp.gb28181.bean.GbStream; 5 import com.genersoft.iot.vmp.gb28181.bean.GbStream;
6 import com.genersoft.iot.vmp.media.zlm.dto.*; 6 import com.genersoft.iot.vmp.media.zlm.dto.*;
  7 +import com.genersoft.iot.vmp.service.IMediaServerService;
7 import com.genersoft.iot.vmp.service.IStreamProxyService; 8 import com.genersoft.iot.vmp.service.IStreamProxyService;
8 import com.genersoft.iot.vmp.service.IStreamPushService; 9 import com.genersoft.iot.vmp.service.IStreamPushService;
9 import com.genersoft.iot.vmp.service.bean.ThirdPartyGB; 10 import com.genersoft.iot.vmp.service.bean.ThirdPartyGB;
@@ -63,7 +64,13 @@ public class ZLMMediaListManager { @@ -63,7 +64,13 @@ public class ZLMMediaListManager {
63 @Autowired 64 @Autowired
64 private UserSetting userSetting; 65 private UserSetting userSetting;
65 66
66 - private Map<String, ChannelOnlineEvent> channelOnlineEvents = new ConcurrentHashMap<>(); 67 + @Autowired
  68 + private ZLMRTPServerFactory zlmrtpServerFactory;
  69 +
  70 + @Autowired
  71 + private IMediaServerService mediaServerService;
  72 +
  73 + private Map<String, ChannelOnlineEvent> channelOnPublishEvents = new ConcurrentHashMap<>();
67 74
68 public StreamPushItem addPush(MediaItem mediaItem) { 75 public StreamPushItem addPush(MediaItem mediaItem) {
69 // 查找此直播流是否存在redis预设gbId 76 // 查找此直播流是否存在redis预设gbId
@@ -79,9 +86,26 @@ public class ZLMMediaListManager { @@ -79,9 +86,26 @@ public class ZLMMediaListManager {
79 }else { 86 }else {
80 streamPushMapper.update(transform); 87 streamPushMapper.update(transform);
81 } 88 }
  89 + if (transform != null) {
  90 + if (getChannelOnlineEventLister(transform.getApp(), transform.getStream()) != null) {
  91 + getChannelOnlineEventLister(transform.getApp(), transform.getStream()).run(transform.getApp(), transform.getStream(), transform.getServerId());
  92 + removedChannelOnlineEventLister(transform.getApp(), transform.getStream());
  93 + }
  94 + }
82 return transform; 95 return transform;
83 } 96 }
84 97
  98 + public void sendStreamEvent(String app, String stream, String mediaServerId) {
  99 + MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
  100 + // 查看推流状态
  101 + if (zlmrtpServerFactory.isStreamReady(mediaServerItem, app, stream)) {
  102 + if (getChannelOnlineEventLister(app, stream) != null) {
  103 + getChannelOnlineEventLister(app, stream).run(app, stream, mediaServerId);
  104 + removedChannelOnlineEventLister(app, stream);
  105 + }
  106 + }
  107 + }
  108 +
85 public int removeMedia(String app, String streamId) { 109 public int removeMedia(String app, String streamId) {
86 // 查找是否关联了国标, 关联了不删除, 置为离线 110 // 查找是否关联了国标, 关联了不删除, 置为离线
87 GbStream gbStream = gbStreamMapper.selectOne(app, streamId); 111 GbStream gbStream = gbStreamMapper.selectOne(app, streamId);
@@ -89,48 +113,21 @@ public class ZLMMediaListManager { @@ -89,48 +113,21 @@ public class ZLMMediaListManager {
89 if (gbStream == null) { 113 if (gbStream == null) {
90 result = storager.removeMedia(app, streamId); 114 result = storager.removeMedia(app, streamId);
91 }else { 115 }else {
92 - // TODO 暂不设置为离线  
93 result =storager.mediaOffline(app, streamId); 116 result =storager.mediaOffline(app, streamId);
94 } 117 }
95 return result; 118 return result;
96 } 119 }
97 120
98 - public void addChannelOnlineEventLister(String key, ChannelOnlineEvent callback) {  
99 - this.channelOnlineEvents.put(key,callback); 121 + public void addChannelOnlineEventLister(String app, String stream, ChannelOnlineEvent callback) {
  122 + this.channelOnPublishEvents.put(app + "_" + stream, callback);
100 } 123 }
101 124
102 - public void removedChannelOnlineEventLister(String key) {  
103 - this.channelOnlineEvents.remove(key); 125 + public void removedChannelOnlineEventLister(String app, String stream) {
  126 + this.channelOnPublishEvents.remove(app + "_" + stream);
104 } 127 }
105 128
  129 + public ChannelOnlineEvent getChannelOnlineEventLister(String app, String stream) {
  130 + return this.channelOnPublishEvents.get(app + "_" + stream);
  131 + }
106 132
107 -  
108 -// public void clearAllSessions() {  
109 -// logger.info("清空所有国标相关的session");  
110 -// JSONObject allSessionJSON = zlmresTfulUtils.getAllSession();  
111 -// ZLMServerConfig mediaInfo = redisCatchStorage.getMediaInfo();  
112 -// HashSet<String> allLocalPorts = new HashSet();  
113 -// if (allSessionJSON.getInteger("code") == 0) {  
114 -// JSONArray data = allSessionJSON.getJSONArray("data");  
115 -// if (data.size() > 0) {  
116 -// for (int i = 0; i < data.size(); i++) {  
117 -// JSONObject sessionJOSN = data.getJSONObject(i);  
118 -// Integer local_port = sessionJOSN.getInteger("local_port");  
119 -// if (!local_port.equals(Integer.valueOf(mediaInfo.getHttpPort())) &&  
120 -// !local_port.equals(Integer.valueOf(mediaInfo.getHttpSSLport())) &&  
121 -// !local_port.equals(Integer.valueOf(mediaInfo.getRtmpPort())) &&  
122 -// !local_port.equals(Integer.valueOf(mediaInfo.getRtspPort())) &&  
123 -// !local_port.equals(Integer.valueOf(mediaInfo.getRtspSSlport())) &&  
124 -// !local_port.equals(Integer.valueOf(mediaInfo.getHookOnFlowReport()))){  
125 -// allLocalPorts.add(sessionJOSN.getInteger("local_port") + "");  
126 -// }  
127 -// }  
128 -// }  
129 -// }  
130 -// if (allLocalPorts.size() > 0) {  
131 -// List<String> result = new ArrayList<>(allLocalPorts);  
132 -// String localPortSStr = String.join(",", result);  
133 -// zlmresTfulUtils.kickSessions(localPortSStr);  
134 -// }  
135 -// }  
136 } 133 }
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
@@ -273,8 +273,10 @@ public class ZLMRTPServerFactory { @@ -273,8 +273,10 @@ public class ZLMRTPServerFactory {
273 * 查询待转推的流是否就绪 273 * 查询待转推的流是否就绪
274 */ 274 */
275 public Boolean isStreamReady(MediaServerItem mediaServerItem, String app, String streamId) { 275 public Boolean isStreamReady(MediaServerItem mediaServerItem, String app, String streamId) {
276 - JSONObject mediaInfo = zlmresTfulUtils.getMediaInfo(mediaServerItem, app, "rtmp", streamId);  
277 - return (mediaInfo.getInteger("code") == 0 && mediaInfo.getBoolean("online")); 276 + JSONObject mediaInfo = zlmresTfulUtils.getMediaList(mediaServerItem, app, streamId);
  277 + return (mediaInfo.getInteger("code") == 0
  278 + && mediaInfo.getJSONArray("data") != null
  279 + && mediaInfo.getJSONArray("data").size() > 0);
278 } 280 }
279 281
280 /** 282 /**
src/main/java/com/genersoft/iot/vmp/service/impl/RedisStreamMsgListener.java
@@ -72,9 +72,10 @@ public class RedisStreamMsgListener implements MessageListener { @@ -72,9 +72,10 @@ public class RedisStreamMsgListener implements MessageListener {
72 mediaItem.setOriginType(0); 72 mediaItem.setOriginType(0);
73 mediaItem.setOriginTypeStr("0"); 73 mediaItem.setOriginTypeStr("0");
74 mediaItem.setOriginTypeStr("unknown"); 74 mediaItem.setOriginTypeStr("unknown");
75 -  
76 - zlmMediaListManager.addPush(mediaItem);  
77 -  
78 - 75 + if (register) {
  76 + zlmMediaListManager.addPush(mediaItem);
  77 + }else {
  78 + zlmMediaListManager.removeMedia(app, stream);
  79 + }
79 } 80 }
80 } 81 }
src/main/java/com/genersoft/iot/vmp/vmanager/streamPush/StreamPushController.java
@@ -264,9 +264,8 @@ public class StreamPushController { @@ -264,9 +264,8 @@ public class StreamPushController {
264 }) 264 })
265 @GetMapping(value = "/getPlayUrl") 265 @GetMapping(value = "/getPlayUrl")
266 @ResponseBody 266 @ResponseBody
267 - public WVPResult<StreamInfo> getPlayUrl(HttpServletRequest request, @RequestParam String app,  
268 - @RequestParam String stream,  
269 - @RequestParam(required = false) String mediaServerId){ 267 + public WVPResult<StreamInfo> getPlayUrl(@RequestParam String app,@RequestParam String stream,
  268 + @RequestParam(required = false) String mediaServerId){
270 boolean authority = false; 269 boolean authority = false;
271 // 是否登陆用户, 登陆用户返回完整信息 270 // 是否登陆用户, 登陆用户返回完整信息
272 LoginUser userInfo = SecurityUtils.getUserInfo(); 271 LoginUser userInfo = SecurityUtils.getUserInfo();
@@ -275,7 +274,7 @@ public class StreamPushController { @@ -275,7 +274,7 @@ public class StreamPushController {
275 } 274 }
276 WVPResult<StreamInfo> result = new WVPResult<>(); 275 WVPResult<StreamInfo> result = new WVPResult<>();
277 StreamPushItem push = streamPushService.getPush(app, stream); 276 StreamPushItem push = streamPushService.getPush(app, stream);
278 - if (!userSetting.getServerId().equals(push.getServerId()) ) { 277 + if (push != null && !push.isSelf()) {
279 result.setCode(-1); 278 result.setCode(-1);
280 result.setMsg("来自其他平台的推流信息"); 279 result.setMsg("来自其他平台的推流信息");
281 return result; 280 return result;
@@ -283,7 +282,7 @@ public class StreamPushController { @@ -283,7 +282,7 @@ public class StreamPushController {
283 StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, authority); 282 StreamInfo streamInfo = mediaService.getStreamInfoByAppAndStreamWithCheck(app, stream, mediaServerId, authority);
284 if (streamInfo != null){ 283 if (streamInfo != null){
285 result.setCode(0); 284 result.setCode(0);
286 - result.setMsg("scccess"); 285 + result.setMsg("success");
287 result.setData(streamInfo); 286 result.setData(streamInfo);
288 }else { 287 }else {
289 result.setCode(-1); 288 result.setCode(-1);
web_src/src/components/PushVideoList.vue
@@ -76,7 +76,7 @@ @@ -76,7 +76,7 @@
76 <el-table-column label="操作" min-width="360" fixed="right"> 76 <el-table-column label="操作" min-width="360" fixed="right">
77 <template slot-scope="scope"> 77 <template slot-scope="scope">
78 <el-button size="medium" icon="el-icon-video-play" 78 <el-button size="medium" icon="el-icon-video-play"
79 - v-if="(scope.row.status == false && scope.row.gbId == null) || scope.row.status" 79 + v-if="scope.row.pushIng === true"
80 @click="playPush(scope.row)" type="text">播放 80 @click="playPush(scope.row)" type="text">播放
81 </el-button> 81 </el-button>
82 <el-divider direction="vertical"></el-divider> 82 <el-divider direction="vertical"></el-divider>
web_src/src/components/dialog/catalogEdit.vue
@@ -70,12 +70,11 @@ export default { @@ -70,12 +70,11 @@ export default {
70 console.log(catalogType) 70 console.log(catalogType)
71 // 216 为虚拟组织 215 为业务分组;目录第一级必须为业务分组, 业务分组下为虚拟组织,虚拟组织下可以有其他虚拟组织 71 // 216 为虚拟组织 215 为业务分组;目录第一级必须为业务分组, 业务分组下为虚拟组织,虚拟组织下可以有其他虚拟组织
72 if (this.level === 1 && catalogType !== "215") { 72 if (this.level === 1 && catalogType !== "215") {
73 - return callback(new Error('业务分组模式下第一层目录的编号10到13位必须为215')); 73 + return callback(new Error('业务分组模式下第一层目录的编号11到13位必须为215'));
74 } 74 }
75 if (this.level > 1 && catalogType !== "216") { 75 if (this.level > 1 && catalogType !== "216") {
76 - return callback(new Error('业务分组模式下第一层以下目录的编号10到13位必须为216')); 76 + return callback(new Error('业务分组模式下第一层以下目录的编号11到13位必须为216'));
77 } 77 }
78 -  
79 } 78 }
80 callback(); 79 callback();
81 } 80 }