1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
package com.netsdk.demo.customize.ptzNewDemo.module;
 
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.ToolKits;
import com.netsdk.lib.structure.NET_IN_PTZBASE_MOVEABSOLUTELY_INFO;
import com.netsdk.lib.structure.NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO;
 
/**
 * PTZ 控制接口
 *
 * @author 47040
 * @since Created in 2021/3/25 22:06
 */
public class PtzControlModule {
 
    static NetSDKLib NetSdk = NetSDKLib.NETSDK_INSTANCE;
 
    /**
     * 向上
     */
    public static boolean ptzControlUpStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
                lParam1, lParam2, 0, 0);
    }
 
    public static boolean ptzControlUpEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_UP_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 向下
     */
    public static boolean ptzControlDownStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
                lParam1, lParam2, 0, 0);
    }
 
    public static boolean ptzControlDownEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_DOWN_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 向左
     */
    public static boolean ptzControlLeftStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
                lParam1, lParam2, 0, 0);
    }
 
    public static boolean ptzControlLeftEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_LEFT_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 向右
     */
    public static boolean ptzControlRightStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
                lParam1, lParam2, 0, 0);
    }
 
    public static boolean ptzControlRightEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_RIGHT_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 向左上
     */
    public static boolean ptzControlLeftUpStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx2(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
                lParam1, lParam2, 0, 0, null);
    }
 
    public static boolean ptzControlLeftUpEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx2(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTTOP,
                0, 0, 0, 1, null);
    }
 
    /**
     * 向右上
     */
    public static boolean ptzControlRightUpStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
                lParam1, lParam2, 0, 0);
    }
 
    public static boolean ptzControlRightUpEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTTOP,
                0, 0, 0, 1);
    }
 
    /**
     * 向左下
     */
    public static boolean ptzControlLeftDownStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
                lParam1, lParam2, 0, 0);
    }
 
    public static boolean ptzControlLeftDownEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_LEFTDOWN,
                0, 0, 0, 1);
    }
 
    /**
     * 向右下
     */
    public static boolean ptzControlRightDownStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam1, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
                lParam1, lParam2, 0, 0);
    }
 
    public static boolean ptzControlRightDownEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_RIGHTDOWN,
                0, 0, 0, 1);
    }
 
    /**
     * 变倍+
     */
    public static boolean ptzControlZoomAddStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
                0, lParam2, 0, 0);
    }
 
    public static boolean ptzControlZoomAddEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_ADD_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 变倍-
     */
    public static boolean ptzControlZoomDecStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
                0, lParam2, 0, 0);
    }
 
    public static boolean ptzControlZoomDecEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_ZOOM_DEC_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 变焦+
     */
    public static boolean ptzControlFocusAddStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
                0, lParam2, 0, 0);
    }
 
    public static boolean ptzControlFocusAddEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_ADD_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 变焦-
     */
    public static boolean ptzControlFocusDecStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
                0, lParam2, 0, 0);
    }
 
    public static boolean ptzControlFocusDecEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_FOCUS_DEC_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 光圈+
     */
    public static boolean ptzControlIrisAddStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
                0, lParam2, 0, 0);
    }
 
    public static boolean ptzControlIrisAddEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_ADD_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 光圈-
     */
    public static boolean ptzControlIrisDecStart(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int lParam2) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
                0, lParam2, 0, 0);
    }
 
    public static boolean ptzControlIrisDecEnd(NetSDKLib.LLong m_hLoginHandle, int nChannelID) {
        return NetSdk.CLIENT_DHPTZControlEx(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_PTZ_ControlType.NET_PTZ_APERTURE_DEC_CONTROL,
                0, 0, 0, 1);
    }
 
    /**
     * 精确绝对移动 ( BaseMoveAbsolutely 协议 )
     *
     * @param m_hLoginHandle 登录句柄
     * @param nChannelID     通道号
     * @param xParam         x轴转角(0-3600,部分设备支持负数,请以实际测试为准)
     * @param yParam         y轴转角(早期云台只支持 0-900 即正 90度转角, 现在很多设备已支持负转角,请以实际测试为准)
     * @param zoomMapValue  倍率映射值
     * @return 运行是否成功
     */
    public static boolean ptzControlBaseMoveAbsolutely(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int xParam, int yParam, int zoomMapValue) {
 
        NET_IN_PTZBASE_MOVEABSOLUTELY_INFO stuBaseMoveInfo = new NET_IN_PTZBASE_MOVEABSOLUTELY_INFO();
        stuBaseMoveInfo.nZoomFlag = 3;   // zoom 倍率映射值
        stuBaseMoveInfo.stuPosition.nPosX = xParam;
        stuBaseMoveInfo.stuPosition.nPosY = yParam;
        stuBaseMoveInfo.stuPosition.nZoom = zoomMapValue;
 
        stuBaseMoveInfo.write();
        if (!NetSdk.CLIENT_DHPTZControlEx2(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_BASE_MOVE_ABSOLUTELY,
                0, 0, 0, 0, stuBaseMoveInfo.getPointer())) {
            System.err.println("Move Absolutely Failed!" + ToolKits.getErrorCode());
            return false;
        } else {
            System.out.println("Move Absolutely Succeed!");
            return true;
        }
 
    }
 
    /**
     * 绝对移动 ( Base MoveAbsolutely 协议 )
     *
     * @param m_hLoginHandle 登录句柄
     * @param nChannelID     通道号
     * @param xParam         x轴转角(0-3600,部分设备支持负数,请以实际测试为准)
     * @param yParam         y轴转角(早期云台只支持 0-900 即正 90度转角, 现在很多设备已支持负转角,请以实际测试为准)
     * @param zoomReal       变倍大小 (10倍放大)
     * @return 运行是否成功
     */
    public static boolean ptzControlMoveAbsolutely(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int xParam, int yParam, int zoomReal) {
 
        NetSDKLib.PTZ_CONTROL_ABSOLUTELY stuPTZAbs = new NetSDKLib.PTZ_CONTROL_ABSOLUTELY();
 
        stuPTZAbs.stuPosition.nPositionX = xParam;
        stuPTZAbs.stuPosition.nPositionY = yParam;
        stuPTZAbs.stuPosition.nZoom = zoomReal;
 
        // 速度这里就统一0.5了,有需要可以自己改
        stuPTZAbs.stuSpeed.fPositionX = 0.5f;
        stuPTZAbs.stuSpeed.fPositionY = 0.5f;
        stuPTZAbs.stuSpeed.fZoom = 0.5f;
 
        stuPTZAbs.write();
        if (!NetSdk.CLIENT_DHPTZControlEx2(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_MOVE_ABSOLUTELY,
                0, 0, 0, 0, stuPTZAbs.getPointer())) {
            System.err.println("Move Absolutely Failed!" + ToolKits.getErrorCode());
            return false;
        } else {
            System.out.println("Move Absolutely Succeed!");
            return true;
        }
    }
 
    /**
     * 三维定位 ( ExactGoto 协议 )
     *
     * @param m_hLoginHandle 登录句柄
     * @param nChannelID     通道号
     * @param xParam         x轴转角(0-3600,部分设备支持负数,请以实际测试为准)
     * @param yParam         y轴转角(早期云台只支持 0-900 即正 90度转角, 现在很多设备已支持负转角,请以实际测试为准)
     * @param zoomRelative   相对变倍大小(设备支持 0-128 放大)
     * @return 运行是否成功
     */
    public static boolean ptzControlExactGotoControl(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int xParam, int yParam, int zoomRelative) {
 
        return NetSdk.CLIENT_DHPTZControlEx2(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_EXACTGOTO,           // 精确控制
                xParam, yParam, zoomRelative, 1, null);
    }
 
 
    /**
     * 设置位置聚焦值 ( set focus map )
     *
     * @param m_hLoginHandle 登录句柄
     * @param nChannelID     通道号
     * @param focusMapValue  聚焦值
     * @return 运行是否成功
     */
    public static boolean ptzControlSetFocusMapValue(NetSDKLib.LLong m_hLoginHandle, int nChannelID, int focusMapValue) {
        NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO focusMapInfo = new NET_IN_PTZBASE_SET_FOCUS_MAP_VALUE_INFO();
        focusMapInfo.nfocusMapValue = focusMapValue;
 
        focusMapInfo.write();
        if (!NetSdk.CLIENT_DHPTZControlEx2(m_hLoginHandle, nChannelID,
                NetSDKLib.NET_EXTPTZ_ControlType.NET_EXTPTZ_BASE_SET_FOCUS_MAP_VALUE,
                0, 0, 0, 0, focusMapInfo.getPointer())) {
            System.err.println("Set Focus Map Failed!" + ToolKits.getErrorCode());
            return false;
        } else {
            System.out.println("Set Focus Map Succeed!");
            return true;
        }
    }
}