From 1f07f4ab4ceeb6029d3717cc4cb597d1ad6e7e67 Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期五, 16 四月 2021 11:21:50 +0800 Subject: [PATCH] 解决国标平台通道数统计的错误 --- src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java | 86 ++++++++++++++++++++++++++++++++++++++----- 1 files changed, 76 insertions(+), 10 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 abf9cf7..84c0898 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 @@ -23,7 +23,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; -import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.DependsOn; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @@ -47,8 +46,7 @@ public class SIPCommander implements ISIPCommander { private final Logger logger = LoggerFactory.getLogger(SIPCommander.class); - - + @Autowired private SipConfig sipConfig; @@ -92,7 +90,9 @@ @Autowired private SipSubscribe sipSubscribe; - + public SipConfig getSipConfig() { + return sipConfig; + } /** * 浜戝彴鏂瑰悜鏀炬帶鍒讹紝浣跨敤閰嶇疆鏂囦欢涓殑榛樿闀滃ご绉诲姩閫熷害 @@ -340,7 +340,7 @@ @Override public void playStreamCmd(Device device, String channelId, ZLMHttpHookSubscribe.Event event, SipSubscribe.Event errorEvent) { try { - + if (device == null) return; String ssrc = streamSession.createPlaySsrc(); String streamId = null; if (rtpEnable) { @@ -365,9 +365,14 @@ // 娣诲姞璁㈤槄 JSONObject subscribeKey = new JSONObject(); subscribeKey.put("app", "rtp"); - subscribeKey.put("id", streamId); + subscribeKey.put("stream", streamId); + subscribeKey.put("regist", true); - subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, subscribeKey, event); + subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey, json->{ + if (json.getJSONArray("tracks") == null) return; + event.response(json); + subscribe.removeSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey); + }); // StringBuffer content = new StringBuffer(200); content.append("v=0\r\n"); @@ -465,9 +470,14 @@ // 娣诲姞璁㈤槄 JSONObject subscribeKey = new JSONObject(); subscribeKey.put("app", "rtp"); - subscribeKey.put("id", streamId); + subscribeKey.put("stream", streamId); + subscribeKey.put("regist", true); - subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_publish, subscribeKey, event); + subscribe.addSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey, json->{ + if (json.getJSONArray("tracks") == null) return; + event.response(json); + subscribe.removeSubscribe(ZLMHttpHookSubscribe.HookType.on_stream_changed, subscribeKey); + }); StringBuffer content = new StringBuffer(200); content.append("v=0\r\n"); @@ -623,11 +633,67 @@ */ @Override public boolean audioBroadcastCmd(Device device, String channelId) { - // TODO Auto-generated method stub + // 鏀逛负鏂扮殑瀹炵幇 return false; } /** + * 璇煶骞挎挱 + * + * @param device 瑙嗛璁惧 + * @param channelId 棰勮閫氶亾 + */ + @Override + public boolean audioBroadcastCmd(Device device) { + try { + StringBuffer broadcastXml = new StringBuffer(200); + broadcastXml.append("<?xml version=\"1.0\" ?>\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.getSipId() + "</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); + 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); + broadcastXml.append("<?xml version=\"1.0\" ?>\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.getSipId() + "</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(); + } + } + + + /** * 闊宠棰戝綍鍍忔帶鍒� * * @param device 瑙嗛璁惧 -- Gitblit v1.8.0