package com.genersoft.iot.vmp.media.zlm; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.genersoft.iot.vmp.common.StreamInfo; import com.genersoft.iot.vmp.conf.MediaServerConfig; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; import com.genersoft.iot.vmp.storager.IVideoManagerStorager; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Component; import org.springframework.util.ConcurrentReferenceHashMap; import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import java.math.BigInteger; import java.text.DecimalFormat; import java.util.HashMap; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @Description:针对 ZLMediaServer的hook事件订阅 * @author: pan * @date: 2020年12月2日 21:17:32 */ @Component public class ZLMHttpHookSubscribe { private final static Logger logger = LoggerFactory.getLogger(ZLMHttpHookSubscribe.class); public enum HookType{ on_flow_report, on_http_access, on_play, on_publish, on_record_mp4, on_rtsp_auth, on_rtsp_realm, on_shell_login, on_stream_changed, on_stream_none_reader, on_stream_not_found, on_server_started } public interface Event{ void response(JSONObject response); } private Map> allSubscribes = new ConcurrentHashMap<>(); public void addSubscribe(HookType type, JSONObject hookResponse, ZLMHttpHookSubscribe.Event event) { Map eventMap = allSubscribes.get(type); if (eventMap == null) { eventMap = new HashMap(); allSubscribes.put(type,eventMap); } eventMap.put(hookResponse, event); } public ZLMHttpHookSubscribe.Event getSubscribe(HookType type, JSONObject hookResponse) { ZLMHttpHookSubscribe.Event event= null; Map eventMap = allSubscribes.get(type); if (eventMap == null) { return null; } for (JSONObject key : eventMap.keySet()) { Boolean result = null; for (String s : key.keySet()) { String string = hookResponse.getString(s); String string1 = key.getString(s); if (result == null) { result = key.getString(s).equals(hookResponse.getString(s)); }else { result = result && key.getString(s).equals(hookResponse.getString(s)); } } if (result) { event = eventMap.get(key); } } return event; } }