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
package com.netsdk.demo.customize;
 
import com.netsdk.demo.util.CaseMenu;
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.PlaySDKLib;
import com.netsdk.lib.ToolKits;
import com.netsdk.lib.structure.DH_OUT_PTZ_VIEW_RANGE_STATUS;
import com.netsdk.lib.structure.NET_IN_VIEW_RANGE_STATE;
import com.netsdk.lib.structure.NET_OUT_VIEW_RANGE_STATE;
import com.netsdk.lib.utils.Initialization;
import com.sun.jna.Pointer;
import com.sun.jna.ptr.IntByReference;
 
 
public class ViewRangeStateDemo extends Initialization {
 
 
    /**变量区**/
    int channel=1;
    NetSDKLib.LLong attachHandle = new NetSDKLib.LLong(0);
    static NetSDKLib netsdkApi = NetSDKLib.NETSDK_INSTANCE;
    static NetSDKLib configApi = NetSDKLib.CONFIG_INSTANCE;
    static PlaySDKLib playsdkApi   = PlaySDKLib.PLAYSDK_INSTANCE;
 
    /**方法区**/
    public static class ViewRangeStateCallBack implements NetSDKLib.fViewRangeStateCallBack{
 
        private static ViewRangeStateCallBack instance;
        private ViewRangeStateCallBack() {}
        public static ViewRangeStateCallBack getInstance() {
            if (instance == null) {
                synchronized (ViewRangeStateCallBack.class) {
                    if (instance == null) {
                        instance = new ViewRangeStateCallBack();
                    }
                }
            }
            return instance;
        }
        @Override
        public void invoke(NetSDKLib.LLong lLoginID, NetSDKLib.LLong lAttachHandle, Pointer pBuf, int nBufLen, Pointer dwUser) {
            System.out.println("ViewRangeStateCallBack detected");
            System.out.println("lLoginID = " + lLoginID);
            System.out.println("lAttachHandle = " + lAttachHandle);
            DH_OUT_PTZ_VIEW_RANGE_STATUS msg = new DH_OUT_PTZ_VIEW_RANGE_STATUS();
            ToolKits.GetPointerData(pBuf, msg);
            System.out.println("msg = " + msg.toString());
        }
    }
 
    /**
     * 订阅云台可视域
     */
    public void AttachViewRangeState() {
        // MethodContent
        NET_IN_VIEW_RANGE_STATE stIn = new NET_IN_VIEW_RANGE_STATE();
        stIn.nChannel = channel;
        stIn.cbViewRange = ViewRangeStateCallBack.getInstance();
        stIn.write();
        NET_OUT_VIEW_RANGE_STATE stOut = new NET_OUT_VIEW_RANGE_STATE();
        stOut.write();
        attachHandle = netsdkApi.CLIENT_AttachViewRangeState(loginHandle, stIn.getPointer(), stOut.getPointer(), 3000);
        if(attachHandle.longValue() != 0){
            System.out.println("AttachViewRangeState succeed, AttachHandle = " + attachHandle.longValue());
        } else {
            System.out.println("AttachViewRangeState failed, error code is " + netsdkApi.CLIENT_GetLastError());
        }
    }
 
    /**
     * 取消订阅云台可视域
     */
    public void DetachViewRangeState() {
 
        if(netsdkApi.CLIENT_DetachViewRangeState(attachHandle)){
            System.out.println("DetachViewRangeState succeed");
        } else {
            System.out.println("DetachViewRangeState failed, error code is " + netsdkApi.CLIENT_GetLastError());
        }
    }
 
    /**
     * 查询云台可视域状态
     */
    public void GetDevStatePtzViewRange() {
 
        int nType = NetSDKLib.NET_DEVSTATE_PTZ_VIEW_RANGE;
        DH_OUT_PTZ_VIEW_RANGE_STATUS ptzState = new DH_OUT_PTZ_VIEW_RANGE_STATUS();
        int nBufLen = ptzState.size();
 
        IntByReference intRetLen = new IntByReference();
        ptzState.write();
        boolean zRet = netsdkApi.CLIENT_QueryRemotDevState(loginHandle, nType, channel,ptzState.getPointer(), nBufLen, intRetLen, 5000);
        ptzState.read();
        if (zRet) {
            System.out.println("QueryDevState-PTZ_VIEW Succeed! \r\n" + "channelcount = " + ptzState.toString());
            System.out.println("nPan:" + ptzState.nPan);
            System.out.println("nTilt:" + ptzState.nTilt);
            System.out.println("nZoom:" + ptzState.nZoom);
        } else {
            System.err.println("QueryDevState-PTZ_VIEW Failed! " + ToolKits.getErrorCode());
        }
    }
 
    public void RunTest()
    {
        System.out.println("Run Test");
        CaseMenu menu = new CaseMenu();
        menu.addItem((new CaseMenu.Item(this , "AttachViewRangeState" , "AttachViewRangeState")));
        menu.addItem((new CaseMenu.Item(this , "DetachViewRangeState" , "DetachViewRangeState")));
        menu.addItem((new CaseMenu.Item(this , "GetDevStatePtzViewRange" , "GetDevStatePtzViewRange")));
        menu.run();
    }
 
    public static void main(String[] args) {
        ViewRangeStateDemo demo = new ViewRangeStateDemo();
        /**登录信息运行时输入**/
        /**登录信息固定**/
        InitTest("172.32.0.13",37777,"admin","admin123");
        demo.RunTest();
        LoginOut();
 
    }
}