czt
2025-06-10 694f541f9f4bc51818395be84e5ddf322c8048d8
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
package com.ld.igds.protocol.hikmedia;
 
 
import com.alibaba.fastjson.JSONObject;
import com.hikvision.artemis.sdk.ArtemisHttpUtil;
import com.hikvision.artemis.sdk.config.ArtemisConfig;
import com.ld.igds.protocol.hikmedia.data.ApiHikParam;
import com.ld.igds.protocol.hikmedia.data.HikRespData;
 
import java.util.HashMap;
import java.util.Map;
 
/**
 * 海康视频流媒体API调用管理-设备操作相关
 */
public class ApiCameraControl {
 
    private final static ApiCameraControl instance = new ApiCameraControl();
 
    private ApiCameraControl() {
    }
 
    public static ApiCameraControl getInstance() {
        return instance;
    }
 
 
    /**
     * 根据监控点编号进行云台操作
     * <p>
     * deviceCode
     * <p>
     * param.action  0-开始 ,1-停止
     * 注:GOTO_PRESET命令下填任意值均可转到预置点,建议填0即可
     * <p>
     * param.command 不区分大小写
     * 说明:
     * LEFT 左转
     * RIGHT右转
     * UP 上转
     * DOWN 下转
     * ZOOM_IN 焦距变大
     * ZOOM_OUT 焦距变小
     * LEFT_UP 左上
     * LEFT_DOWN 左下
     * RIGHT_UP 右上
     * RIGHT_DOWN 右下
     * FOCUS_NEAR 焦点前移
     * FOCUS_FAR 焦点后移
     * IRIS_ENLARGE 光圈扩大
     * IRIS_REDUCE 光圈缩小
     * WIPER_SWITCH 接通雨刷开关
     * START_RECORD_TRACK 开始记录轨迹
     * STOP_RECORD_TRACK 停止记录轨迹
     * START_TRACK 开始轨迹
     * STOP_TRACK 停止轨迹;
     * 以下命令presetIndex不可为空:
     * GOTO_PRESET到预置点
     *
     * @return
     */
    public HikRespData<String> ptz(ApiHikParam param) {
 
        /**
         * STEP1:设置平台参数,根据实际情况,设置host appkey appsecret 三个参数.
         */
        ArtemisConfig.host = param.getWanIp() + ":" + param.getPort(); // 平台的ip端口
        ArtemisConfig.appKey = param.getAppKey();  // 密钥appkey
        ArtemisConfig.appSecret = param.getAppSecret();// 密钥appSecret
 
        /**
         * STEP2:设置OpenAPI接口的上下文
         */
        final String ARTEMIS_PATH = param.getArtemisPath();
 
 
        /**
         * STEP3:设置接口的URI地址
         */
        final String urlApi = ARTEMIS_PATH + "/api/video/v1/ptzs/controlling";
 
 
        Map<String, String> path = new HashMap<String, String>(2) {
            {
                put("http://", urlApi);//根据现场环境部署确认是http还是https
            }
        };
 
        /**
         * STEP4:设置参数提交方式
         */
        String contentType = "application/json";
 
        /**
         * STEP5:组装请求参数
         */
        JSONObject jsonBody = new JSONObject();
        jsonBody.put("cameraIndexCode", param.getDeviceCode());
        jsonBody.put("action", param.getAction());
        jsonBody.put("command", param.getCommand());
        if (param.getPresetIndex() > 0) {
            jsonBody.put("presetIndex", param.getPresetIndex());
        }
        String body = jsonBody.toJSONString();
 
        /**
         * STEP6:调用接口
         */
        String result = ArtemisHttpUtil.doPostStringArtemis(path, body, null, null, contentType, null);// post请求application/json类型参数
 
 
        HikRespData<String> data = JSONObject.parseObject(result, HikRespData.class);
        return data;
    }
 
}