|  |  |  | 
|---|
|  |  |  | streamAuthorityInfo.setSign(sign); | 
|---|
|  |  |  | // 鉴权通过 | 
|---|
|  |  |  | redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), param.getStream(), streamAuthorityInfo); | 
|---|
|  |  |  | // 通知assist新的callId | 
|---|
|  |  |  | if (mediaInfo != null && mediaInfo.getRecordAssistPort() > 0) { | 
|---|
|  |  |  | taskExecutor.execute(() -> { | 
|---|
|  |  |  | assistRESTfulUtils.addStreamCallInfo(mediaInfo, param.getApp(), param.getStream(), callId, null); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | zlmMediaListManager.sendStreamEvent(param.getApp(), param.getStream(), param.getMediaServerId()); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 替换流地址 | 
|---|
|  |  |  | if ("rtp".equals(param.getApp()) && !mediaInfo.isRtpEnable()) { | 
|---|
|  |  |  | String ssrc = String.format("%010d", Long.parseLong(param.getStream(), 16));; | 
|---|
|  |  |  | InviteInfo inviteInfo = inviteStreamService.getInviteInfoBySSRC(ssrc); | 
|---|
|  |  |  | if (inviteInfo != null) { | 
|---|
|  |  |  | result.setStream_replace(inviteInfo.getStream()); | 
|---|
|  |  |  | logger.info("[ZLM HOOK]推流鉴权 stream: {} 替换为 {}", param.getStream(), inviteInfo.getStream()); | 
|---|
|  |  |  | if (!mediaInfo.isRtpEnable()) { | 
|---|
|  |  |  | String ssrc = String.format("%010d", Long.parseLong(param.getStream(), 16));; | 
|---|
|  |  |  | InviteInfo inviteInfo = inviteStreamService.getInviteInfoBySSRC(ssrc); | 
|---|
|  |  |  | if (inviteInfo != null) { | 
|---|
|  |  |  | result.setStream_replace(inviteInfo.getStream()); | 
|---|
|  |  |  | logger.info("[ZLM HOOK]推流鉴权 stream: {} 替换为 {}", param.getStream(), inviteInfo.getStream()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<SsrcTransaction> ssrcTransactionForAll = sessionManager.getSsrcTransactionForAll(null, null, null, param.getStream()); | 
|---|
|  |  |  | if (ssrcTransactionForAll != null && ssrcTransactionForAll.size() == 1) { | 
|---|
|  |  |  |  | 
|---|
|  |  |  | // 为录制国标模拟一个鉴权信息 | 
|---|
|  |  |  | StreamAuthorityInfo streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(param); | 
|---|
|  |  |  | streamAuthorityInfo.setApp(param.getApp()); | 
|---|
|  |  |  | streamAuthorityInfo.setStream(ssrcTransactionForAll.get(0).getStream()); | 
|---|
|  |  |  | streamAuthorityInfo.setCallId(ssrcTransactionForAll.get(0).getSipTransactionInfo().getCallId()); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), ssrcTransactionForAll.get(0).getStream(), streamAuthorityInfo); | 
|---|
|  |  |  |  | 
|---|
|  |  |  | String deviceId = ssrcTransactionForAll.get(0).getDeviceId(); | 
|---|
|  |  |  | String channelId = ssrcTransactionForAll.get(0).getChannelId(); | 
|---|
|  |  |  | DeviceChannel deviceChannel = storager.queryChannel(deviceId, channelId); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | // 如果是录像下载就设置视频间隔十秒 | 
|---|
|  |  |  | if (ssrcTransactionForAll.get(0).getType() == InviteSessionType.DOWNLOAD) { | 
|---|
|  |  |  | result.setMp4_max_second(10); | 
|---|
|  |  |  | result.setMp4_max_second(30); | 
|---|
|  |  |  | result.setEnable_mp4(true); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (mediaInfo.getRecordAssistPort() > 0 && userSetting.getRecordPath() == null) { | 
|---|
|  |  |  | logger.info("推流时发现尚未设置录像路径,从assist服务中读取"); | 
|---|
|  |  |  | JSONObject info = assistRESTfulUtils.getInfo(mediaInfo, null); | 
|---|
|  |  |  | if (info != null && info.getInteger("code") != null && info.getInteger("code") == 0 ) { | 
|---|
|  |  |  | JSONObject dataJson = info.getJSONObject("data"); | 
|---|
|  |  |  | if (dataJson != null) { | 
|---|
|  |  |  | String recordPath = dataJson.getString("record"); | 
|---|
|  |  |  | userSetting.setRecordPath(recordPath); | 
|---|
|  |  |  | result.setMp4_save_path(recordPath); | 
|---|
|  |  |  | // 修改zlm中的录像路径 | 
|---|
|  |  |  | if (mediaInfo.isAutoConfig()) { | 
|---|
|  |  |  | taskExecutor.execute(() -> { | 
|---|
|  |  |  | mediaServerService.setZLMConfig(mediaInfo, false); | 
|---|
|  |  |  | }); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } | 
|---|
|  |  |  | if (param.getApp().equalsIgnoreCase("rtp")) { | 
|---|
|  |  |  | 
|---|
|  |  |  |  | 
|---|
|  |  |  | List<OnStreamChangedHookParam.MediaTrack> tracks = param.getTracks(); | 
|---|
|  |  |  | // TODO 重构此处逻辑 | 
|---|
|  |  |  | boolean isPush = false; | 
|---|
|  |  |  | if (param.isRegist()) { | 
|---|
|  |  |  | // 处理流注册的鉴权信息 | 
|---|
|  |  |  | // 处理流注册的鉴权信息, 流注销这里不再删除鉴权信息,下次来了新的鉴权信息会对就的进行覆盖 | 
|---|
|  |  |  | if (param.getOriginType() == OriginType.RTMP_PUSH.ordinal() | 
|---|
|  |  |  | || param.getOriginType() == OriginType.RTSP_PUSH.ordinal() | 
|---|
|  |  |  | || param.getOriginType() == OriginType.RTC_PUSH.ordinal()) { | 
|---|
|  |  |  | isPush = true; | 
|---|
|  |  |  | StreamAuthorityInfo streamAuthorityInfo = redisCatchStorage.getStreamAuthorityInfo(param.getApp(), param.getStream()); | 
|---|
|  |  |  | if (streamAuthorityInfo == null) { | 
|---|
|  |  |  | streamAuthorityInfo = StreamAuthorityInfo.getInstanceByHook(param); | 
|---|
|  |  |  | 
|---|
|  |  |  | } | 
|---|
|  |  |  | redisCatchStorage.updateStreamAuthorityInfo(param.getApp(), param.getStream(), streamAuthorityInfo); | 
|---|
|  |  |  | } | 
|---|
|  |  |  | } else { | 
|---|
|  |  |  | redisCatchStorage.removeStreamAuthorityInfo(param.getApp(), param.getStream()); | 
|---|
|  |  |  | } | 
|---|
|  |  |  |  | 
|---|
|  |  |  | if ("rtsp".equals(param.getSchema())) { | 
|---|