本文主要是介绍java实现海康NVR/DVR设备工作状态获取,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
该功能需要到JNA的知识。
通过查阅海康设备网络SDK编程指南(DVR&NVR)可以知道海康SDK的调用方法都要同过如下过程:
虚线框的流程是可选部分,不会影响其他流程和模块的功能使用。具体的模块说明可以自行参考SDK开发文件。
主要功能代码:
测试例子,因此虚线部分功能不实现
1.初始化设备SDK:对整个网络SDK 系统的初始化,内存预分配等操作。
代码:HCNetSDK sdk = HCNetSDK.INSTANCE;
sdk.NET_DVR_Init();//返回booleaan值
2.注册设备:实现用户的注册功能,注册成功后,返回的用户ID 作为其他功能操作的唯一标识
代码: NativeLong uid=new NativeLong(-1);
NET_DVR_DEVICEINFO_V30 devinfo=new NET_DVR_DEVICEINFO_V30();//设备信息
uid=sdk.NET_DVR_Login_V30((string)IP,(short)PORT,(string)user,string()pwd,devinfo);//返回一个用户编号,同时将设备信息写入devinfo
3.设备工作状态获取(参数配置模块):
代码:NET_DVR_WORKSTATE_V30 devwork=new NET_DVR_WORKSTATE_V30();
sdk.NET_DVR_GetDVRWorkState_V30(uid, devwork);//返回Boolean值,判断是否获取设备能力
IntByReference ibrBytesReturned = new IntByReference(0);//获取IP接入配置参数
NET_DVR_IPPARACFG ipcfg=new NET_DVR_IPPARACFG();
ipcfg.write();
Pointer lpIpParaConfig =ipcfg.getPointer();
sdk.NET_DVR_GetDVRConfig(uid,sdk.NET_DVR_GET_IPPARACFG,new NativeLong(0),lpIpParaConfig,ipcfg.size(),ibrBytesReturned);
ipcfg.read();
4.注销设备:
代码:sdk.NET_DVR_Logout(uid);
5.释放SDK
代码:sdk.NET_DVR_Cleanup();
详细例子:
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 | package ClientDemo; import com.sun.jna.NativeLong; import com.sun.jna.Pointer; import com.sun.jna.ptr.IntByReference; import ClientDemo.HCNetSDK.NET_DVR_DEVICEINFO_V30; import ClientDemo.HCNetSDK.NET_DVR_IPPARACFG; import ClientDemo.HCNetSDK.NET_DVR_WORKSTATE_V30; public class Device_demo { public static void main(String[] args) { // TODO Auto-generated method stub HCNetSDK sdk = HCNetSDK.INSTANCE; if (!sdk.NET_DVR_Init()){ System.out.println( "SDK初始化失败" ); return ; } NativeLong uid= new NativeLong(- 1 ); NET_DVR_DEVICEINFO_V30 devinfo= new NET_DVR_DEVICEINFO_V30(); //设备信息 String ip= "192.168.10.191" ; short port= 8000 ; uid=sdk.NET_DVR_Login_V30(ip,port, "admin" , "hk123456" ,devinfo); //返回一个用户编号,同时将设备信息写入devinfo int Iuid=uid.intValue(); if (Iuid< 0 ){ System.out.println( "设备注册失败" ); return ; } NET_DVR_WORKSTATE_V30 devwork= new NET_DVR_WORKSTATE_V30(); if (!sdk.NET_DVR_GetDVRWorkState_V30(uid, devwork)){ //返回Boolean值,判断是否获取设备能力 System.out.println( "返回设备状态失败" ); } IntByReference ibrBytesReturned = new IntByReference( 0 ); //获取IP接入配置参数 NET_DVR_IPPARACFG ipcfg= new NET_DVR_IPPARACFG(); ipcfg.write(); Pointer lpIpParaConfig =ipcfg.getPointer(); sdk.NET_DVR_GetDVRConfig(uid,sdk.NET_DVR_GET_IPPARACFG, new NativeLong( 0 ),lpIpParaConfig,ipcfg.size(),ibrBytesReturned); ipcfg.read(); System.out.print( "IP地址:" +ip); System.out.println( "|设备状态:" +devwork.dwDeviceStatic); //0正常,1CPU占用率过高,2硬件错误,3未知 //显示模拟通道 for ( int i= 0 ;i< devinfo.byChanNum;i++){ System.out.print( "Camera" +i+ 1 ); //模拟通道号名称 System.out.print( "|是否录像:" +devwork.struChanStatic[i].byRecordStatic); //0不录像,不录像 System.out.print( "|信号状态:" +devwork.struChanStatic[i].bySignalStatic); //0正常,1信号丢失 System.out.println( "|硬件状态:" +devwork.struChanStatic[i].byHardwareStatic); //0正常,1异常 } sdk.NET_DVR_Logout(uid); sdk.NET_DVR_Cleanup(); } } |
输出:
这篇关于java实现海康NVR/DVR设备工作状态获取的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!