| | |
| | | if (rtpInfo.getBoolean("exist")) { |
| | | int localPort = rtpInfo.getInteger("local_port"); |
| | | if (localPort == 0) { |
| | | logger.warn("[点播],点播时发现rtpServerC存在,但是尚未开始推流"); |
| | | logger.warn("[点播],点播时发现rtpServer存在,但是尚未开始推流"); |
| | | // 此时说明rtpServer已经创建但是流还没有推上来 |
| | | WVPResult wvpResult = new WVPResult(); |
| | | wvpResult.setCode(ErrorCode.ERROR100.getCode()); |
| | |
| | | ZlmHttpHookSubscribe.Event hookEvent, SipSubscribe.Event errorEvent, |
| | | InviteTimeOutCallback timeoutCallback) { |
| | | |
| | | logger.info("[点播开始] deviceId: {}, channelId: {},收流端口: {}, 收流模式:{}, SSRC: {}, SSRC校验:{}", device.getDeviceId(), channelId, ssrcInfo.getPort(), device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck()); |
| | | logger.info("\r\n" + |
| | | "[点播开始] \r\n" + |
| | | "deviceId : {}, \r\n" + |
| | | "channelId : {},\r\n" + |
| | | "收流端口 :{}, \r\n" + |
| | | "收流模式 :{}, \r\n" + |
| | | "SSRC : {}, \r\n" + |
| | | "SSRC校验 :{} ", device.getDeviceId(), channelId, ssrcInfo.getPort(), device.getStreamMode(), ssrcInfo.getSsrc(), device.isSsrcCheck()); |
| | | // 超时处理 |
| | | String timeOutTaskKey = UUID.randomUUID().toString(); |
| | | dynamicTask.startDelay(timeOutTaskKey, () -> { |
| | |
| | | }, userSetting.getPlayTimeout()); |
| | | //端口获取失败的ssrcInfo 没有必要发送点播指令 |
| | | if (ssrcInfo.getPort() <= 0) { |
| | | logger.info("[点播端口分配异常],deviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, ssrcInfo); |
| | | logger.info("[点播端口分配异常],deviceId={},channelId={},ssrcInfo={}", device.getDeviceId(), channelId, JSON.toJSONString(ssrcInfo)); |
| | | dynamicTask.stop(timeOutTaskKey); |
| | | // 释放ssrc |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | |
| | | if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) { |
| | | logger.info("[点播消息] SSRC修正 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse); |
| | | |
| | | if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) { |
| | | // ssrc 不可用 |
| | | // 释放ssrc |
| | | ssrcFactory.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); |
| | | event.msg = "下级自定义了ssrc,但是此ssrc不可用"; |
| | | event.statusCode = 400; |
| | | errorEvent.response(event); |
| | | return; |
| | | } |
| | | |
| | | // 释放不被使用的ssrc |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | // 单端口模式streamId也有变化,需要重新设置监听 |
| | | if (!mediaServerItem.isRtpEnable()) { |
| | | // 添加订阅 |
| | |
| | | hookEvent.response(mediaServerItemInUse, response); |
| | | }); |
| | | } |
| | | |
| | | // 关闭rtp server |
| | | mediaServerService.closeRTPServer(mediaServerItem, ssrcInfo.getStream(), result->{ |
| | | if (result) { |
| | |
| | | } |
| | | |
| | | dynamicTask.stop(timeOutTaskKey); |
| | | // 释放ssrc |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | |
| | | streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); |
| | | event.msg = "下级自定义了ssrc,重新设置收流信息失败"; |
| | |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | |
| | | streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); |
| | | SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new CmdSendFailEvent(null)); |
| | | SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(); |
| | | eventResult.type = SipSubscribe.EventResultType.cmdSendFailEvent; |
| | | eventResult.statusCode = -1; |
| | | eventResult.msg = "命令发送失败"; |
| | | errorEvent.response(eventResult); |
| | | } |
| | |
| | | if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) { |
| | | logger.info("[回放消息] SSRC修正 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse); |
| | | |
| | | if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) { |
| | | // ssrc 不可用 |
| | | // 释放ssrc |
| | | dynamicTask.stop(playBackTimeOutTaskKey); |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); |
| | | eventResult.msg = "下级自定义了ssrc,但是此ssrc不可用"; |
| | | eventResult.statusCode = 400; |
| | | errorEvent.response(eventResult); |
| | | return; |
| | | } |
| | | // 释放不被使用的ssrc |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | |
| | | // 单端口模式streamId也有变化,需要重新设置监听 |
| | | if (!mediaServerItem.isRtpEnable()) { |
| | |
| | | } catch (InvalidArgumentException | SipException | ParseException e) { |
| | | logger.error("[命令发送失败] 回放: {}", e.getMessage()); |
| | | |
| | | SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new CmdSendFailEvent(null)); |
| | | SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(); |
| | | eventResult.type = SipSubscribe.EventResultType.cmdSendFailEvent; |
| | | eventResult.statusCode = -1; |
| | | eventResult.msg = "命令发送失败"; |
| | | errorEvent.response(eventResult); |
| | | } |
| | |
| | | if (!mediaServerItem.isRtpEnable() || device.isSsrcCheck()) { |
| | | logger.info("[录像下载] SSRC修正 {}->{}", ssrcInfo.getSsrc(), ssrcInResponse); |
| | | |
| | | if (!ssrcFactory.checkSsrc(mediaServerItem.getId(),ssrcInResponse)) { |
| | | // ssrc 不可用 |
| | | // 释放ssrc |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | streamSession.remove(device.getDeviceId(), channelId, ssrcInfo.getStream()); |
| | | eventResult.msg = "下级自定义了ssrc,但是此ssrc不可用"; |
| | | eventResult.statusCode = 400; |
| | | errorEvent.response(eventResult); |
| | | return; |
| | | } |
| | | // 释放不被使用的ssrc |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | |
| | | // 单端口模式streamId也有变化,需要重新设置监听 |
| | | if (!mediaServerItem.isRtpEnable()) { |
| | |
| | | } catch (InvalidArgumentException | SipException | ParseException e) { |
| | | logger.error("[命令发送失败] 录像下载: {}", e.getMessage()); |
| | | |
| | | SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(new CmdSendFailEvent(null)); |
| | | SipSubscribe.EventResult eventResult = new SipSubscribe.EventResult(); |
| | | eventResult.type = SipSubscribe.EventResultType.cmdSendFailEvent; |
| | | eventResult.statusCode = -1; |
| | | eventResult.msg = "命令发送失败"; |
| | | errorEvent.response(eventResult); |
| | | } |