Commit 5ed44c3e0934bdef4b6547d3a101e934ac9c2637
1 parent
2659f105
支持级联云台控制
Showing
6 changed files
with
31 additions
and
17 deletions
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/SIPProcessorObserver.java
| ... | ... | @@ -4,7 +4,6 @@ import com.genersoft.iot.vmp.gb28181.event.SipSubscribe; |
| 4 | 4 | import com.genersoft.iot.vmp.gb28181.transmit.event.request.ISIPRequestProcessor; |
| 5 | 5 | import com.genersoft.iot.vmp.gb28181.transmit.event.response.ISIPResponseProcessor; |
| 6 | 6 | import com.genersoft.iot.vmp.gb28181.transmit.event.timeout.ITimeoutProcessor; |
| 7 | -import gov.nist.javax.sip.message.SIPRequest; | |
| 8 | 7 | import org.slf4j.Logger; |
| 9 | 8 | import org.slf4j.LoggerFactory; |
| 10 | 9 | import org.springframework.beans.factory.annotation.Autowired; |
| ... | ... | @@ -14,7 +13,6 @@ import org.springframework.stereotype.Component; |
| 14 | 13 | import javax.sip.*; |
| 15 | 14 | import javax.sip.header.CSeqHeader; |
| 16 | 15 | import javax.sip.header.CallIdHeader; |
| 17 | -import javax.sip.header.Header; | |
| 18 | 16 | import javax.sip.message.Response; |
| 19 | 17 | import java.util.Map; |
| 20 | 18 | import java.util.concurrent.ConcurrentHashMap; |
| ... | ... | @@ -36,6 +34,7 @@ public class SIPProcessorObserver implements ISIPProcessorObserver { |
| 36 | 34 | @Autowired |
| 37 | 35 | private SipSubscribe sipSubscribe; |
| 38 | 36 | |
| 37 | + | |
| 39 | 38 | // @Autowired |
| 40 | 39 | // @Qualifier(value = "taskExecutor") |
| 41 | 40 | // private ThreadPoolTaskExecutor poolTaskExecutor; |
| ... | ... | @@ -73,7 +72,7 @@ public class SIPProcessorObserver implements ISIPProcessorObserver { |
| 73 | 72 | @Override |
| 74 | 73 | @Async |
| 75 | 74 | public void processRequest(RequestEvent requestEvent) { |
| 76 | - logger.debug("\n收到请求:\n{}", requestEvent.getRequest()); | |
| 75 | + logger.info("\n收到请求:\n{}", requestEvent.getRequest()); | |
| 77 | 76 | String method = requestEvent.getRequest().getMethod(); |
| 78 | 77 | ISIPRequestProcessor sipRequestProcessor = requestProcessorMap.get(method); |
| 79 | 78 | if (sipRequestProcessor == null) { | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/ISIPCommander.java
| ... | ... | @@ -22,7 +22,6 @@ public interface ISIPCommander { |
| 22 | 22 | * @param channelId 预览通道 |
| 23 | 23 | * @param leftRight 镜头左移右移 0:停止 1:左移 2:右移 |
| 24 | 24 | * @param upDown 镜头上移下移 0:停止 1:上移 2:下移 |
| 25 | - * @param moveSpeed 镜头移动速度 | |
| 26 | 25 | */ |
| 27 | 26 | boolean ptzdirectCmd(Device device,String channelId,int leftRight, int upDown); |
| 28 | 27 | |
| ... | ... | @@ -52,7 +51,6 @@ public interface ISIPCommander { |
| 52 | 51 | * @param device 控制设备 |
| 53 | 52 | * @param channelId 预览通道 |
| 54 | 53 | * @param inOut 镜头放大缩小 0:停止 1:缩小 2:放大 |
| 55 | - * @param zoomSpeed 镜头缩放速度 | |
| 56 | 54 | */ |
| 57 | 55 | boolean ptzZoomCmd(Device device,String channelId,int inOut, int moveSpeed); |
| 58 | 56 | |
| ... | ... | @@ -87,7 +85,7 @@ public interface ISIPCommander { |
| 87 | 85 | * @param channelId 预览通道 |
| 88 | 86 | * @param cmdString 前端控制指令串 |
| 89 | 87 | */ |
| 90 | - boolean fronEndCmd(Device device, String channelId, String cmdString); | |
| 88 | + boolean fronEndCmd(Device device, String channelId, String cmdString, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent); | |
| 91 | 89 | |
| 92 | 90 | /** |
| 93 | 91 | * 请求预览视频流 |
| ... | ... | @@ -181,7 +179,6 @@ public interface ISIPCommander { |
| 181 | 179 | * 报警布防/撤防命令 |
| 182 | 180 | * |
| 183 | 181 | * @param device 视频设备 |
| 184 | - * @param setGuard true: SetGuard, false: ResetGuard | |
| 185 | 182 | */ |
| 186 | 183 | boolean guardCmd(Device device, String guardCmdStr, SipSubscribe.Event errorEvent); |
| 187 | 184 | |
| ... | ... | @@ -315,7 +312,6 @@ public interface ISIPCommander { |
| 315 | 312 | * @param expires 订阅过期时间(0 = 取消订阅) |
| 316 | 313 | * @param startPriority 报警起始级别(可选) |
| 317 | 314 | * @param endPriority 报警终止级别(可选) |
| 318 | - * @param alarmMethods 报警方式条件(可选) | |
| 319 | 315 | * @param alarmType 报警类型 |
| 320 | 316 | * @param startTime 报警发生起始时间(可选) |
| 321 | 317 | * @param endTime 报警发生终止时间(可选) | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/cmd/impl/SIPCommander.java
| ... | ... | @@ -303,7 +303,7 @@ public class SIPCommander implements ISIPCommander { |
| 303 | 303 | * @param cmdString 前端控制指令串 |
| 304 | 304 | */ |
| 305 | 305 | @Override |
| 306 | - public boolean fronEndCmd(Device device, String channelId, String cmdString) { | |
| 306 | + public boolean fronEndCmd(Device device, String channelId, String cmdString, SipSubscribe.Event errorEvent, SipSubscribe.Event okEvent) { | |
| 307 | 307 | try { |
| 308 | 308 | StringBuffer ptzXml = new StringBuffer(200); |
| 309 | 309 | ptzXml.append("<?xml version=\"1.0\" ?>\r\n"); |
| ... | ... | @@ -323,7 +323,7 @@ public class SIPCommander implements ISIPCommander { |
| 323 | 323 | : udpSipProvider.getNewCallId(); |
| 324 | 324 | |
| 325 | 325 | Request request = headerProvider.createMessageRequest(device, ptzXml.toString(), "z9hG4bK-ViaPtz-" + tm, "FromPtz" + tm, null, callIdHeader); |
| 326 | - transmitRequest(device, request); | |
| 326 | + transmitRequest(device, request, errorEvent, okEvent); | |
| 327 | 327 | return true; |
| 328 | 328 | } catch (SipException | ParseException | InvalidArgumentException e) { |
| 329 | 329 | e.printStackTrace(); | ... | ... |
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/SubscribeRequestProcessor.java
src/main/java/com/genersoft/iot/vmp/gb28181/transmit/event/request/impl/message/control/cmd/DeviceControlQueryMessageHandler.java
| ... | ... | @@ -19,13 +19,11 @@ import org.springframework.beans.factory.annotation.Autowired; |
| 19 | 19 | import org.springframework.stereotype.Component; |
| 20 | 20 | import org.springframework.util.StringUtils; |
| 21 | 21 | |
| 22 | -import javax.sip.ListeningPoint; | |
| 23 | -import javax.sip.ObjectInUseException; | |
| 24 | -import javax.sip.RequestEvent; | |
| 25 | -import javax.sip.SipProvider; | |
| 22 | +import javax.sip.*; | |
| 26 | 23 | import javax.sip.address.SipURI; |
| 27 | 24 | import javax.sip.header.HeaderAddress; |
| 28 | 25 | import javax.sip.header.ToHeader; |
| 26 | +import java.text.ParseException; | |
| 29 | 27 | import java.util.Iterator; |
| 30 | 28 | |
| 31 | 29 | import static com.genersoft.iot.vmp.gb28181.utils.XmlUtil.getText; |
| ... | ... | @@ -105,7 +103,29 @@ public class DeviceControlQueryMessageHandler extends SIPRequestProcessorParent |
| 105 | 103 | if (!StringUtils.isEmpty(getText(rootElement,"PTZCmd")) && !parentPlatform.getServerGBId().equals(targetGBId)) { |
| 106 | 104 | String cmdString = getText(rootElement,"PTZCmd"); |
| 107 | 105 | Device deviceForPlatform = storager.queryVideoDeviceByPlatformIdAndChannelId(parentPlatform.getServerGBId(), channelId); |
| 108 | - cmder.fronEndCmd(deviceForPlatform, channelId, cmdString); | |
| 106 | + cmder.fronEndCmd(deviceForPlatform, channelId, cmdString, eventResult -> { | |
| 107 | + // 失败的回复 | |
| 108 | + try { | |
| 109 | + responseAck(evt, eventResult.statusCode, eventResult.msg); | |
| 110 | + } catch (SipException e) { | |
| 111 | + e.printStackTrace(); | |
| 112 | + } catch (InvalidArgumentException e) { | |
| 113 | + e.printStackTrace(); | |
| 114 | + } catch (ParseException e) { | |
| 115 | + e.printStackTrace(); | |
| 116 | + } | |
| 117 | + }, eventResult -> { | |
| 118 | + // 成功的回复 | |
| 119 | + try { | |
| 120 | + responseAck(evt, eventResult.statusCode); | |
| 121 | + } catch (SipException e) { | |
| 122 | + e.printStackTrace(); | |
| 123 | + } catch (InvalidArgumentException e) { | |
| 124 | + e.printStackTrace(); | |
| 125 | + } catch (ParseException e) { | |
| 126 | + e.printStackTrace(); | |
| 127 | + } | |
| 128 | + }); | |
| 109 | 129 | } |
| 110 | 130 | } |
| 111 | 131 | } | ... | ... |
src/main/java/com/genersoft/iot/vmp/media/zlm/ZLMRTPServerFactory.java
| ... | ... | @@ -244,7 +244,7 @@ public class ZLMRTPServerFactory { |
| 244 | 244 | logger.error("RTP推流失败: 请检查ZLM服务"); |
| 245 | 245 | } else if (jsonObject.getInteger("code") == 0) { |
| 246 | 246 | result= true; |
| 247 | - logger.info("RTP推流成功[ {}/{} ],本地推流端口:{}" ,param.get("app"), param.get("stream"), jsonObject.getString("local_port")); | |
| 247 | + logger.info("RTP推流成功[ {}/{} ],{}->{}:{}, " ,param.get("app"), param.get("stream"), jsonObject.getString("local_port"), param.get("dst_url"), param.get("dst_port")); | |
| 248 | 248 | } else { |
| 249 | 249 | logger.error("RTP推流失败: {}, 参数:{}",jsonObject.getString("msg"),JSONObject.toJSON(param)); |
| 250 | 250 | } | ... | ... |