//package com.shxy.xyhkcamera; // //import com.sun.jna.Native; //import com.sun.jna.NativeLong; //import com.sun.jna.Pointer; //import com.sun.jna.ptr.IntByReference; // //import java.io.IOException; //import java.io.UnsupportedEncodingException; //import java.text.SimpleDateFormat; //import java.util.Date; // ///** // * @create 2020-07-27-10:42 // */ //public class TestDemo { // static HCNetSDK hCNetSDK = null; // static int lUserID = -1; //用户句柄 // public static flowTestcallback flowcallback; // public static dev_work_state_cb workStateCb; // public static FExceptionCallBack_Imp fExceptionCallBack; // // static class dev_work_state_cb implements HCNetSDK.DEV_WORK_STATE_CB { // public boolean invoke(Pointer pUserdata, int iUserID, HCNetSDK.NET_DVR_WORKSTATE_V40 lpWorkState) { // // lpWorkState.read(); // System.out.println("设备状态:" + lpWorkState.dwDeviceStatic); // for (int i = 0; i < HCNetSDK.MAX_CHANNUM_V40; i++) { // int channel = i + 1; // System.out.println("第" + channel + "通道是否在录像:" + lpWorkState.struChanStatic[i].byRecordStatic); // } // return true; // } // // } // // static class FExceptionCallBack_Imp implements HCNetSDK.FExceptionCallBack { // public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) { // System.out.println("异常事件类型:" + dwType); // return; // } // } // // static class flowTestcallback implements HCNetSDK.FLOWTESTCALLBACK { // public void invoke(int lFlowHandle, HCNetSDK.NET_DVR_FLOW_INFO pFlowInfo, // Pointer pUser) { // pFlowInfo.read(); // System.out.println("发送的流量数据:" + pFlowInfo.dwSendFlowSize); // System.out.println("接收的流量数据:" + pFlowInfo.dwRecvFlowSize); // } // } // // /** // * 动态库加载 // * // * @return // */ // private static boolean createSDKInstance() { // if (hCNetSDK == null) { // synchronized (HCNetSDK.class) { // String strDllPath = ""; // try { // if (osSelect.isWindows()) // //win系统加载SDK库路径 // strDllPath = System.getProperty("user.dir") + "\\lib\\HCNetSDK.dll"; // // else if (osSelect.isLinux()) // //Linux系统加载SDK库路径 // strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so"; // hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class); // } catch (Exception ex) { // System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage()); // return false; // } // } // } // return true; // } // // public static void main(String[] args) throws IOException, InterruptedException { // if (hCNetSDK == null) { // if (!createSDKInstance()) { // System.out.println("Load SDK fail"); // return; // } // } // //linux系统建议调用以下接口加载组件库 // if (osSelect.isLinux()) { // HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256); // HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256); // //这里是库的绝对路径,请根据实际情况修改,注意改路径必须有访问权限 // String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1"; // String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1"; // // System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length()); // ptrByteArray1.write(); // hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer()); // // System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length()); // ptrByteArray2.write(); // hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer()); // // String strPathCom = System.getProperty("user.dir") + "/lib/"; // HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH(); // System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length()); // struComPath.write(); // hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer()); // } // // //SDK初始化,一个程序进程只需要调用一次 // hCNetSDK.NET_DVR_Init(); // // if (fExceptionCallBack == null) { // fExceptionCallBack = new FExceptionCallBack_Imp(); // } // Pointer pUser = null; // if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser)) { // return; // } // System.out.println("设置异常消息回调成功"); // // //启用SDK写日志 // hCNetSDK.NET_DVR_SetLogToFile(3, "./sdkLog", false); // // // //登录设备,每一台设备只需要登录一次 // lUserID = TestDemo.login_V40("10.16.36.13", (short) 8000, "admin", "hik12345"); // // getDeviceStatus(lUserID); //// getIPChannelInfo(lUserID); //// getGisInfo(lUserID); //// getIP(); // Thread.sleep(2000); // //程序退出的时候调用注销登录接口,每一台设备分别调用一次 // if (hCNetSDK.NET_DVR_Logout(lUserID)) { // System.out.println("注销成功"); // } // // //释放SDK资源,程序退出时调用,只需要调用一次 // hCNetSDK.NET_DVR_Cleanup(); // return; // } // // /** // * 设备登录V30 // * // * @param ip 设备IP // * @param port SDK端口,默认设备的8000端口 // * @param user 设备用户名 // * @param psw 设备密码 // */ // public static int login_V30(String ip, short port, String user, String psw) { // HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30(); // int iUserID = hCNetSDK.NET_DVR_Login_V30(ip, port, user, psw, m_strDeviceInfo); // System.out.println("UserID:" + lUserID); // if ((iUserID == -1) || (iUserID == 0xFFFFFFFF)) { // System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); // return iUserID; // } else { // System.out.println(ip + ":设备登录成功!"); // return iUserID; // } // } // // /** // * 设备登录V40 与V30功能一致 // * // * @param ip 设备IP // * @param port SDK端口,默认设备的8000端口 // * @param user 设备用户名 // * @param psw 设备密码 // */ // public static int login_V40(String ip, short port, String user, String psw) { // //注册 // HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();//设备登录信息 // HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();//设备信息 // // String m_sDeviceIP = ip;//设备ip地址 // m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN]; // System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length()); // // String m_sUsername = user;//设备用户名 // m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN]; // System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length()); // // String m_sPassword = psw;//设备密码 // m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN]; // System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length()); // // m_strLoginInfo.wPort = port; // m_strLoginInfo.bUseAsynLogin = false; //是否异步登录:0- 否,1- 是 //// m_strLoginInfo.byLoginMode=1; //ISAPI登录 // m_strLoginInfo.write(); // // int iUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); // if (iUserID == -1) { // System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); // return iUserID; // } else { // System.out.println(ip + ":设备登录成功!"); // return iUserID; // } // } // // //设备在线状态监测 // public static void getDeviceStatus(int iUserID) { // boolean devStatus = hCNetSDK.NET_DVR_RemoteControl(iUserID, HCNetSDK.NET_DVR_CHECK_USER_STATUS, null, 0); // if (devStatus == false) { // System.out.println("设备不在线"); // // } else { // System.out.println("设备在线"); // } // } // // //PC电脑有多网卡,绑定网卡,指定使用的实际网卡 // public static void getIP() { // HCNetSDK.BYTE_TWODIM[] struByteArray = new HCNetSDK.BYTE_TWODIM[16]; // IntByReference pInt = new IntByReference(0); // boolean pEnableBind = false; // if (!hCNetSDK.NET_DVR_GetLocalIP(struByteArray, pInt, pEnableBind)) { // System.out.println("NET_DVR_GetLocalIP失败,错误号:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // int inum = pInt.getValue(); // for (int i = 0; i < inum; i++) { // System.out.println("网卡序号:" + i + ", 网卡IP: " + new String(struByteArray[i].strIP).trim()); // ////选择需要绑定的网卡 // if ("10.16.36.23".equals(new String(struByteArray[i].strIP))) { // hCNetSDK.NET_DVR_SetValidIP(i, true); // } // } // } // } // // //设备抓图 // public void circleGetPic(int iUserID) { // SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); //// String curTime0 = sdf.format(new Date()); // Boolean result = false; // int count = 0; // while (!result) { // try { // Thread.sleep(1 * 1000); //设置暂停的时间 5 秒 // String curTime0 = sdf.format(new Date()); // count++; // String filename = "C:\\PIC\\" + curTime0 + count + ".jpg"; // byte[] fileByte = filename.getBytes("UTF-8"); // HCNetSDK.BYTE_ARRAY byte_array = new HCNetSDK.BYTE_ARRAY(fileByte.length); // byte_array.read(); // byte_array.byValue = fileByte; // byte_array.write(); // // HCNetSDK.NET_DVR_JPEGPARA strJpegParm = new HCNetSDK.NET_DVR_JPEGPARA(); // strJpegParm.read(); // strJpegParm.wPicSize = 2; // strJpegParm.wPicQuality = 0; // Pointer pStrjPegParm = strJpegParm.getPointer(); // strJpegParm.write(); // boolean b_Cap = hCNetSDK.NET_DVR_CaptureJPEGPicture(iUserID, 1, strJpegParm, fileByte); // if (b_Cap == false) { // System.out.println("抓图失败,错误码为:" + hCNetSDK.NET_DVR_GetLastError()); // return; // } // System.out.println(sdf.format(new Date()) + "--循环执行第" + count + "次"); // if (count == 3) { // result = true; // break; // } // } catch (InterruptedException e) { // e.printStackTrace(); // } catch (UnsupportedEncodingException e) { // e.printStackTrace(); // } // } // } // // //端口绑定 // public void bindPort() { // HCNetSDK.NET_DVR_LOCAL_TCP_PORT_BIND_CFG strLocalTcpBind = new HCNetSDK.NET_DVR_LOCAL_TCP_PORT_BIND_CFG(); // strLocalTcpBind.read(); // strLocalTcpBind.wLocalBindTcpMinPort = 30000; // strLocalTcpBind.wLocalBindTcpMaxPort = 30200; // strLocalTcpBind.write(); // Pointer pStrLocalTcoBind = strLocalTcpBind.getPointer(); // if (hCNetSDK.NET_DVR_SetSDKLocalCfg(0, pStrLocalTcoBind) == false) { // System.out.println("绑定失败,错误码为" + hCNetSDK.NET_DVR_GetLastError()); // } // System.out.println("绑定成功"); // } // // //获取设备的基本参数 // public static void getCfg(int iUserID) { // HCNetSDK.NET_DVR_DEVICECFG_V40 m_strDeviceCfg = new HCNetSDK.NET_DVR_DEVICECFG_V40(); // m_strDeviceCfg.dwSize = m_strDeviceCfg.size(); // m_strDeviceCfg.write(); // Pointer pStrDeviceCfg = m_strDeviceCfg.getPointer(); // IntByReference pInt = new IntByReference(0); // boolean b_GetCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_DEVICECFG_V40, // 0Xffffffff, pStrDeviceCfg, m_strDeviceCfg.dwSize, pInt); // if (b_GetCfg == false) { // System.out.println("获取参数失败 错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // System.out.println("获取参数成功"); // m_strDeviceCfg.read(); // System.out.println("设备名称:" + new String(m_strDeviceCfg.sDVRName).trim() + "设备序列号:" + new String(m_strDeviceCfg.sSerialNumber)); // System.out.println("模拟通道个数" + m_strDeviceCfg.byChanNum); // parseVersion(m_strDeviceCfg.dwSoftwareVersion); // parseBuildTime(m_strDeviceCfg.dwSoftwareBuildDate); // parseDSPBuildDate(m_strDeviceCfg.dwDSPSoftwareBuildDate); // // } // // // public static void parseBuildTime(int buildTime) { // int year = ((buildTime & 0XFF << 16) >> 16) + 2000; // int month = (buildTime & 0XFF << 8) >> 8; // int data = buildTime & 0xFF; // System.out.println("Build:" + year + "." + month + "." + data); // // // } // // public static void parseDSPBuildDate(int DSPBuildDate) { // int year = ((DSPBuildDate & 0XFF << 16) >> 16) + 2000; // int month = (DSPBuildDate & 0XFF << 8) >> 8; // int data = DSPBuildDate & 0xFF; // System.out.println("DSPBuildDate:" + year + "." + month + "." + data); // // // } // // //设备版本解析 // public static void parseVersion(int version) { // int firstVersion = (version & 0XFF << 24) >> 24; // int secondVersion = (version & 0XFF << 16) >> 16; // int lowVersion = version & 0XFF; // // System.out.println("firstVersion:" + firstVersion); // System.out.println("secondVersion:" + secondVersion); // System.out.println("lowVersion:" + lowVersion); // } // // //获取设备时间参数 // public void getDevTime(int iUserID) { // HCNetSDK.NET_DVR_TIME m_Time = new HCNetSDK.NET_DVR_TIME(); // Pointer pTime = m_Time.getPointer(); // IntByReference pInt = new IntByReference(0); // boolean b_GetTime = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_TIMECFG, 0xffffffff, pTime, m_Time.size(), pInt); // if (b_GetTime == false) { // System.out.println("获取时间参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // m_Time.read(); // System.out.println("年:" + m_Time.dwYear + "月:" + m_Time.dwMonth + "日:" + m_Time.dwDay + "时:" + m_Time.dwHour + // "分:" + m_Time.dwMinute + "秒:" + m_Time.dwSecond); // } // // //获取设备的图像参数-移动侦测高亮显示 // public static void getPicCfg(int iUserID) { // HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); // strPicCfg.dwSize = strPicCfg.size(); // Pointer pStrPicCfg = strPicCfg.getPointer(); // NativeLong lChannel = new NativeLong(18); // IntByReference pInt = new IntByReference(0); // boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), // pStrPicCfg, strPicCfg.size(), pInt); // if (b_GetPicCfg == false) { // System.out.println("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // strPicCfg.read(); // System.out.println("通道号:" + lChannel); // System.out.println("通道名称:" + strPicCfg.sChanName); // System.out.println("预览的图像是否显示OSD:" + strPicCfg.dwShowOsd); // System.out.println("移动侦测高亮显示是否开启:" + strPicCfg.struMotion.byEnableDisplay); // strPicCfg.read(); // strPicCfg.struMotion.byEnableDisplay = 0; // strPicCfg.write(); // // boolean b_SetPicCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PICCFG_V40, lChannel.intValue(), // pStrPicCfg, strPicCfg.size()); // if (b_SetPicCfg == false) { // System.out.println("设置图像参数移动侦测高亮参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // System.out.println("设置移动侦测高亮参数成功"); // // } // } // // //获取用户参数 // public static void getUsrCfg(int iUserID) throws UnsupportedEncodingException { // HCNetSDK.NET_DVR_USER_V30 usercfg = new HCNetSDK.NET_DVR_USER_V30(); // usercfg.dwSize = usercfg.size(); // Pointer pUserCfg = usercfg.getPointer(); // NativeLong lChannel = new NativeLong(1); // IntByReference pInt = new IntByReference(0); // boolean b_GetUserCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_USERCFG_V30, lChannel.intValue(), // pUserCfg, usercfg.size(), pInt); // if (b_GetUserCfg == false) { // System.out.println("获取用户参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // usercfg.read(); // //System.out.println("用户名称:" + usercfg.struUser[1].sUserName); // System.out.println("name: " + new String(usercfg.struUser[0].sUserName, "GBK").trim()); // System.out.println("password: " + new String(usercfg.struUser[0].sPassword, "GBK").trim()); // // } // // //网络流量检测 // public void netFlowDec(int iUserID) throws InterruptedException { // HCNetSDK.NET_DVR_FLOW_TEST_PARAM struFlowPam = new HCNetSDK.NET_DVR_FLOW_TEST_PARAM(); // struFlowPam.read(); // struFlowPam.dwSize = struFlowPam.size(); // struFlowPam.lCardIndex = 0; // struFlowPam.dwInterval = 1; // struFlowPam.write(); // Pointer pUser = null; // if (flowcallback == null) { // flowcallback = new flowTestcallback(); // } // int FlowHandle = hCNetSDK.NET_DVR_StartNetworkFlowTest(iUserID, struFlowPam, flowcallback, pUser); // if (FlowHandle <= -1) { // System.out.println("开启流量检测失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // System.out.println("开启流量检测成功"); // } // Thread.sleep(20000); // hCNetSDK.NET_DVR_StopNetworkFlowTest(FlowHandle); // } // // //录像起止时间查询 // public static void searchRecordTime(int iUserID) { // HCNetSDK.NET_DVR_RECORD_TIME_SPAN_INQUIRY struRecInq = new HCNetSDK.NET_DVR_RECORD_TIME_SPAN_INQUIRY(); // struRecInq.read(); // struRecInq.dwSize = struRecInq.size(); // struRecInq.byType = 0; // struRecInq.write(); // HCNetSDK.NET_DVR_RECORD_TIME_SPAN struRecSpan = new HCNetSDK.NET_DVR_RECORD_TIME_SPAN(); // //通道号说明:一般IPC/IPD通道号为1,32路以及以下路数的NVR的IP通道通道号从33开始,64路及以上路数的NVR的IP通道通道号从1开始。 // if (hCNetSDK.NET_DVR_InquiryRecordTimeSpan(iUserID, 35, struRecInq, struRecSpan) == false) { // System.out.println("录像起止时间查询失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // System.out.println("录像起止时间查询成功"); // struRecSpan.read(); // System.out.println("开启时间:" + "年:" + struRecSpan.strBeginTime.dwYear + "\n"); // System.out.println("开启时间:" + "月:" + struRecSpan.strBeginTime.dwMonth + "\n"); // System.out.println("开启时间:" + "日:" + struRecSpan.strBeginTime.dwDay + "\n"); // System.out.println("开启时间:" + "时:" + struRecSpan.strBeginTime.dwHour + "\n"); // System.out.println("停止时间:" + "年:" + struRecSpan.strEndTime.dwYear + "\n"); // System.out.println("停止时间:" + "月:" + struRecSpan.strEndTime.dwMonth + "\n"); // System.out.println("停止时间:" + "日:" + struRecSpan.strEndTime.dwDay + "\n"); // System.out.println("停止时间:" + "时:" + struRecSpan.strEndTime.dwHour + "\n"); // } // } // // //月历录像查询 // public static void getRecMonth(int iUserID) { // HCNetSDK.NET_DVR_MRD_SEARCH_PARAM struMrdSeaParam = new HCNetSDK.NET_DVR_MRD_SEARCH_PARAM(); // struMrdSeaParam.read(); // struMrdSeaParam.dwSize = struMrdSeaParam.size(); // struMrdSeaParam.wYear = 2021; // struMrdSeaParam.byMonth = 1; // //通道号说明:一般IPC/IPD通道号为1,32路以及以下路数的NVR的IP通道通道号从33开始,64路及以上路数的NVR的IP通道通道号从1开始。 // struMrdSeaParam.struStreamInfo.dwChannel = 33; // struMrdSeaParam.write(); // HCNetSDK.NET_DVR_MRD_SEARCH_RESULT struMrdSeaResu = new HCNetSDK.NET_DVR_MRD_SEARCH_RESULT(); // struMrdSeaResu.read(); // struMrdSeaResu.dwSize = struMrdSeaResu.size(); // struMrdSeaResu.write(); // IntByReference list = new IntByReference(0); // boolean b_GetResult = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, HCNetSDK.NET_DVR_GET_MONTHLY_RECORD_DISTRIBUTION, 0, struMrdSeaParam.getPointer(), // struMrdSeaParam.size(), list.getPointer(), struMrdSeaResu.getPointer(), struMrdSeaResu.size()); // if (b_GetResult == false) { // System.out.println("月历录像查询失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // struMrdSeaResu.read(); // for (int i = 0; i <= 32; i++) { // int day = i + 1; // System.out.println("" + day + "号是否录像文件" + struMrdSeaResu.byRecordDistribution[i]); // } // } // } // // //球机GIS信息获取 // public static void getGisInfo(int iUserID) { // HCNetSDK.NET_DVR_STD_CONFIG struStdCfg = new HCNetSDK.NET_DVR_STD_CONFIG(); // HCNetSDK.NET_DVR_GIS_INFO struGisInfo = new HCNetSDK.NET_DVR_GIS_INFO(); // struStdCfg.read(); // IntByReference lchannel = new IntByReference(1); // struStdCfg.lpCondBuffer = lchannel.getPointer(); // struStdCfg.dwCondSize = 4; // struStdCfg.lpOutBuffer = struGisInfo.getPointer(); // struStdCfg.dwOutSize = struGisInfo.size(); // struStdCfg.write();//设置前之前要write() // boolean getSTDConfig = hCNetSDK.NET_DVR_GetSTDConfig(iUserID, HCNetSDK.NET_DVR_GET_GISINFO, struStdCfg); // if (getSTDConfig == false) { // System.out.println("查询GIS信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // struGisInfo.read(); // System.out.println("查询成功\n"); // System.out.println(struGisInfo.struPtzPos.fPanPos + "\n"); // System.out.println(struGisInfo.struPtzPos.fTiltPos + "\n"); // System.out.println(struGisInfo.struPtzPos.fZoomPos + "\n"); // System.out.println(struGisInfo.fHorizontalValue); // System.out.println(struGisInfo.fVerticalValue); // } // // } // // //球机PTZ参数获取设置 // public static void setPTZcfg(int iUserID) { // HCNetSDK.NET_DVR_PTZPOS struPtTZPos = new HCNetSDK.NET_DVR_PTZPOS(); // IntByReference pUsers = new IntByReference(1); // boolean b_GetPTZ = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZPOS, 1, struPtTZPos.getPointer(), struPtTZPos.size(), pUsers); // if (b_GetPTZ == false) { // System.out.println("获取PTZ坐标信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // struPtTZPos.read(); // int wPanPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wPanPos).trim()); // float WPanPos = wPanPos * 0.1f; // int wTiltPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wTiltPos).trim()); // float WTiltPos = wTiltPos * 0.1f; // int wZoomPos = Integer.parseInt(Integer.toHexString(struPtTZPos.wZoomPos).trim()); // float WZoomPos = wZoomPos * 0.1f; // System.out.println("P参数:" + WPanPos + "\n"); // System.out.println("T参数:" + wTiltPos + "\n"); // System.out.println("Z参数:" + wZoomPos + "\n"); // } //// struPtTZPos.wAction = 2; // //本结构体中的wAction参数是设置时的操作类型,因此获取时该参数无效。实际显示的PTZ值是获取到的十六进制值的十分之一, // // 如获取的水平参数P的值是0x1750,实际显示的P值为175度;获取到的垂直参数T的值是0x0789,实际显示的T值为78.9度,如果T未负值,获取的值减去360 // // 获取到的变倍参数Z的值是0x1100,实际显示的Z值为110倍。 //// String pHex="13669"; //// int pInter=Integer.parseInt(pHex); //// short pInter = 13669; //// System.out.println(pInter); //// struPtTZPos.wPanPos = (short) pInter; //// struPtTZPos.write(); //// boolean b_SetPTZ = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PTZPOS, 1, struPtTZPos.getPointer(), struPtTZPos.size()); //// if (b_GetPTZ == false) { //// System.out.println("设置PTZ坐标信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); //// } else { //// //// System.out.println("设置PTZ成功"); //// } // // } // // //设置云台锁定信息 // public static void setPTZLOCKCFG(int iUserID) { // HCNetSDK.NET_DVR_PTZ_LOCKCFG struPtzLockCfg = new HCNetSDK.NET_DVR_PTZ_LOCKCFG(); // struPtzLockCfg.dwSize = struPtzLockCfg.size(); // Pointer pStrPtzLockCfg = struPtzLockCfg.getPointer(); // NativeLong lChannel = new NativeLong(1); // IntByReference pInt = new IntByReference(0); // boolean b_GetPtzLockCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZLOCKCFG, lChannel.intValue(), // pStrPtzLockCfg, struPtzLockCfg.size(), pInt); // if (b_GetPtzLockCfg == false) { // System.out.println("获取云台锁定信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // struPtzLockCfg.read(); // System.out.println("通道号:" + lChannel); // System.out.println("云台锁定控制状态为:" + struPtzLockCfg.byWorkMode); // // struPtzLockCfg.read(); // struPtzLockCfg.byWorkMode = 1; //0- 解锁,1- 锁定 // struPtzLockCfg.write(); // boolean b_SetPtzLockCfg = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_PTZLOCKCFG, lChannel.intValue(), // pStrPtzLockCfg, struPtzLockCfg.size()); // if (b_SetPtzLockCfg == false) { // System.out.println("设置云台锁定信息失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } else { // System.out.println("设置云台锁定信息成功"); // System.out.println("云台锁定控制状态当前为:" + struPtzLockCfg.byWorkMode); // } // } // //// public static void PTZControlOther(int iUserID){ //// boolean b_ptzcontrol=hCNetSDK.NET_DVR_PTZControl_Other(iUserID,1,HCNetSDK.TILT_UP,0); //// //// if( b_ptzcontrol==false){ //// System.out.println("云台向上转动失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); //// }else{ //// System.out.println("设置向上转动成功"); //// } // // // } // // //获取(设置)前端参数(扩展) // public static void getCameraPara(int iUserID) { // HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX struCameraParam = new HCNetSDK.NET_DVR_CAMERAPARAMCFG_EX(); // Pointer pstruCameraParam = struCameraParam.getPointer(); // IntByReference ibrBytesReturned = new IntByReference(0); // boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_CCDPARAMCFG_EX, 1, pstruCameraParam, struCameraParam.size(), ibrBytesReturned); // if (!b_GetCameraParam) { // System.out.println("获取前端参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // struCameraParam.read(); // System.out.println("是否开启旋转:" + struCameraParam.struCorridorMode.byEnableCorridorMode); // // struCameraParam.struCorridorMode.byEnableCorridorMode = 1; // struCameraParam.write(); // boolean b_SetCameraParam = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_CCDPARAMCFG_EX, 1, pstruCameraParam, struCameraParam.size()); // if (!b_SetCameraParam) { // System.out.println("设置前端参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // struCameraParam.read(); // System.out.println("设置成功"); // } // // //获取快球聚焦模式信息。 // public static void getFocusMode(int iUserID) { // HCNetSDK.NET_DVR_FOCUSMODE_CFG struFocusMode = new HCNetSDK.NET_DVR_FOCUSMODE_CFG(); // struFocusMode.read(); // struFocusMode.dwSize = struFocusMode.size(); // struFocusMode.write(); // Pointer pFocusMode = struFocusMode.getPointer(); // IntByReference ibrBytesReturned = new IntByReference(0); // boolean b_GetCameraParam = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_FOCUSMODECFG, 1, pFocusMode, struFocusMode.size(), ibrBytesReturned); // if (!b_GetCameraParam) { // System.out.println("获取快球聚焦模式失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // struFocusMode.read(); // System.out.println("聚焦模式:" + struFocusMode.byFocusMode); // struFocusMode.byFocusMode = 1; // struFocusMode.byFocusDefinitionDisplay = 1; // struFocusMode.byFocusSpeedLevel = 3; // struFocusMode.write(); // boolean b_SetCameraParam = hCNetSDK.NET_DVR_SetDVRConfig(iUserID, HCNetSDK.NET_DVR_SET_FOCUSMODECFG, 1, pFocusMode, struFocusMode.size()); // if (!b_SetCameraParam) { // System.out.println("设置快球聚焦模式失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // struFocusMode.read(); // System.out.println("设置成功"); // } // // //获取IP通道 // public static void getIPChannelInfo(int iUserID) throws UnsupportedEncodingException { // IntByReference ibrBytesReturned = new IntByReference(0);//获取IP接入配置参数 // HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfg = new HCNetSDK.NET_DVR_IPPARACFG_V40(); // m_strIpparaCfg.write(); // //lpIpParaConfig 接收数据的缓冲指针 // Pointer lpIpParaConfig = m_strIpparaCfg.getPointer(); // boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_IPPARACFG_V40, 0, lpIpParaConfig, m_strIpparaCfg.size(), ibrBytesReturned); // m_strIpparaCfg.read(); // System.out.println("起始数字通道号:" + m_strIpparaCfg.dwStartDChan); // // for (int iChannum = 0; iChannum < m_strIpparaCfg.dwDChanNum; iChannum++) { // int channum = iChannum + m_strIpparaCfg.dwStartDChan; // HCNetSDK.NET_DVR_PICCFG_V40 strPicCfg = new HCNetSDK.NET_DVR_PICCFG_V40(); // strPicCfg.dwSize = strPicCfg.size(); // strPicCfg.write(); // Pointer pStrPicCfg = strPicCfg.getPointer(); // NativeLong lChannel = new NativeLong(channum); // IntByReference pInt = new IntByReference(0); // boolean b_GetPicCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_PICCFG_V40, lChannel.intValue(), // pStrPicCfg, strPicCfg.size(), pInt); //// if (b_GetPicCfg == false) { //// System.out.println("获取图像参数失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); //// } // strPicCfg.read(); // m_strIpparaCfg.struStreamMode[iChannum].read(); // if (m_strIpparaCfg.struStreamMode[iChannum].byGetStreamType == 0) { // m_strIpparaCfg.struStreamMode[iChannum].uGetStream.setType(HCNetSDK.NET_DVR_IPCHANINFO.class); // m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.read(); // // System.out.println("--------------第" + (iChannum + 1) + "个通道------------------"); // int channel = m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPID + m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byIPIDHigh * 256; // System.out.println("channel:" + channel); // if (channel > 0) { // System.out.println("ip: " + new String(m_strIpparaCfg.struIPDevInfo[channel - 1].struIP.sIpV4).trim()); // } // System.out.println("name: " + new String(strPicCfg.sChanName, "GBK").trim()); // if (m_strIpparaCfg.struStreamMode[iChannum].uGetStream.struChanInfo.byEnable == 1) { // System.out.println("IP通道" + channum + "在线"); // // } else { // // System.out.println("IP通道" + channum + "不在线"); // // } // } // } // } // // //定时巡检设备 // public static void regularInspection() { // HCNetSDK.NET_DVR_CHECK_DEV_STATE struCheckStatus = new HCNetSDK.NET_DVR_CHECK_DEV_STATE(); // struCheckStatus.read(); // struCheckStatus.dwTimeout = 1000; //定时检测设备工作状态,单位:ms,0表示使用默认值(30000),最小值为1000 // if (workStateCb == null) { // workStateCb = new dev_work_state_cb(); // } // struCheckStatus.fnStateCB = workStateCb; // struCheckStatus.write(); // boolean b_state = hCNetSDK.NET_DVR_StartGetDevState(struCheckStatus); // if (!b_state) { // System.out.println("定时巡检设备状态失败:" + hCNetSDK.NET_DVR_GetLastError()); // } // } // // //获取高精度PTZ绝对位置配置,一般热成像设备支持 // public static void getPTZAbsoluteEx(int iUserID) { // HCNetSDK.NET_DVR_STD_CONFIG struSTDcfg = new HCNetSDK.NET_DVR_STD_CONFIG(); // HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG struPTZ = new HCNetSDK.NET_DVR_PTZABSOLUTEEX_CFG(); // struSTDcfg.read(); // IntByReference channel = new IntByReference(1); // struSTDcfg.lpCondBuffer = channel.getPointer(); // struSTDcfg.dwCondSize = 4; // struSTDcfg.lpOutBuffer = struPTZ.getPointer(); // struSTDcfg.dwOutSize = struPTZ.size(); // struSTDcfg.lpInBuffer = Pointer.NULL; // struSTDcfg.dwInSize = 0; // struSTDcfg.write(); // boolean bGetPTZ = hCNetSDK.NET_DVR_GetSTDConfig(iUserID, HCNetSDK.NET_DVR_GET_PTZABSOLUTEEX, struSTDcfg); // if (bGetPTZ == false) { // System.out.println("获取PTZ参数错误,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // return; // } // struPTZ.read(); // System.out.println("焦距范围:" + struPTZ.dwFocalLen); // System.out.println("聚焦参数:" + struPTZ.struPTZCtrl.dwFocus); // return; // } // // //获取GB28181参数 // public static void getGB28181Info(int iUserID) { // // HCNetSDK.NET_DVR_STREAM_INFO streamInfo = new HCNetSDK.NET_DVR_STREAM_INFO(); // streamInfo.read(); // streamInfo.dwSize = streamInfo.size(); //设置结构体大小 // streamInfo.dwChannel = 1; //设置通道 // streamInfo.write(); // Pointer lpInBuffer = streamInfo.getPointer(); // HCNetSDK.NET_DVR_GBT28181_CHANINFO_CFG gbt28181ChaninfoCfg = new HCNetSDK.NET_DVR_GBT28181_CHANINFO_CFG(); // gbt28181ChaninfoCfg.read(); // gbt28181ChaninfoCfg.dwSize = gbt28181ChaninfoCfg.size(); // gbt28181ChaninfoCfg.write(); // Pointer lpOutBuffer = gbt28181ChaninfoCfg.getPointer(); // IntByReference lpBytesReturned = new IntByReference(0); // //3251对应它的宏定义 // boolean bRet = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, 3251, 1, lpInBuffer, // streamInfo.size(), lpBytesReturned.getPointer(), lpOutBuffer, gbt28181ChaninfoCfg.size()); // gbt28181ChaninfoCfg.read(); // // if (bRet == false) { // System.out.println("获取失败,错误码:" + hCNetSDK.NET_DVR_GetLastError()); // return; // } // } // // //获取码流加密信息 // public static void getAESInfo(int iUserID) { // HCNetSDK.NET_DVR_AES_KEY_INFO net_dvr_aes_key_info = new HCNetSDK.NET_DVR_AES_KEY_INFO(); // net_dvr_aes_key_info.read(); // Pointer pnet_dvr_aes_key_info = net_dvr_aes_key_info.getPointer(); // IntByReference pInt = new IntByReference(0); // boolean b_GetCfg = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_AES_KEY, // 0Xffffffff, pnet_dvr_aes_key_info, net_dvr_aes_key_info.size(), pInt); // if (b_GetCfg == false) { // System.out.println("获取码流加密失败 错误码:" + hCNetSDK.NET_DVR_GetLastError()); // } // System.out.println("获取码流加密信息成功"); // // // } // // //设置球机预置点 // public static void getCruisePoint(int iUserID) { // HCNetSDK.NET_DVR_CRUISEPOINT_COND struCruisepointCond = new HCNetSDK.NET_DVR_CRUISEPOINT_COND(); // struCruisepointCond.read(); // struCruisepointCond.dwSize = struCruisepointCond.size(); // struCruisepointCond.dwChan = 1; // struCruisepointCond.wRouteNo = 1; // struCruisepointCond.write(); // // HCNetSDK.NET_DVR_CRUISEPOINT_V50 struCruisepointV40 = new HCNetSDK.NET_DVR_CRUISEPOINT_V50(); // struCruisepointV40.read(); // struCruisepointV40.dwSize = struCruisepointV40.size(); // struCruisepointV40.write(); // // // 错误信息列表 // IntByReference pInt = new IntByReference(0); // Pointer lpStatusList = pInt.getPointer(); // // boolean flag = hCNetSDK.NET_DVR_GetDeviceConfig(iUserID, 6714, 1, // struCruisepointCond.getPointer(), struCruisepointCond.size(), lpStatusList, struCruisepointV40.getPointer(), struCruisepointV40.size()); // if (flag == false) { // int iErr = hCNetSDK.NET_DVR_GetLastError(); // System.out.println("NET_DVR_STDXMLConfig失败,错误号:" + iErr); // return; // } // struCruisepointV40.read(); // // // } // // //抓图保存到缓冲区 // public static void getPictoPointer(int iUserID) { // HCNetSDK.NET_DVR_JPEGPARA jpegpara = new HCNetSDK.NET_DVR_JPEGPARA(); // jpegpara.read(); // jpegpara.wPicSize = 255; // jpegpara.wPicQuality = 0; // jpegpara.write(); // HCNetSDK.BYTE_ARRAY byte_array = new HCNetSDK.BYTE_ARRAY(10 * 1024 * 1024); // IntByReference ret = new IntByReference(0); // boolean b = hCNetSDK.NET_DVR_CaptureJPEGPicture_NEW(iUserID, 1, jpegpara, byte_array.getPointer(), byte_array.size(), ret); // if (b == false) { // System.out.println("抓图失败:" + hCNetSDK.NET_DVR_GetLastError()); // return; // } // byte_array.read(); // System.out.println("抓图成功"); // return; // } // // /** // * 获取报警主机RS485参数 // * // * @param lUserID // */ // public static void getRs485Cfg(int lUserID) { // HCNetSDK.NET_DVR_ALARM_RS485CFG rs485CFG = new HCNetSDK.NET_DVR_ALARM_RS485CFG(); // rs485CFG.dwSize = rs485CFG.size(); // Pointer pointer = rs485CFG.getPointer(); // IntByReference pInt1 = new IntByReference(0); // rs485CFG.write(); // boolean bGetRs485 = hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_ALARM_RS485CFG, 3, pointer, rs485CFG.dwSize, pInt1); // if (!bGetRs485) { // System.out.println("获取报警主机RS485参数失败!错误号:" + hCNetSDK.NET_DVR_GetLastError()); // return; // } // rs485CFG.read(); // return; // // } // // public static void getRs485SlotInfo(int iUserID) { // HCNetSDK.NET_DVR_ALARMHOST_RS485_SLOT_CFG strRs485SlotCFG = new HCNetSDK.NET_DVR_ALARMHOST_RS485_SLOT_CFG(); // strRs485SlotCFG.dwSize = strRs485SlotCFG.size(); // Pointer pRs485SlotCFG = strRs485SlotCFG.getPointer(); // IntByReference pInt1 = new IntByReference(0); // strRs485SlotCFG.write(); // String Schannel = "0000000100000001"; //高2字节表示485通道号,低2字节表示槽位号,都从1开始 // int channel = Integer.parseInt(Schannel, 2); // boolean bRs485Slot = hCNetSDK.NET_DVR_GetDVRConfig(iUserID, HCNetSDK.NET_DVR_GET_ALARMHOST_RS485_SLOT_CFG, channel, pRs485SlotCFG, strRs485SlotCFG.dwSize, pInt1); // if (!bRs485Slot) { // System.out.println("获取报警主机RS485槽位参数失败!错误号:" + hCNetSDK.NET_DVR_GetLastError()); // return; // } // strRs485SlotCFG.read(); // return; // // } // // //} // //