|  |  |  | 
|---|
|  |  |  | import org.springframework.core.annotation.Order; | 
|---|
|  |  |  | import org.springframework.stereotype.Service; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | import java.sql.Array; | 
|---|
|  |  |  | import java.text.SimpleDateFormat; | 
|---|
|  |  |  | import java.util.*; | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | for (MediaServerItem mediaServerItem : mediaServerItemList) { | 
|---|
|  |  |  | // 更新 | 
|---|
|  |  |  | if (mediaServerItem.getSsrcConfig() == null) { | 
|---|
|  |  |  | SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getSipDomain()); | 
|---|
|  |  |  | SsrcConfig ssrcConfig = new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain()); | 
|---|
|  |  |  | mediaServerItem.setSsrcConfig(ssrcConfig); | 
|---|
|  |  |  | redisUtil.set(VideoManagerConstants.MEDIA_SERVER_PREFIX + mediaServerItem.getId(), mediaServerItem); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | String mediaServerId = streamSession.getMediaServerId(device.getDeviceId(), channelId); | 
|---|
|  |  |  | MediaServerItem mediaServerItem = this.getOne(mediaServerId); | 
|---|
|  |  |  | if (mediaServerItem != null) { | 
|---|
|  |  |  | String streamId = String.format("%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)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | */ | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public void clearRTPServer(MediaServerItem mediaServerItem) { | 
|---|
|  |  |  | mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getSipDomain())); | 
|---|
|  |  |  | mediaServerItem.setSsrcConfig(new SsrcConfig(mediaServerItem.getId(), null, sipConfig.getDomain())); | 
|---|
|  |  |  | redisUtil.zAdd(VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX, mediaServerItem.getId(), 0); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 
|---|
|  |  |  | new SsrcConfig( | 
|---|
|  |  |  | mediaServerItemInDataBase.getId(), | 
|---|
|  |  |  | null, | 
|---|
|  |  |  | sipConfig.getSipDomain() | 
|---|
|  |  |  | sipConfig.getDomain() | 
|---|
|  |  |  | ) | 
|---|
|  |  |  | ); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 
|---|
|  |  |  | result.add((MediaServerItem)redisUtil.get(key)); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | return result; | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | public List<MediaServerItem> getAllFromDatabase() { | 
|---|
|  |  |  | return mediaServerMapper.queryAll(); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | @Override | 
|---|
|  |  |  | 
|---|
|  |  |  | 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.getDomain())); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | redisUtil.set(key, serverItemFromConfig); | 
|---|
|  |  |  | }else { | 
|---|
|  |  |  | String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItemFromConfig.getId(); | 
|---|
|  |  |  | serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getSipDomain())); | 
|---|
|  |  |  | serverItemFromConfig.setSsrcConfig(new SsrcConfig(serverItemFromConfig.getId(), null, sipConfig.getDomain())); | 
|---|
|  |  |  | redisUtil.set(key, serverItemFromConfig); | 
|---|
|  |  |  | mediaServerMapper.add(serverItemFromConfig); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | 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()); | 
|---|
|  |  |  | serverItem = new MediaServerItem(zlmServerConfig, sipConfig.getIp()); | 
|---|
|  |  |  | serverItem.setCreateTime(now); | 
|---|
|  |  |  | serverItem.setUpdateTime(now); | 
|---|
|  |  |  | String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + serverItem.getId(); | 
|---|
|  |  |  | serverItem.setSsrcConfig(new SsrcConfig(serverItem.getId(), null, sipConfig.getSipDomain())); | 
|---|
|  |  |  | serverItem.setSsrcConfig(new SsrcConfig(serverItem.getId(), null, sipConfig.getDomain())); | 
|---|
|  |  |  | redisUtil.set(key, serverItem); | 
|---|
|  |  |  | // 存入数据库 | 
|---|
|  |  |  | mediaServerMapper.add(serverItem); | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | 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); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|