ApiControlController.java 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. package com.genersoft.iot.vmp.web.gb28181;
  2. import com.alibaba.fastjson.JSONObject;
  3. import com.genersoft.iot.vmp.conf.exception.ControllerException;
  4. import com.genersoft.iot.vmp.gb28181.bean.Device;
  5. import com.genersoft.iot.vmp.gb28181.transmit.cmd.impl.SIPCommander;
  6. import com.genersoft.iot.vmp.storager.IVideoManagerStorage;
  7. import com.genersoft.iot.vmp.vmanager.bean.ErrorCode;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.beans.factory.annotation.Autowired;
  11. import org.springframework.web.bind.annotation.*;
  12. import javax.sip.InvalidArgumentException;
  13. import javax.sip.SipException;
  14. import java.text.ParseException;
  15. /**
  16. * API兼容:设备控制
  17. */
  18. @CrossOrigin
  19. @RestController
  20. @RequestMapping(value = "/api/v1/control")
  21. public class ApiControlController {
  22. private final static Logger logger = LoggerFactory.getLogger(ApiControlController.class);
  23. @Autowired
  24. private SIPCommander cmder;
  25. @Autowired
  26. private IVideoManagerStorage storager;
  27. /**
  28. * 设备控制 - 云台控制
  29. * @param serial 设备编号
  30. * @param command 控制指令 允许值: left, right, up, down, upleft, upright, downleft, downright, zoomin, zoomout, stop
  31. * @param channel 通道序号
  32. * @param code 通道编号
  33. * @param speed 速度(0~255) 默认值: 129
  34. * @return
  35. */
  36. @RequestMapping(value = "/ptz")
  37. private void list(String serial,String command,
  38. @RequestParam(required = false)Integer channel,
  39. @RequestParam(required = false)String code,
  40. @RequestParam(required = false)Integer speed){
  41. if (logger.isDebugEnabled()) {
  42. logger.debug("模拟接口> 设备云台控制 API调用,deviceId:{} ,channelId:{} ,command:{} ,speed:{} ",
  43. serial, code, command, speed);
  44. }
  45. if (channel == null) {channel = 0;}
  46. if (speed == null) {speed = 0;}
  47. Device device = storager.queryVideoDevice(serial);
  48. if (device == null) {
  49. throw new ControllerException(ErrorCode.ERROR100.getCode(), "device[ " + serial + " ]未找到");
  50. }
  51. int cmdCode = 0;
  52. switch (command){
  53. case "left":
  54. cmdCode = 2;
  55. break;
  56. case "right":
  57. cmdCode = 1;
  58. break;
  59. case "up":
  60. cmdCode = 8;
  61. break;
  62. case "down":
  63. cmdCode = 4;
  64. break;
  65. case "upleft":
  66. cmdCode = 10;
  67. break;
  68. case "upright":
  69. cmdCode = 9;
  70. break;
  71. case "downleft":
  72. cmdCode = 6;
  73. break;
  74. case "downright":
  75. cmdCode = 5;
  76. break;
  77. case "zoomin":
  78. cmdCode = 16;
  79. break;
  80. case "zoomout":
  81. cmdCode = 32;
  82. break;
  83. case "stop":
  84. cmdCode = 0;
  85. break;
  86. default:
  87. break;
  88. }
  89. // 默认值 50
  90. try {
  91. cmder.frontEndCmd(device, code, cmdCode, speed, speed, speed);
  92. } catch (SipException | InvalidArgumentException | ParseException e) {
  93. logger.error("[命令发送失败] 云台控制: {}", e.getMessage());
  94. throw new ControllerException(ErrorCode.ERROR100.getCode(), "命令发送失败: " + e.getMessage());
  95. }
  96. }
  97. }