648540858
2024-04-09 a1861038e5cb80e609f22ec99b0da8c0a3371342
src/main/java/com/genersoft/iot/vmp/media/event/hook/HookSubscribe.java
@@ -1,9 +1,6 @@
package com.genersoft.iot.vmp.media.event.hook;
import com.genersoft.iot.vmp.media.event.media.MediaArrivalEvent;
import com.genersoft.iot.vmp.media.event.media.MediaDepartureEvent;
import com.genersoft.iot.vmp.media.event.media.MediaEvent;
import com.genersoft.iot.vmp.media.event.media.MediaPublishEvent;
import com.genersoft.iot.vmp.media.event.media.*;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import org.springframework.scheduling.annotation.Scheduled;
@@ -22,7 +19,7 @@
    /**
     * 订阅数据过期时间
     */
    private final long subscribeExpire = 5 * 1000;
    private final long subscribeExpire = 5 * 60 * 1000;
    @FunctionalInterface
    public interface Event{
@@ -35,11 +32,7 @@
    @Async("taskExecutor")
    @EventListener
    public void onApplicationEvent(MediaArrivalEvent event) {
        if ("rtsp".equals(event.getSchema())) {
            System.out.println("流到来的处理: " + allSubscribes.size());
            for (String s : allSubscribes.keySet()) {
                System.out.println("key: " + s);
            }
        if (event.getSchema() == null || "rtsp".equals(event.getSchema())) {
            sendNotify(HookType.on_media_arrival, event);
        }
@@ -51,7 +44,7 @@
    @Async("taskExecutor")
    @EventListener
    public void onApplicationEvent(MediaDepartureEvent event) {
        if ("rtsp".equals(event.getSchema())) {
        if (event.getSchema() == null || "rtsp".equals(event.getSchema())) {
            sendNotify(HookType.on_media_departure, event);
        }
@@ -64,13 +57,20 @@
    public void onApplicationEvent(MediaPublishEvent event) {
        sendNotify(HookType.on_publish, event);
    }
    /**
     * 推流鉴权事件
     */
    @Async("taskExecutor")
    @EventListener
    public void onApplicationEvent(MediaRecordMp4Event event) {
        sendNotify(HookType.on_record_mp4, event);
    }
    private final Map<String, Event> allSubscribes = new ConcurrentHashMap<>();
    private final Map<String, Hook> allHook = new ConcurrentHashMap<>();
    private void sendNotify(HookType hookType, MediaEvent event) {
        Hook paramHook = Hook.getInstance(hookType, event.getApp(), event.getStream(), event.getMediaServer().getId());
        System.out.println("sendNotify: " + paramHook.toString());
        Event hookSubscribeEvent = allSubscribes.get(paramHook.toString());
        if (hookSubscribeEvent != null) {
            HookData data = HookData.getInstance(event);
@@ -87,7 +87,6 @@
    }
    public void removeSubscribe(Hook hook) {
        System.out.println("removeSubscribe: " + hook.toString());
        allSubscribes.remove(hook.toString());
        allHook.remove(hook.toString());
    }
@@ -100,7 +99,6 @@
        long expireTime = System.currentTimeMillis() - subscribeExpire;
        for (Hook hook : allHook.values()) {
            if (hook.getCreateTime() < expireTime) {
                System.out.println("execute removeSubscribe: " + hook.toString());
                allSubscribes.remove(hook.toString());
                allHook.remove(hook.toString());
            }