Browse Source

添加大华摄像头镜头、方向、功能控制接口

邵洋 1 năm trước cách đây
mục cha
commit
243934cd41

+ 166 - 0
visualization-service/src/main/java/com/zksy/visualization/controller/RealTimePreviewVideoController.java

@@ -273,6 +273,172 @@ public class RealTimePreviewVideoController {
         }
         return Result.error("请求失败");
     }
+    @ApiOperation(value = "云台镜头控制",notes = "控制云台镜头的变焦、变倍及光圈大小\n" +
+            "命令command=1时,云台会开启动作,不调command=0会一直转动\n" +
+            "异步发送操作指令到设备端,需开启动作与停止动作间隔一定时间,保证顺序执行\n" +
+            "不推荐多用户同时操作同一个设备,多用户操作以最后一次操作为准")
+    @PostMapping("/getOperateCamera")
+    public Result getOperateCamera(CameraControlRequest request){
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonParams = null;
+        try {
+            jsonParams = objectMapper.writeValueAsString(request);
+        } catch (JsonProcessingException e) {
+            log.error("JSON序列化失败: {}", e);
+            return Result.error("请求失败");
+        }
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        // 创建请求体
+        RequestBody body = RequestBody.create(jsonParams, JSON);
+        // 构建请求
+        Request requestHttp = new Request.Builder()
+                .url("https://" + iccConfigProperty.getHost() + "/evo-apigw/admin/API/DMS/Ptz/OperateCamera")
+                .addHeader("Authorization", authorization)
+                .post(body)
+                .build();
+        // 发送请求
+        try (Response response = httpClient.newCall(requestHttp).execute()) {
+            if (!response.isSuccessful()) {
+                return Result.error("请求失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if("true".equals(success.asText())) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode != null) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else {
+                    JsonNode code = rootNode.path("code");
+                    if("1001".equals(code.asText())){
+                        return Result.error("返回失败");
+                    }else {
+                        return Result.error("云台镜头控制失败");
+                    }
+                }
+            }
+        } catch (IOException e) {
+            log.error("请求失败: {}", e);
+        }
+        return Result.error("请求失败");
+    }
+    @ApiOperation(value = "云台镜头控制",notes = "控制云台进行上下左右等八个方向的移动 命令command=1时,云台会开启动作,不调command=0会一直转动\n" +
+            "异步发送操作指令到设备端,需开启动作与停止动作间隔一定时间,保证顺序执行\n" +
+            "不推荐多用户同时操作同一个设备,多用户操作以最后一次操作为准")
+    @PostMapping("/getOperateDirect")
+    public Result getOperateDirect(OperateDirectRequest request){
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonParams = null;
+        try {
+            jsonParams = objectMapper.writeValueAsString(request);
+        } catch (JsonProcessingException e) {
+            log.error("JSON序列化失败: {}", e);
+            return Result.error("请求失败");
+        }
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        // 创建请求体
+        RequestBody body = RequestBody.create(jsonParams, JSON);
+        // 构建请求
+        Request requestHttp = new Request.Builder()
+                .url("https://" + iccConfigProperty.getHost() + "/evo-apigw/admin/API/DMS/Ptz/OperateDirect")
+                .addHeader("Authorization", authorization)
+                .post(body)
+                .build();
+        // 发送请求
+        try (Response response = httpClient.newCall(requestHttp).execute()) {
+            if (!response.isSuccessful()) {
+                return Result.error("请求失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if("true".equals(success.asText())) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode != null) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else {
+                    JsonNode code = rootNode.path("code");
+                    if("1001".equals(code.asText())){
+                        return Result.error("返回失败");
+                    }else {
+                        return Result.error("云台方向控制失败");
+                    }
+                }
+            }
+        } catch (IOException e) {
+            log.error("请求失败: {}", e);
+        }
+        return Result.error("请求失败");
+    }
+    @ApiOperation(value = "云台功能控制",notes = "控制云台的巡航、循迹及灯光等功能 命令command=1时,云台会开启动作,不调command=0会一直转动\n" +
+            "异步发送操作指令到设备端,需开启动作与停止动作间隔一定时间,保证顺序执行\n" +
+            "不推荐多用户同时操作同一个设备,多用户操作以最后一次操作为准")
+    @PostMapping("/getOperateFunction")
+    public Result getOperateFunction(OperateDirectRequest request){
+        ObjectMapper objectMapper = new ObjectMapper();
+        String jsonParams = null;
+        try {
+            jsonParams = objectMapper.writeValueAsString(request);
+        } catch (JsonProcessingException e) {
+            log.error("JSON序列化失败: {}", e);
+            return Result.error("请求失败");
+        }
+        String authorization = redisTemplate
+                .opsForValue()
+                .get("Authorization:" + iccConfigProperty.getUsername());
+        // 创建请求体
+        RequestBody body = RequestBody.create(jsonParams, JSON);
+        // 构建请求
+        Request requestHttp = new Request.Builder()
+                .url("https://" + iccConfigProperty.getHost() + "/evo-apigw/admin/API/DMS/Ptz/OperateFunction")
+                .addHeader("Authorization", authorization)
+                .post(body)
+                .build();
+        // 发送请求
+        try (Response response = httpClient.newCall(requestHttp).execute()) {
+            if (!response.isSuccessful()) {
+                return Result.error("请求失败");
+            }
+            ResponseBody responseBody = response.body();
+            if (responseBody != null) {
+                String responseString = responseBody.string();
+                JsonNode rootNode = objectMapper.readTree(responseString);
+                JsonNode success = rootNode.path("success");
+                if("true".equals(success.asText())) {
+                    JsonNode dataNode = rootNode.path("data");
+                    if (dataNode != null) {
+                        return Result.ok(dataNode);
+                    } else {
+                        return Result.ok(null);
+                    }
+                }else {
+                    JsonNode code = rootNode.path("code");
+                    if("1001".equals(code.asText())){
+                        return Result.error("返回失败");
+                    }else {
+                        return Result.error("云台功能控制失败");
+                    }
+                }
+            }
+        } catch (IOException e) {
+            log.error("请求失败: {}", e);
+        }
+        return Result.error("请求失败");
+    }
 
     public String DateToTimeStamp(String dateTimeString){
         // 定义日期格式

+ 34 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/CameraControlRequest.java

@@ -0,0 +1,34 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "云台镜头控制请求参数")
+public class CameraControlRequest {
+
+    @ApiModelProperty(value = "Json对象", required = true)
+    private Data data;
+
+    @lombok.Data
+    public static class Data {
+        @ApiModelProperty(value = "视频通道编码,第一个$后数字代表通道类型,必须是1,且摄像头类型需是球机(cameraType字段必须是2)", required = true)
+        private String channelId;
+
+        @ApiModelProperty(value = "操作类型:1=变倍,2=变焦,3=光圈", required = true, allowableValues = "1,2,3")
+        private String operateType;
+
+        @ApiModelProperty(value = "方向:1=增加,2=减小", required = true, allowableValues = "1,2")
+        private String direct;
+
+        @ApiModelProperty(value = "转动速度(1-8的整数),越大代表越快", required = true, allowableValues = "1,2,3,4,5,6,7,8")
+        private String step;
+
+        @ApiModelProperty(value = "命令:0=停止动作,1=开启动作;注意事项:停止动作需与开启动作时的其他参数需保持一致,否则无法停止", required = true, allowableValues = "0,1")
+        private String command;
+
+        @ApiModelProperty(value = "扩展数据")
+        private String extend;
+    }
+}

