648540858
2021-08-08 f4aa3e0ee8c988c0d7535ad1c76e68e23e400194
src/main/java/com/genersoft/iot/vmp/service/impl/MediaServerServiceImpl.java
@@ -26,7 +26,6 @@
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Service;
import java.sql.Array;
import java.text.SimpleDateFormat;
import java.util.*;
@@ -123,7 +122,7 @@
        String mediaServerId = streamSession.getMediaServerId(device.getDeviceId(), channelId);
        MediaServerItem mediaServerItem = this.getOne(mediaServerId);
        if (mediaServerItem != null) {
            String streamId = String.format("gb_play_%s_%s", device.getDeviceId(), channelId);
            String streamId = String.format("%s/%s", device.getDeviceId(), channelId);
            zlmrtpServerFactory.closeRTPServer(mediaServerItem, streamId);
            releaseSsrc(mediaServerItem, streamSession.getSSRC(device.getDeviceId(), channelId));
        }
@@ -180,6 +179,12 @@
            result.add((MediaServerItem)redisUtil.get(key));
        }
        return result;
    }
    @Override
    public List<MediaServerItem> getAllFromDatabase() {
        return mediaServerMapper.queryAll();
    }
    @Override
@@ -252,18 +257,16 @@
            if (mediaConfig.getRtspSSLPort() == 0) serverItemFromConfig.setRtspSSLPort(zlmServerConfig.getRtspSSlport());
            if (mediaConfig.getRtpProxyPort() == 0) serverItemFromConfig.setRtpProxyPort(zlmServerConfig.getRtpProxyPort());
            if (serverItem != null){
                // 可能是同一个zlm但id发生了变化
                if (!serverItem.getId().equals(zlmServerConfig.getGeneralMediaServerId())) {
                    mediaServerMapper.delOne(serverItem.getId());
                    redisUtil.del(VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId());
                    String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId();
                    serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getSipDomain()));
                    redisUtil.set(key, serverItemFromConfig);
                    mediaServerMapper.add(serverItemFromConfig);
                mediaServerMapper.delDefault();
                mediaServerMapper.add(serverItemFromConfig);
                String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId();
                MediaServerItem serverItemInRedis =  (MediaServerItem)redisUtil.get(key);
                if (serverItemInRedis != null) {
                    serverItemFromConfig.setSsrcConfig(serverItemInRedis.getSsrcConfig());
                }else {
                    mediaServerMapper.update(serverItemFromConfig);
                    serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getSipDomain()));
                }
                redisUtil.set(key, serverItemFromConfig);
            }else {
                String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId();
                serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getSipDomain()));
@@ -273,7 +276,7 @@
            resetOnlineServerItem(serverItemFromConfig);
            setZLMConfig(serverItemFromConfig);
        }else {
            String now = this.format.format(new Date(System.currentTimeMillis()));
            String now = this.format.format(System.currentTimeMillis());
            if (serverItem == null){
                    // 一个新的zlm接入wvp
                    serverItem = new MediaServerItem(zlmServerConfig, sipConfig.getSipIp());
@@ -339,12 +342,14 @@
        if (redisUtil.zSize(key)  == null || redisUtil.zSize(key) == 0) {
            logger.info("获取负载最低的节点时无在线节点");
            return null;
        }
        // 获取分数最低的,及并发最低的
        Set<Object> objects = redisUtil.ZRange(key, 0, -1);
        ArrayList<Object> MediaServerObjectS = new ArrayList<>(objects);
        String mediaServerId = (String)MediaServerObjectS.get(0);
        ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects);
        String mediaServerId = (String)mediaServerObjectS.get(0);
        return getOne(mediaServerId);
    }
@@ -380,7 +385,7 @@
        param.put("hook.on_stream_none_reader",String.format("%s/on_stream_none_reader", hookPrex));
        param.put("hook.on_stream_not_found",String.format("%s/on_stream_not_found", hookPrex));
        param.put("hook.timeoutSec","20");
        param.put("general.streamNoneReaderDelayMS",mediaServerItem.getStreamNoneReaderDelayMS());
        param.put("general.streamNoneReaderDelayMS","-1".equals(mediaServerItem.getStreamNoneReaderDelayMS())?"3600000":mediaServerItem.getStreamNoneReaderDelayMS() );
        JSONObject responseJSON = zlmresTfulUtils.setServerConfig(mediaServerItem, param);