648540858
2021-08-31 3578c1c0403a0455fca0fd46101b2cedd42a5a5a
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMHttpHookListener.java
@@ -3,15 +3,14 @@
import java.util.List;
import java.util.UUID;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.genersoft.iot.vmp.common.StreamInfo;
import com.genersoft.iot.vmp.conf.MediaConfig;
import com.genersoft.iot.vmp.conf.UserSetup;
import com.genersoft.iot.vmp.gb28181.bean.Device;
import com.genersoft.iot.vmp.media.zlm.dto.IMediaServerItem;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem;
import com.genersoft.iot.vmp.service.IMediaServerService;
import com.genersoft.iot.vmp.service.bean.SSRCInfo;
import com.genersoft.iot.vmp.storager.IRedisCatchStorage;
import com.genersoft.iot.vmp.storager.IVideoManagerStorager;
import com.genersoft.iot.vmp.service.IPlayService;
@@ -41,7 +40,6 @@
public class ZLMHttpHookListener {
   private final static Logger logger = LoggerFactory.getLogger(ZLMHttpHookListener.class);
   @Autowired
   private SIPCommander cmder;
@@ -125,7 +123,7 @@
      String mediaServerId = json.getString("mediaServerId");
      ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_play, json);
      if (subscribe != null ) {
         IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         if (mediaInfo != null) {
            subscribe.response(mediaInfo, json);
         }
@@ -150,7 +148,7 @@
      String mediaServerId = json.getString("mediaServerId");
      ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, json);
      if (subscribe != null) {
         IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         if (mediaInfo != null) {
            subscribe.response(mediaInfo, json);
         }
@@ -237,7 +235,7 @@
      String mediaServerId = json.getString("mediaServerId");
      ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_shell_login, json);
      if (subscribe != null ) {
         IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         if (mediaInfo != null) {
            subscribe.response(mediaInfo, json);
         }
@@ -264,7 +262,7 @@
      String mediaServerId = json.getString("mediaServerId");
      ZLMHttpHookSubscribe.Event subscribe = this.subscribe.getSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, json);
      if (subscribe != null ) {
         IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
         if (mediaInfo != null) {
            subscribe.response(mediaInfo, json);
         }
@@ -297,7 +295,7 @@
            }
         }else {
            if (!"rtp".equals(app) ){
               IMediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
               MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
               if (regist) {
                  zlmMediaListManager.addMedia(mediaServerItem, app, streamId);
               }else {
@@ -348,6 +346,10 @@
               redisCatchStorage.stopPlayback(streamInfoForPlayBackCatch);
            }
         }
         MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId);
         if (mediaServerItem != null && "-1".equals(mediaServerItem.getStreamNoneReaderDelayMS())) {
            ret.put("close", false);
         }
         return new ResponseEntity<String>(ret.toString(),HttpStatus.OK);
      }else {
         JSONObject ret = new JSONObject();
@@ -369,19 +371,25 @@
         logger.debug("ZLM HOOK on_stream_not_found API调用,参数:" + json.toString());
      }
      String mediaServerId = json.getString("mediaServerId");
      IMediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
      MediaServerItem mediaInfo = mediaServerService.getOne(mediaServerId);
      if (userSetup.isAutoApplyPlay() && mediaInfo != null) {
         String app = json.getString("app");
         String streamId = json.getString("stream");
         if ("rtp".equals(app) && streamId.contains("gb_play") ) {
         if ("rtp".equals(app)) {
            String[] s = streamId.split("_");
            if (s.length == 4) {
               String deviceId = s[2];
               String channelId = s[3];
            if (s.length == 2) {
               String deviceId = s[0];
               String channelId = s[1];
               Device device = storager.queryVideoDevice(deviceId);
               if (device != null) {
                  UUID uuid = UUID.randomUUID();
                  cmder.playStreamCmd(mediaInfo, device, channelId, (IMediaServerItem mediaServerItemInuse, JSONObject response) -> {
                  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);