+ 34 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/OperateDirectRequest.java

@@ -0,0 +1,34 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "摄像头方向控制请求参数")
+public class OperateDirectRequest {
+
+    @ApiModelProperty(value = "Json对象", required = true)
+    private Data data;
+
+    @lombok.Data
+    public static class Data {
+        @ApiModelProperty(value = "视频通道编码,第一个$后数字代表通道类型,必须是1,且摄像头类型需是球机(cameraType字段必须是2)", required = true)
+        private String channelId;
+
+        @ApiModelProperty(value = "方向:1=上,2=下,3=左,4=右,5=左上,6=左下,7=右上,8=右下", required = true, allowableValues = "1,2,3,4,5,6,7,8")
+        private String direct;
+
+        @ApiModelProperty(value = "水平转动速度(1-8的整数),越大代表越快", required = true, allowableValues = "1,2,3,4,5,6,7,8")
+        private String stepX;
+
+        @ApiModelProperty(value = "垂直转动速度(1-8的整数),越大代表越快", required = true, allowableValues = "1,2,3,4,5,6,7,8")
+        private String stepY;
+
+        @ApiModelProperty(value = "命令:0=停止, 1=开启", required = true, allowableValues = "0,1")
+        private String command;
+
+        @ApiModelProperty(value = "扩展数据")
+        private String extend;
+    }
+}

+ 31 - 0
visualization-service/src/main/java/com/zksy/visualization/domain/request/OperateFunctionRequest.java

@@ -0,0 +1,31 @@
+package com.zksy.visualization.domain.request;
+
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+@ApiModel(description = "摄像头功能控制请求参数")
+public class OperateFunctionRequest {
+
+    @ApiModelProperty(value = "Json对象", required = true)
+    private Data data;
+
+    @lombok.Data
+    public static class Data {
+        @ApiModelProperty(value = "视频通道编码,第一个$后数字代表通道类型,必须是1,且摄像头类型需是球机(cameraType字段必须是2)", required = true)
+        private String channelId;
+
+        @ApiModelProperty(value = "操作类型", required = true)
+        private String operateType;
+
+        @ApiModelProperty(value = "操作对象:仅当operateType=[14,19,20,21]时有意义,其他情况下为0")
+        private String target;
+
+        @ApiModelProperty(value = "命令:0=停止, 1=开启,仅当operateType=[11,12,13,14,15,18,19,20,21]时有意义,其他情况下为0")
+        private String command;
+
+        @ApiModelProperty(value = "扩展数据")
+        private String extend;
+    }
+}