648540858
2024-03-24 3e02e496f6c3e4d2fae73b1d42a51d0ce35795dc
src/main/java/com/genersoft/iot/vmp/media/abl/ABLMediaServerStatusManger.java
@@ -1,6 +1,5 @@
package com.genersoft.iot.vmp.media.abl;
import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONArray;
import com.alibaba.fastjson2.JSONObject;
import com.genersoft.iot.vmp.conf.DynamicTask;
@@ -12,9 +11,6 @@
import com.genersoft.iot.vmp.media.event.MediaServerDeleteEvent;
import com.genersoft.iot.vmp.media.service.IMediaServerService;
import com.genersoft.iot.vmp.media.zlm.dto.MediaServer;
import com.genersoft.iot.vmp.media.zlm.dto.ZLMServerConfig;
import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerKeepaliveEvent;
import com.genersoft.iot.vmp.media.zlm.event.HookZlmServerStartEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,7 +24,6 @@
import java.io.File;
import java.util.HashMap;
import java.util.Map;
import java.util.Objects;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -136,17 +131,17 @@
                    continue;
                }
                logger.info("[ABL-尝试连接] ID:{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
                JSONObject responseJson = ablResTfulUtils.getMediaServerConfig(mediaServerItem);
                JSONObject responseJson = ablResTfulUtils.getServerConfig(mediaServerItem);
                AblServerConfig ablServerConfig = null;
                if (responseJson == null) {
                    logger.info("[ABL-尝试连接]失败, ID:{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
                    continue;
                }
                JSONArray data = responseJson.getJSONArray("data");
                JSONArray data = responseJson.getJSONArray("params");
                if (data == null || data.isEmpty()) {
                    logger.info("[ABL-尝试连接]失败, ID:{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
                }else {
                    ablServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), AblServerConfig.class);
                    ablServerConfig = AblServerConfig.getInstance(data);
                    initPort(mediaServerItem, ablServerConfig);
                    online(mediaServerItem, ablServerConfig);
                }
@@ -158,21 +153,21 @@
                    continue;
                }
                logger.info("[ABL-尝试连接] ID:{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
                JSONObject responseJson = ablResTfulUtils.getMediaServerConfig(mediaServerItem);
                ZLMServerConfig zlmServerConfig = null;
                JSONObject responseJson = ablResTfulUtils.getServerConfig(mediaServerItem);
                AblServerConfig ablServerConfig = null;
                if (responseJson == null) {
                    logger.info("[ABL-尝试连接]失败, ID:{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
                    offlineAblTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis());
                    continue;
                }
                JSONArray data = responseJson.getJSONArray("data");
                JSONArray data = responseJson.getJSONArray("params");
                if (data == null || data.isEmpty()) {
                    logger.info("[ABL-尝试连接]失败, ID:{}, 地址: {}:{}", mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
                    offlineAblTimeMap.put(mediaServerItem.getId(), System.currentTimeMillis());
                }else {
                    zlmServerConfig = JSON.parseObject(JSON.toJSONString(data.get(0)), ZLMServerConfig.class);
                    initPort(mediaServerItem, zlmServerConfig);
                    online(mediaServerItem, zlmServerConfig);
                    ablServerConfig = AblServerConfig.getInstance(data);
                    initPort(mediaServerItem, ablServerConfig);
                    online(mediaServerItem, ablServerConfig);
                }
            }
        }
@@ -189,16 +184,15 @@
            mediaServerService.update(mediaServerItem);
            if(mediaServerItem.isAutoConfig()) {
                if (config == null) {
                    JSONObject responseJSON = ablResTfulUtils.getMediaServerConfig(mediaServerItem);
                    JSONArray data = responseJSON.getJSONArray("data");
                    JSONObject responseJSON = ablResTfulUtils.getServerConfig(mediaServerItem);
                    JSONArray data = responseJSON.getJSONArray("params");
                    if (data != null && !data.isEmpty()) {
                        config = JSON.parseObject(JSON.toJSONString(data.get(0)), AblServerConfig.class);
                        config = AblServerConfig.getInstance(data);
                    }
                }
                if (config != null) {
                    initPort(mediaServerItem, config);
                    setZLMConfig(mediaServerItem, "0".equals(config.getHookEnable())
                            || !Objects.equals(mediaServerItem.getHookAliveInterval(), config.getHookAliveInterval()));
                    setAblConfig(mediaServerItem, false, config);
                }
            }
            mediaServerService.update(mediaServerItem);
