| | |
| | | import com.genersoft.iot.vmp.conf.MediaConfig; |
| | | import com.genersoft.iot.vmp.conf.UserSetting; |
| | | import com.genersoft.iot.vmp.conf.exception.ControllerException; |
| | | import com.genersoft.iot.vmp.gb28181.bean.InviteStreamType; |
| | | import com.genersoft.iot.vmp.gb28181.bean.ParentPlatform; |
| | | import com.genersoft.iot.vmp.gb28181.bean.SendRtpItem; |
| | | import com.genersoft.iot.vmp.gb28181.session.SSRCFactory; |
| | | import com.genersoft.iot.vmp.media.bean.MediaInfo; |
| | |
| | | import com.genersoft.iot.vmp.media.zlm.dto.hook.OriginType; |
| | | import com.genersoft.iot.vmp.service.IInviteStreamService; |
| | | import com.genersoft.iot.vmp.service.bean.MediaServerLoad; |
| | | import com.genersoft.iot.vmp.service.bean.MessageForPushChannel; |
| | | import com.genersoft.iot.vmp.service.bean.SSRCInfo; |
| | | import com.genersoft.iot.vmp.storager.IRedisCatchStorage; |
| | | import com.genersoft.iot.vmp.storager.dao.MediaServerMapper; |
| | |
| | | logger.info("获取负载最低的节点时无在线节点"); |
| | | return null; |
| | | } |
| | | |
| | | logger.error("ddddddd"); |
| | | // 获取分数最低的,及并发最低的 |
| | | Set<Object> objects = redisTemplate.opsForZSet().range(key, 0, -1); |
| | | ArrayList<Object> mediaServerObjectS = new ArrayList<>(objects); |
| | |
| | | if (hasAssist == null) { |
| | | String mediaServerId = (String)mediaServerObjectS.get(0); |
| | | mediaServer = getOne(mediaServerId); |
| | | logger.error("111"); |
| | | }else if (hasAssist) { |
| | | logger.error("222"); |
| | | for (Object mediaServerObject : mediaServerObjectS) { |
| | | String mediaServerId = (String)mediaServerObject; |
| | | MediaServer serverItem = getOne(mediaServerId); |
| | |
| | | } |
| | | } |
| | | }else if (!hasAssist) { |
| | | logger.error("333"); |
| | | for (Object mediaServerObject : mediaServerObjectS) { |
| | | String mediaServerId = (String)mediaServerObject; |
| | | MediaServer serverItem = getOne(mediaServerId); |
| | |
| | | calld = streamAuthorityInfo.getCallId(); |
| | | } |
| | | List<StreamInfo> streamInfoList = getMediaList(mediaInfo, app, stream, calld); |
| | | if (streamInfoList.isEmpty()) { |
| | | if (streamInfoList == null || streamInfoList.isEmpty()) { |
| | | return null; |
| | | }else { |
| | | return streamInfoList.get(0); |
| | |
| | | streamInfoResult.setRtc(addr, mediaServer.getHttpPort(),mediaServer.getHttpSSlPort(), app, stream, callIdParam, isPlay); |
| | | |
| | | streamInfoResult.setMediaInfo(mediaInfo); |
| | | |
| | | if (!"broadcast".equalsIgnoreCase(app) && !ObjectUtils.isEmpty(mediaServer.getTranscodeSuffix()) && !"null".equalsIgnoreCase(mediaServer.getTranscodeSuffix())) { |
| | | String newStream = stream + "_" + mediaServer.getTranscodeSuffix(); |
| | | mediaServer.setTranscodeSuffix(null); |
| | | StreamInfo transcodeStreamInfo = getStreamInfoByAppAndStream(mediaServer, app, newStream, null, addr, callId, isPlay); |
| | | streamInfoResult.setTranscodeStream(transcodeStreamInfo); |
| | | } |
| | | return streamInfoResult; |
| | | } |
| | | |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void startSendRtpPassive(MediaServer mediaServer, ParentPlatform platform, SendRtpItem sendRtpItem, Integer timeout) { |
| | | public void startSendRtpPassive(MediaServer mediaServer, SendRtpItem sendRtpItem, Integer timeout) { |
| | | IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); |
| | | if (mediaNodeServerService == null) { |
| | | logger.info("[startSendRtpPassive] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); |
| | | throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到mediaServer对应的实现类"); |
| | | } |
| | | mediaNodeServerService.startSendRtpPassive(mediaServer, sendRtpItem, timeout); |
| | | sendPlatformStartPlayMsg(platform, sendRtpItem); |
| | | } |
| | | |
| | | @Override |
| | | public void startSendRtp(MediaServer mediaServer, ParentPlatform platform, SendRtpItem sendRtpItem) { |
| | | public void startSendRtp(MediaServer mediaServer, SendRtpItem sendRtpItem) { |
| | | IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); |
| | | if (mediaNodeServerService == null) { |
| | | logger.info("[startSendRtpStream] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); |
| | |
| | | logger.info("[开始推流] rtp/{}, 目标={}:{},SSRC={}, RTCP={}", sendRtpItem.getStream(), |
| | | sendRtpItem.getIp(), sendRtpItem.getPort(), sendRtpItem.getSsrc(), sendRtpItem.isRtcp()); |
| | | mediaNodeServerService.startSendRtpStream(mediaServer, sendRtpItem); |
| | | if (platform != null) { |
| | | sendPlatformStartPlayMsg(platform, sendRtpItem); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | private void sendPlatformStartPlayMsg(ParentPlatform platform, SendRtpItem sendRtpItem) { |
| | | if (sendRtpItem.getPlayType() == InviteStreamType.PUSH && platform != null) { |
| | | MessageForPushChannel messageForPushChannel = MessageForPushChannel.getInstance(0, sendRtpItem.getApp(), sendRtpItem.getStream(), |
| | | sendRtpItem.getChannelId(), platform.getServerGBId(), platform.getName(), userSetting.getServerId(), |
| | | sendRtpItem.getMediaServerId()); |
| | | messageForPushChannel.setPlatFormIndex(platform.getId()); |
| | | redisCatchStorage.sendPlatformStartPlayMsg(messageForPushChannel); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public Long updateDownloadProcess(MediaServer mediaServer, String app, String stream) { |
| | | IMediaNodeServerService mediaNodeServerService = nodeServerServiceMap.get(mediaServer.getType()); |
| | | if (mediaNodeServerService == null) { |
| | | logger.info("[updateDownloadProcess] 失败, mediaServer的类型: {},未找到对应的实现类", mediaServer.getType()); |
| | | throw new ControllerException(ErrorCode.ERROR100.getCode(), "未找到mediaServer对应的实现类"); |
| | | } |
| | | return mediaNodeServerService.updateDownloadProcess(mediaServer, app, stream); |
| | | } |
| | | } |