该功能需要到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();
}
}
|
输出: