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(); } }