| | |
| | | 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 com.genersoft.iot.vmp.media.zlm.dto.MediaServerItem; |
| | | import org.springframework.stereotype.Component; |
| | | 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.*; |
| | | import java.util.concurrent.ConcurrentHashMap; |
| | | |
| | | /** |
| | | * @Description:针对 ZLMediaServer的hook事件订阅 |
| | | * @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_stream_changed, |
| | | on_stream_none_reader, |
| | | on_stream_not_found, |
| | | on_server_started |
| | | on_server_started, |
| | | on_server_keepalive |
| | | } |
| | | |
| | | public interface Event{ |
| | | void response(JSONObject response); |
| | | void response(MediaServerItem mediaServerItem, JSONObject response); |
| | | } |
| | | |
| | | private Map<HookType, Map<JSONObject, ZLMHttpHookSubscribe.Event>> allSubscribes = new HashMap<>(); |
| | | private Map<HookType, Map<JSONObject, ZLMHttpHookSubscribe.Event>> allSubscribes = new ConcurrentHashMap<>(); |
| | | |
| | | public void addSubscribe(HookType type, JSONObject hookResponse, ZLMHttpHookSubscribe.Event event) { |
| | | Map<JSONObject, Event> eventMap = allSubscribes.get(type); |
| | |
| | | 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 { |
| | | if (key.getString(s) == null) { |
| | | continue; |
| | | } |
| | | result = result && key.getString(s).equals(hookResponse.getString(s)); |
| | | } |
| | | |
| | | } |
| | | if (result) { |
| | | if (null != result && result) { |
| | | event = eventMap.get(key); |
| | | } |
| | | } |
| | | return event; |
| | | } |
| | | |
| | | public void removeSubscribe(HookType type, JSONObject hookResponse) { |
| | | Map<JSONObject, Event> eventMap = allSubscribes.get(type); |
| | | if (eventMap == null) { |
| | | return; |
| | | } |
| | | Iterator<Map.Entry<JSONObject, Event>> iterator = eventMap.entrySet().iterator(); |
| | | while (iterator.hasNext()){ |
| | | Map.Entry<JSONObject, Event> next = iterator.next(); |
| | | JSONObject key = next.getKey(); |
| | | Boolean result = null; |
| | | for (String s : key.keySet()) { |
| | | if (result == null) { |
| | | result = key.getString(s).equals(hookResponse.getString(s)); |
| | | }else { |
| | | if (key.getString(s) == null) continue; |
| | | result = result && key.getString(s).equals(hookResponse.getString(s)); |
| | | } |
| | | } |
| | | if (null != result && result){ |
| | | iterator.remove(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取某个类型的所有的订阅 |
| | | * @param type |
| | | * @return |
| | | */ |
| | | public List<ZLMHttpHookSubscribe.Event> getSubscribes(HookType type) { |
| | | // ZLMHttpHookSubscribe.Event event= null; |
| | | Map<JSONObject, Event> eventMap = allSubscribes.get(type); |
| | | if (eventMap == null) { |
| | | return null; |
| | | } |
| | | List<ZLMHttpHookSubscribe.Event> result = new ArrayList<>(); |
| | | for (JSONObject key : eventMap.keySet()) { |
| | | result.add(eventMap.get(key)); |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | } |