mrjackwang
2022-03-07 21506440d22a2f77d4bbeb4bb646a27b03bb9022
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -83,6 +83,9 @@
   @Autowired
   private MediaConfig mediaConfig;
   @Autowired
   private ZLMRESTfulUtils zlmresTfulUtils;
   /**
    * 服务器定时上报时间,上报间隔可配置,默认10s上报一次
    *
@@ -181,7 +184,7 @@
   @PostMapping(value = "/on_publish", produces = "application/json;charset=UTF-8")
   public ResponseEntity<String> onPublish(@RequestBody JSONObject json) {
      logger.debug("[ ZLM HOOK ]on_publish API调用,参数:" + json.toString());
      logger.info("[ ZLM HOOK ]on_publish API调用,参数:" + json.toString());
      JSONObject ret = new JSONObject();
      ret.put("code", 0);
      ret.put("msg", "success");
@@ -360,6 +363,7 @@
                     StreamPushItem streamPushItem = null;
                     StreamInfo streamInfoByAppAndStream = mediaService.getStreamInfoByAppAndStream(mediaServerItem, app, streamId, tracks);
                     item.setStreamInfo(streamInfoByAppAndStream);
                     redisCatchStorage.addStream(mediaServerItem, type, app, streamId, item);
                     if (item.getOriginType() == OriginType.RTSP_PUSH.ordinal()
                           || item.getOriginType() == OriginType.RTMP_PUSH.ordinal()
@@ -438,14 +442,16 @@
            if (redisCatchStorage.isChannelSendingRTP(streamInfoForPlayCatch.getChannelId())) {
               ret.put("close", false);
            } else {
               cmder.streamByeCmd(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId());
               cmder.streamByeCmd(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId(),
                     streamInfoForPlayCatch.getStream());
               redisCatchStorage.stopPlay(streamInfoForPlayCatch);
               storager.stopPlay(streamInfoForPlayCatch.getDeviceID(), streamInfoForPlayCatch.getChannelId());
            }
         }else{
            StreamInfo streamInfoForPlayBackCatch = redisCatchStorage.queryPlaybackByStreamId(streamId);
            if (streamInfoForPlayBackCatch != null) {
               cmder.streamByeCmd(streamInfoForPlayBackCatch.getDeviceID(), streamInfoForPlayBackCatch.getChannelId());
               cmder.streamByeCmd(streamInfoForPlayBackCatch.getDeviceID(),
                     streamInfoForPlayBackCatch.getChannelId(), streamInfoForPlayBackCatch.getStream());
               redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch);
            }else {
               StreamInfo streamInfoForDownload = redisCatchStorage.queryDownloadByStreamId(streamId);
@@ -467,6 +473,18 @@
            streamProxyService.del(app, streamId);
            String url = streamProxyItem.getUrl() != null?streamProxyItem.getUrl():streamProxyItem.getSrc_url();
            logger.info("[{}/{}]<-[{}] 拉流代理无人观看已经移除",  app, streamId, url);
         }else if (streamProxyItem != null && streamProxyItem.isEnable()) {
            MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
            if(null!=mediaServerItem){
               JSONObject jsonObject = zlmresTfulUtils.closeStreams(mediaServerItem,streamProxyItem.getApp(), streamProxyItem.getStream());
               if (jsonObject.getInteger("code") == 0) {
                  streamProxyItem.setEnable(false);
                  storager.updateStreamProxy(streamProxyItem);
               }
            }else {
               ret.put("close", false);
            }
         }else {
            ret.put("close", false);
         }
@@ -486,7 +504,7 @@
      }
      String mediaServerId = json.getString("mediaServerId");
      MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
      if (userSetup.isAutoApplyPlay() && mediaInfo != null) {
      if (userSetup.isAutoApplyPlay() && mediaInfo != null && mediaInfo.isRtpEnable()) {
         String app = json.getString("app");
         String streamId = json.getString("stream");
         if ("rtp".equals(app)) {
@@ -496,28 +514,16 @@
               String channelId = s[1];
               Device device = redisCatchStorage.getDevice(deviceId);
               if (device != null) {
                  UUID uuid = UUID.randomUUID();
                  SSRCInfo ssrcInfo;
                  String streamId2 = null;
                  if (mediaInfo.isRtpEnable()) {
                     streamId2 = String.format("%s_%s", device.getDeviceId(), channelId);
                  }
                  ssrcInfo = mediaServerService.openRTPServer(mediaInfo, streamId2);
                  cmder.playStreamCmd(mediaInfo, ssrcInfo, device, channelId, (MediaServerItem mediaServerItemInuse, JSONObject response) -> {
                     logger.info("收到订阅消息: " + response.toJSONString());
                     playService.onPublishHandlerForPlay(mediaServerItemInuse, response, deviceId, channelId, uuid.toString());
                  }, null);
                  playService.play(mediaInfo,deviceId, channelId, null, null, null);
               }
            }
         }
      }
      JSONObject ret = new JSONObject();
      ret.put("code", 0);
      ret.put("msg", "success");
      return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
      return new ResponseEntity<>(ret.toString(),HttpStatus.OK);
   }
   
   /**