@@ -216,32 +210,36 @@
    }
    private void initPort(MediaServer mediaServerItem, AblServerConfig ablServerConfig) {
        // 端口只会从配置中读取一次,一旦自己配置或者读取过了将不在配置
        if (mediaServerItem.getHttpSSlPort() == 0) {
            mediaServerItem.setHttpSSlPort(ablServerConfig.getHttpSSLport());
        }
//        if (mediaServerItem.getHttpSSlPort() == 0) {
//            mediaServerItem.setHttpSSlPort(ablServerConfig.getHttpSSLport());
//        }
        if (mediaServerItem.getRtmpPort() == 0) {
            mediaServerItem.setRtmpPort(ablServerConfig.getRtmpPort());
        }
        if (mediaServerItem.getRtmpSSlPort() == 0) {
            mediaServerItem.setRtmpSSlPort(ablServerConfig.getRtmpSslPort());
        }
//        if (mediaServerItem.getRtmpSSlPort() == 0) {
//            mediaServerItem.setRtmpSSlPort(ablServerConfig.getRtmpSslPort());
//        }
        if (mediaServerItem.getRtspPort() == 0) {
            mediaServerItem.setRtspPort(ablServerConfig.getRtspPort());
        }
        if (mediaServerItem.getRtspSSLPort() == 0) {
            mediaServerItem.setRtspSSLPort(ablServerConfig.getRtspSSlport());
        }
        if (mediaServerItem.getRtpProxyPort() == 0) {
            mediaServerItem.setRtpProxyPort(ablServerConfig.getRtpProxyPort());
        }
//        if (mediaServerItem.getRtspSSLPort() == 0) {
//            mediaServerItem.setRtspSSLPort(ablServerConfig.getRtspSSlport());
//        }
//        if (mediaServerItem.getRtpProxyPort() == 0) {
//            mediaServerItem.setRtpProxyPort(ablServerConfig.getRtpProxyPort());
//        }
        mediaServerItem.setHookAliveInterval(10F);
    }
    public void setZLMConfig(MediaServer mediaServerItem, boolean restart) {
    public void setAblConfig(MediaServer mediaServerItem, boolean restart, AblServerConfig config) {
        if (config.getHookEnable() == 0) {
            logger.info("[媒体服务节点-ABL]  开启HOOK功能 :{}", mediaServerItem.getId());
            JSONObject responseJSON = ablResTfulUtils.setConfigParamValue(mediaServerItem, "hook_enable", "1");
        }
        logger.info("[媒体服务节点] 正在设置 :{} -> {}:{}",
                mediaServerItem.getId(), mediaServerItem.getIp(), mediaServerItem.getHttpPort());
        String protocol = sslEnabled ? "https" : "http";
        String hookPrefix = String.format("%s://%s:%s/index/hook", protocol, mediaServerItem.getHookIp(), serverPort);
        String hookPrefix = String.format("%s://%s:%s/index/hook/abl", protocol, mediaServerItem.getHookIp(), serverPort);
        Map<String, Object> param = new HashMap<>();
        param.put("api.secret",mediaServerItem.getSecret()); // -profile:v Baseline
@@ -285,7 +283,7 @@
            param.put("record.appName", recordPathFile.getName());
        }
        JSONObject responseJSON = ablResTfulUtils.setServerConfig(mediaServerItem, param);
        JSONObject responseJSON = ablResTfulUtils.setConfigParamValue(mediaServerItem, param);
        if (responseJSON != null && responseJSON.getInteger("code") == 0) {
            if (restart) {