mrjackwang
2022-03-04 bb50a243145dba2b3bf5f3bf225c63a092697a16
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);
         }