|  | @@ -8,6 +8,7 @@ import java.util.List;
 | 
											
												
													
														|  |  import java.util.Map;
 |  |  import java.util.Map;
 | 
											
												
													
														|  |  import java.util.Set;
 |  |  import java.util.Set;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +import com.genersoft.iot.vmp.media.zlm.ZLMRunner;
 | 
											
												
													
														|  |  import org.slf4j.Logger;
 |  |  import org.slf4j.Logger;
 | 
											
												
													
														|  |  import org.slf4j.LoggerFactory;
 |  |  import org.slf4j.LoggerFactory;
 | 
											
												
													
														|  |  import org.springframework.beans.factory.annotation.Autowired;
 |  |  import org.springframework.beans.factory.annotation.Autowired;
 | 
											
										
											
												
													
														|  | @@ -54,6 +55,9 @@ public class MediaServerServiceImpl implements IMediaServerService {
 | 
											
												
													
														|  |      @Autowired
 |  |      @Autowired
 | 
											
												
													
														|  |      private SipConfig sipConfig;
 |  |      private SipConfig sipConfig;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    @Autowired
 | 
											
												
													
														|  | 
 |  | +    private ZLMRunner zlmRunner;
 | 
											
												
													
														|  | 
 |  | +
 | 
											
												
													
														|  |      @Value("${server.ssl.enabled:false}")
 |  |      @Value("${server.ssl.enabled:false}")
 | 
											
												
													
														|  |      private boolean sslEnabled;
 |  |      private boolean sslEnabled;
 | 
											
												
													
														|  |  
 |  |  
 | 
											
										
											
												
													
														|  | @@ -279,7 +283,9 @@ public class MediaServerServiceImpl implements IMediaServerService {
 | 
											
												
													
														|  |          String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
 |  |          String key = VideoManagerConstants.MEDIA_SERVER_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
 | 
											
												
													
														|  |          MediaServerItem serverItem=(MediaServerItem)redisUtil.get(key);
 |  |          MediaServerItem serverItem=(MediaServerItem)redisUtil.get(key);
 | 
											
												
													
														|  |          if(null==serverItem){
 |  |          if(null==serverItem){
 | 
											
												
													
														|  | -            serverItem=mediaServerMapper.queryOne(mediaServerId);
 |  | 
 | 
											
												
													
														|  | 
 |  | +            //zlm服务不在线,启动重连
 | 
											
												
													
														|  | 
 |  | +            reloadZlm();
 | 
											
												
													
														|  | 
 |  | +            serverItem=(MediaServerItem)redisUtil.get(key);
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          return serverItem;
 |  |          return serverItem;
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
										
											
												
													
														|  | @@ -474,8 +480,13 @@ public class MediaServerServiceImpl implements IMediaServerService {
 | 
											
												
													
														|  |          String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
 |  |          String key = VideoManagerConstants.MEDIA_SERVERS_ONLINE_PREFIX + userSetting.getServerId();
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          if (redisUtil.zSize(key)  == null || redisUtil.zSize(key) == 0) {
 |  |          if (redisUtil.zSize(key)  == null || redisUtil.zSize(key) == 0) {
 | 
											
												
													
														|  | -            logger.info("获取负载最低的节点时无在线节点");
 |  | 
 | 
											
												
													
														|  | -            return null;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            logger.info("获取负载最低的节点时无在线节点,启动重连机制");
 | 
											
												
													
														|  | 
 |  | +            //启动重连
 | 
											
												
													
														|  | 
 |  | +            reloadZlm();
 | 
											
												
													
														|  | 
 |  | +            if (redisUtil.zSize(key)  == null || redisUtil.zSize(key) == 0) {
 | 
											
												
													
														|  | 
 |  | +                logger.info("获取负载最低的节点时无在线节点");
 | 
											
												
													
														|  | 
 |  | +                return null;
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  |          // 获取分数最低的,及并发最低的
 |  |          // 获取分数最低的,及并发最低的
 | 
											
										
											
												
													
														|  | @@ -637,8 +648,14 @@ public class MediaServerServiceImpl implements IMediaServerService {
 | 
											
												
													
														|  |          MediaServerItem mediaServerItem = getOne(mediaServerId);
 |  |          MediaServerItem mediaServerItem = getOne(mediaServerId);
 | 
											
												
													
														|  |          if (mediaServerItem == null) {
 |  |          if (mediaServerItem == null) {
 | 
											
												
													
														|  |              // zlm连接重试
 |  |              // zlm连接重试
 | 
											
												
													
														|  | -            logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息");
 |  | 
 | 
											
												
													
														|  | -            return;
 |  | 
 | 
											
												
													
														|  | 
 |  | +            logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息,尝试重连zlm");
 | 
											
												
													
														|  | 
 |  | +            reloadZlm();
 | 
											
												
													
														|  | 
 |  | +            mediaServerItem = getOne(mediaServerId);
 | 
											
												
													
														|  | 
 |  | +            if (mediaServerItem == null) {
 | 
											
												
													
														|  | 
 |  | +                // zlm连接重试
 | 
											
												
													
														|  | 
 |  | +                logger.warn("[更新ZLM 保活信息]失败,未找到流媒体信息");
 | 
											
												
													
														|  | 
 |  | +                return;
 | 
											
												
													
														|  | 
 |  | +            }
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |          String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
 |  |          String key = VideoManagerConstants.MEDIA_SERVER_KEEPALIVE_PREFIX + userSetting.getServerId() + "_" + mediaServerId;
 | 
											
												
													
														|  |          int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2;
 |  |          int hookAliveInterval = mediaServerItem.getHookAliveInterval() + 2;
 | 
											
										
											
												
													
														|  | @@ -661,4 +678,12 @@ public class MediaServerServiceImpl implements IMediaServerService {
 | 
											
												
													
														|  |          }
 |  |          }
 | 
											
												
													
														|  |      }
 |  |      }
 | 
											
												
													
														|  |  
 |  |  
 | 
											
												
													
														|  | 
 |  | +    public void reloadZlm(){
 | 
											
												
													
														|  | 
 |  | +        try {
 | 
											
												
													
														|  | 
 |  | +            zlmRunner.run();
 | 
											
												
													
														|  | 
 |  | +            Thread.sleep(500);//延迟0.5秒缓冲时间
 | 
											
												
													
														|  | 
 |  | +        } catch (Exception e) {
 | 
											
												
													
														|  | 
 |  | +            logger.warn("尝试重连zlm失败!",e);
 | 
											
												
													
														|  | 
 |  | +        }
 | 
											
												
													
														|  | 
 |  | +    }
 | 
											
												
													
														|  |  }
 |  |  }
 |