From 0f58218badea86a5209ae7f1ccd60b7cb4b26eee Mon Sep 17 00:00:00 2001 From: panlinlin <648540858@qq.com> Date: 星期四, 25 二月 2021 18:10:02 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' into wvp-28181-2.0 --- src/main/java/com/genersoft/iot/vmp/vmanager/ptz/PtzController.java | 102 ++++++++++++++++++++++++++++++++++++++++++-------- 1 files changed, 85 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/ptz/PtzController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/ptz/PtzController.java index 842d2a8..1efdd3d 100644 --- a/src/main/java/com/genersoft/iot/vmp/vmanager/ptz/PtzController.java +++ b/src/main/java/com/genersoft/iot/vmp/vmanager/ptz/PtzController.java @@ -5,13 +5,19 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.context.request.async.DeferredResult; +import javax.sip.message.Response; + +import com.genersoft.iot.vmp.gb28181.bean.Device; +import com.genersoft.iot.vmp.gb28181.transmit.callback.DeferredResultHolder; +import com.genersoft.iot.vmp.gb28181.transmit.callback.RequestMessage; import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander; +import com.genersoft.iot.vmp.gb28181.utils.XmlUtil; +import com.genersoft.iot.vmp.storager.IVideoManagerStorager; +@CrossOrigin @RestController @RequestMapping("/api") public class PtzController { @@ -20,26 +26,88 @@ @Autowired private SIPCommander cmder; + + @Autowired + private IVideoManagerStorager storager; + @Autowired + private DeferredResultHolder resultHolder; + /*** - * http://localhost:8080/api/ptz/34020000001320000002_34020000001320000008?leftRight=1&upDown=0&inOut=0&moveSpeed=50&zoomSpeed=0 - * @param deviceId - * @param channelId - * @param leftRight - * @param upDown - * @param inOut - * @param moveSpeed - * @param zoomSpeed - * @return + * 浜戝彴鎺у埗 + * @param deviceId 璁惧id + * @param channelId 閫氶亾id + * @param cmdCode 鎸囦护鐮� + * @param horizonSpeed 姘村钩绉诲姩閫熷害 + * @param verticalSpeed 鍨傜洿绉诲姩閫熷害 + * @param zoomSpeed 缂╂斁閫熷害 + * @return String 鎺у埗缁撴灉 */ - @GetMapping("/ptz/{deviceId}_{channelId}") - public ResponseEntity<String> ptz(@PathVariable String deviceId,@PathVariable String channelId,int leftRight, int upDown, int inOut, int moveSpeed, int zoomSpeed){ + @PostMapping("/ptz/{deviceId}/{channelId}") + public ResponseEntity<String> ptz(@PathVariable String deviceId,@PathVariable String channelId,int cmdCode, int horizonSpeed, int verticalSpeed, int zoomSpeed){ if (logger.isDebugEnabled()) { - logger.debug(String.format("璁惧浜戝彴鎺у埗 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s 锛宭eftRight锛�%d 锛寀pDown锛�%d 锛宨nOut锛�%d 锛宮oveSpeed锛�%d 锛寊oomSpeed锛�%d",deviceId, channelId, leftRight, upDown, inOut, moveSpeed, zoomSpeed)); + logger.debug(String.format("璁惧浜戝彴鎺у埗 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s 锛宑mdCode锛�%d 锛宧orizonSpeed锛�%d 锛寁erticalSpeed锛�%d 锛寊oomSpeed锛�%d",deviceId, channelId, cmdCode, horizonSpeed, verticalSpeed, zoomSpeed)); } + Device device = storager.queryVideoDevice(deviceId); - cmder.ptzCmd(deviceId, channelId, leftRight, upDown, inOut, moveSpeed, zoomSpeed); + cmder.frontEndCmd(device, channelId, cmdCode, horizonSpeed, verticalSpeed, zoomSpeed); return new ResponseEntity<String>("success",HttpStatus.OK); } + + /** + * 閫氱敤鍓嶇鎺у埗鍛戒护API鎺ュ彛 + * + * @param deviceId + * @param channelId + * @param cmdCode + * @param parameter1 + * @param parameter2 + * @param combindCode2 + * @return + */ + @PostMapping("/frontEndCommand/{deviceId}/{channelId}") + public ResponseEntity<String> frontEndCommand(@PathVariable String deviceId,@PathVariable String channelId,int cmdCode, int parameter1, int parameter2, int combindCode2){ + + if (logger.isDebugEnabled()) { + logger.debug(String.format("璁惧浜戝彴鎺у埗 API璋冪敤锛宒eviceId锛�%s 锛宑hannelId锛�%s 锛宑mdCode锛�%d parameter1锛�%d parameter2锛�%d",deviceId, channelId, cmdCode, parameter1, parameter2)); + } + Device device = storager.queryVideoDevice(deviceId); + + cmder.frontEndCmd(device, channelId, cmdCode, parameter1, parameter2, combindCode2); + return new ResponseEntity<String>("success",HttpStatus.OK); + } + + /** + * 棰勭疆浣嶆煡璇㈠懡浠PI鎺ュ彛 + * + * @param deviceId + * @param channelId + * @return + */ + @GetMapping("/presetQuery/{deviceId}/{channelId}") + public DeferredResult<ResponseEntity<String>> presetQueryApi(@PathVariable String deviceId, @PathVariable String channelId) { + if (logger.isDebugEnabled()) { + logger.debug("璁惧棰勭疆浣嶆煡璇PI璋冪敤"); + } + Device device = storager.queryVideoDevice(deviceId); + cmder.presetQuery(device, channelId, event -> { + Response response = event.getResponse(); + RequestMessage msg = new RequestMessage(); + msg.setId(DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + (XmlUtil.isEmpty(channelId) ? deviceId : channelId)); + msg.setData(String.format("鑾峰彇璁惧棰勭疆浣嶅け璐ワ紝閿欒鐮侊細 %s, %s", response.getStatusCode(), response.getReasonPhrase())); + resultHolder.invokeResult(msg); + }); + DeferredResult<ResponseEntity<String>> result = new DeferredResult<ResponseEntity<String >> (3 * 1000L); + result.onTimeout(()->{ + logger.warn(String.format("鑾峰彇璁惧棰勭疆浣嶈秴鏃�")); + // 閲婃斁rtpserver + RequestMessage msg = new RequestMessage(); + msg.setId(DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + (XmlUtil.isEmpty(channelId) ? deviceId : channelId)); + msg.setData("鑾峰彇璁惧棰勭疆浣嶈秴鏃�"); + resultHolder.invokeResult(msg); + }); + resultHolder.put(DeferredResultHolder.CALLBACK_CMD_PRESETQUERY + (XmlUtil.isEmpty(channelId) ? deviceId : channelId), result); + return result; + } } -- Gitblit v1.8.0