该功能需要到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();
详细例子:
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();
}
}
输出:
原文:http://www.cnblogs.com/qtblog/p/5383769.html