From 8f7e8efc981cf68a3067fb3421fdfbbf6f6275ab Mon Sep 17 00:00:00 2001 From: 648540858 <648540858@qq.com> Date: 星期二, 23 八月 2022 11:48:31 +0800 Subject: [PATCH] 合并主线 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 85 ++++++++++++++++++++++-------------------- 1 files changed, 44 insertions(+), 41 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java index b9a5011..811637a 100644 --- a/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java +++ b/src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java @@ -676,6 +676,46 @@ streamByeCmd(deviceId, channelId, stream, callId, null); } + @Override + public void streamByeCmd(SIPDialog dialog, String channelId, SIPRequest request, SipSubscribe.Event okEvent) throws SipException, ParseException, InvalidArgumentException { + Request byeRequest = dialog.createRequest(Request.BYE); + SipURI byeURI = (SipURI) byeRequest.getRequestURI(); + byeURI.setHost(request.getRemoteAddress().getHostAddress()); + byeURI.setPort(request.getRemotePort()); + byeURI.setUser(channelId); + ViaHeader viaHeader = (ViaHeader) byeRequest.getHeader(ViaHeader.NAME); + String protocol = viaHeader.getTransport().toUpperCase(); + viaHeader.setRPort(); + // 澧炲姞Contact header + Address concatAddress = sipFactory.createAddressFactory().createAddress(sipFactory.createAddressFactory().createSipURI(sipConfig.getId(), sipConfig.getIp()+":"+sipConfig.getPort())); + byeRequest.addHeader(sipFactory.createHeaderFactory().createContactHeader(concatAddress)); + List<String> agentParam = new ArrayList<>(); + agentParam.add("wvp-pro"); + // TODO 娣诲姞鐗堟湰淇℃伅浠ュ強鏃ユ湡 + UserAgentHeader userAgentHeader = null; + try { + userAgentHeader = sipFactory.createHeaderFactory().createUserAgentHeader(agentParam); + } catch (ParseException e) { + throw new RuntimeException(e); + } + byeRequest.addHeader(userAgentHeader); + ClientTransaction clientTransaction = null; + if("TCP".equals(protocol)) { + clientTransaction = tcpSipProvider.getNewClientTransaction(byeRequest); + } else if("UDP".equals(protocol)) { + clientTransaction = udpSipProvider.getNewClientTransaction(byeRequest); + } + + CallIdHeader callIdHeader = (CallIdHeader) byeRequest.getHeader(CallIdHeader.NAME); + if (okEvent != null) { + sipSubscribe.addOkSubscribe(callIdHeader.getCallId(), okEvent); + } + CSeqHeader cSeqHeader = (CSeqHeader)byeRequest.getHeader(CSeqHeader.NAME); + cSeqHeader.setSeqNumber(redisCatchStorage.getCSEQ()); + dialog.sendRequest(clientTransaction); + + } + /** * 瑙嗛娴佸仠姝� */ @@ -776,21 +816,9 @@ * 璇煶骞挎挱 * * @param device 瑙嗛璁惧 - * @param channelId 棰勮閫氶亾 */ @Override - public boolean audioBroadcastCmd(Device device, String channelId) { - // 鏀逛负鏂扮殑瀹炵幇 - return false; - } - - /** - * 璇煶骞挎挱 - * - * @param device 瑙嗛璁惧 - */ - @Override - public boolean audioBroadcastCmd(Device device) { + public boolean audioBroadcastCmd(Device device,String channelId, SipSubscribe.Event okEvent, SipSubscribe.Event errorEvent) { try { StringBuffer broadcastXml = new StringBuffer(200); String charset = device.getCharset(); @@ -799,7 +827,7 @@ broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n"); broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n"); broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n"); - broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n"); + broadcastXml.append("<TargetID>" + channelId + "</TargetID>\r\n"); broadcastXml.append("</Notify>\r\n"); String tm = Long.toString(System.currentTimeMillis()); @@ -808,39 +836,14 @@ : udpSipProvider.getNewCallId(); Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), "z9hG4bK-ViaBcst-" + tm, "FromBcst" + tm, null, callIdHeader); - transmitRequest(device, request); + transmitRequest(device, request, errorEvent, okEvent); return true; } catch (SipException | ParseException | InvalidArgumentException e) { e.printStackTrace(); } return false; } - @Override - public void audioBroadcastCmd(Device device, SipSubscribe.Event errorEvent) { - try { - StringBuffer broadcastXml = new StringBuffer(200); - String charset = device.getCharset(); - broadcastXml.append("<?xml version=\"1.0\" encoding=\"" + charset + "\"?>\r\n"); - broadcastXml.append("<Notify>\r\n"); - broadcastXml.append("<CmdType>Broadcast</CmdType>\r\n"); - broadcastXml.append("<SN>" + (int)((Math.random()*9+1)*100000) + "</SN>\r\n"); - broadcastXml.append("<SourceID>" + sipConfig.getId() + "</SourceID>\r\n"); - broadcastXml.append("<TargetID>" + device.getDeviceId() + "</TargetID>\r\n"); - broadcastXml.append("</Notify>\r\n"); - - String tm = Long.toString(System.currentTimeMillis()); - CallIdHeader callIdHeader = device.getTransport().equals("TCP") ? tcpSipProvider.getNewCallId() - : udpSipProvider.getNewCallId(); - - Request request = headerProvider.createMessageRequest(device, broadcastXml.toString(), "z9hG4bK-ViaBcst-" + tm, "FromBcst" + tm, null, callIdHeader); - transmitRequest(device, request, errorEvent); - } catch (SipException | ParseException | InvalidArgumentException e) { - e.printStackTrace(); - } - } - - /** * 闊宠棰戝綍鍍忔帶鍒� * @@ -1832,7 +1835,7 @@ private int getInfoCseq() { return (int) ((Math.random() * 9 + 1) * Math.pow(10, 8)); } - + @Override public void playbackControlCmd(Device device, StreamInfo streamInfo, String content,SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) { try { -- Gitblit v1.8.0