| | |
| | | |
| | | import com.alibaba.fastjson2.JSON; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.genersoft.iot.vmp.conf.DynamicTask; |
| | | import com.genersoft.iot.vmp.conf.UserSetting; |
| | | import com.genersoft.iot.vmp.conf.exception.SsrcTransactionNotFoundException; |
| | | import com.genersoft.iot.vmp.gb28181.SipLayer; |
| | |
| | | }else { |
| | | catalogXml.append("<Address>" + channel.getAddress() + "</Address>\r\n"); |
| | | } |
| | | catalogXml.append("<Block>" + channel.getBlock() + "</Block>\r\n"); |
| | | catalogXml.append("<SafetyWay>" + channel.getSafetyWay() + "</SafetyWay>\r\n"); |
| | | catalogXml.append("<CertNum>" + channel.getCertNum() + "</CertNum>\r\n"); |
| | | catalogXml.append("<Certifiable>" + channel.getCertifiable() + "</Certifiable>\r\n"); |
| | | catalogXml.append("<ErrCode>" + channel.getErrCode() + "</ErrCode>\r\n"); |
| | | catalogXml.append("<EndTime>" + channel.getEndTime() + "</EndTime>\r\n"); |
| | | catalogXml.append("<Secrecy>" + channel.getSecrecy() + "</Secrecy>\r\n"); |
| | | catalogXml.append("<IPAddress>" + channel.getIpAddress() + "</IPAddress>\r\n"); |
| | | catalogXml.append("<Port>" + channel.getPort() + "</Port>\r\n"); |
| | | catalogXml.append("<Password>" + channel.getPort() + "</Password>\r\n"); |
| | | catalogXml.append("<Status>" + (channel.getStatus() == 1?"ON":"OFF") + "</Status>\r\n"); |
| | | catalogXml.append("<Longitude>" + |
| | | (channel.getLongitudeWgs84() != 0? channel.getLongitudeWgs84():channel.getLongitude()) |
| | | + "</Longitude>\r\n"); |
| | | catalogXml.append("<Latitude>" + |
| | | (channel.getLatitudeWgs84() != 0? channel.getLatitudeWgs84():channel.getLatitude()) |
| | | + "</Latitude>\r\n"); |
| | | |
| | | |
| | | } |
| | | } |
| | | catalogXml.append("</Item>\r\n"); |
| | |
| | | Request request = headerProviderPlatformProvider.createMessageRequest(parentPlatform, deviceInfoXml.toString(), fromTag, SipUtils.getNewViaTag(), callIdHeader); |
| | | sipSender.transmitRequest(parentPlatform.getDeviceIp(), request); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 向上级回复DeviceStatus查询信息 |
| | |
| | | MediaServerItem mediaServerItem = mediaServerService.getOne(mediaServerId); |
| | | if (mediaServerItem != null) { |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), sendRtpItem.getSsrc()); |
| | | zlmrtpServerFactory.closeRtpServer(mediaServerItem, sendRtpItem.getStreamId()); |
| | | zlmrtpServerFactory.closeRtpServer(mediaServerItem, sendRtpItem.getStream()); |
| | | } |
| | | SIPRequest byeRequest = headerProviderPlatformProvider.createByeRequest(platform, sendRtpItem); |
| | | if (byeRequest == null) { |
| | |
| | | String characterSet = platform.getCharacterSet(); |
| | | StringBuffer mediaStatusXml = new StringBuffer(200); |
| | | mediaStatusXml.append("<?xml version=\"1.0\" encoding=\"" + characterSet + "\"?>\r\n"); |
| | | mediaStatusXml.append("<Notify>\r\n"); |
| | | mediaStatusXml.append("<Response>\r\n"); |
| | | mediaStatusXml.append("<CmdType>Broadcast</CmdType>\r\n"); |
| | | mediaStatusXml.append("<SN>" + sn + "</SN>\r\n"); |
| | | mediaStatusXml.append("<DeviceID>" + deviceChannel.getChannelId() + "</DeviceID>\r\n"); |
| | | mediaStatusXml.append("<Result>" + (result?"OK":"ERROR") + "</Result>\r\n"); |
| | | mediaStatusXml.append("</Notify>\r\n"); |
| | | mediaStatusXml.append("</Response>\r\n"); |
| | | |
| | | CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(platform.getDeviceIp(), platform.getTransport()); |
| | | |
| | |
| | | content.append("t=0 0\r\n"); |
| | | |
| | | if ("TCP-PASSIVE".equalsIgnoreCase(userSetting.getBroadcastForPlatform())) { |
| | | content.append("m=video " + ssrcInfo.getPort() + " TCP/RTP/AVP 8 96\r\n"); |
| | | content.append("m=audio " + ssrcInfo.getPort() + " TCP/RTP/AVP 8 96\r\n"); |
| | | } else if ("TCP-ACTIVE".equalsIgnoreCase(userSetting.getBroadcastForPlatform())) { |
| | | content.append("m=video " + ssrcInfo.getPort() + " TCP/RTP/AVP 8 96\r\n"); |
| | | content.append("m=audio " + ssrcInfo.getPort() + " TCP/RTP/AVP 8 96\r\n"); |
| | | } else if ("UDP".equalsIgnoreCase(userSetting.getBroadcastForPlatform())) { |
| | | content.append("m=video " + ssrcInfo.getPort() + " RTP/AVP 8 96\r\n"); |
| | | content.append("m=audio " + ssrcInfo.getPort() + " RTP/AVP 8 96\r\n"); |
| | | } |
| | | |
| | | content.append("a=recvonly\r\n"); |
| | |
| | | CallIdHeader callIdHeader = sipSender.getNewCallIdHeader(sipLayer.getLocalIp(platform.getDeviceIp()), platform.getTransport()); |
| | | |
| | | Request request = headerProviderPlatformProvider.createInviteRequest(platform, channelId, |
| | | content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), null, ssrcInfo.getSsrc(), |
| | | callIdHeader ,platform.getTransport()); |
| | | content.toString(), SipUtils.getNewViaTag(), SipUtils.getNewFromTag(), ssrcInfo.getSsrc(), |
| | | callIdHeader); |
| | | sipSender.transmitRequest(sipLayer.getLocalIp(platform.getDeviceIp()), request, (e -> { |
| | | streamSession.remove(platform.getServerGBId(), channelId, ssrcInfo.getStream()); |
| | | mediaServerService.releaseSsrc(mediaServerItem.getId(), ssrcInfo.getSsrc()); |
| | | subscribe.removeSubscribe(hookSubscribe); |
| | | errorEvent.response(e); |
| | | }), e -> { |
| | | // 这里为例避免一个通道的点播只有一个callID这个参数使用一个固定值 |
| | | ResponseEvent responseEvent = (ResponseEvent) e.event; |
| | | SIPResponse response = (SIPResponse) responseEvent.getResponse(); |
| | | streamSession.put(platform.getServerGBId(), channelId, callIdHeader.getCallId(), stream, ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.play); |
| | | streamSession.put(platform.getServerGBId(), channelId, callIdHeader.getCallId(), stream, ssrcInfo.getSsrc(), mediaServerItem.getId(), response, VideoStreamSessionManager.SessionType.broadcast); |
| | | okEvent.response(e); |
| | | }); |
| | | } |