Java海康SDK二次开发的高效工作流程

Java海康SDK二次开发的高效工作流程

Java海康SDK是针对海康威视高清网络摄像机、高清数字录像机、网络视频服务器等进行远程访问和控制的开发工具包。在进行二次开发时,了解高效工作流程可以提高开发效率和代码质量。

1. SDK的获取和安装

在进行二次开发之前,需要先获得Java海康SDK并进行安装配置。

从海康威视的官网下载Java SDK开发包,并参考SDK提供的《Java Interface Developer‘s Guide》的安装配置章节进行配置。

子标题1:SDK框架介绍

Java海康SDK提供了三个主要功能模块:设备接口模块、流媒体接口模块和红外接口模块。

SDK框架如下:

├── HCNetSDK.jar

├── lib

│ └── libhcnetsdk.so

└── PlayerSDK.jar

其中,HCNetSDK.jar提供设备、报警等功能模块的接口;PlayerSDK.jar提供音视频播放、抓图等接口;libhcnetsdk.so是Linux动态链接库。

子标题2:SDK使用注意事项

在使用Java海康SDK时,需要注意以下几点:

1. SDK基于JNI(Java Native Interface)技术开发,需要进行系统相关配置。可以参考SDK提供的文档进行相关配置。

2. SDK中的接口都是同步的,调用接口时要注意不要阻塞主线程。

3. SDK提供了NET_DVR_SetExceptionCallBack_V30()函数来设置异常回调函数,能够通过回调函数获知SDK运行时的异常状态。

2. SDK开发流程

在进行二次开发时,可以按照以下流程进行:

1. 导入SDK提供的jar包(HCNetSDK.jar和PlayerSDK.jar)。

2. 实现SDK Callback函数,处理海康设备发送的通知。

3. 连接海康设备,并进行登录。

4. 进行设备操作,例如:抓图、录像、控制云台等。

5. 登出并断开与设备的连接。

子标题1:设备操作

SDK提供了一系列设备操作接口,包括连接设备、登录设备、配置设备参数、控制设备等。

以下代码示例展示了如何通过SDK登录设备,并获取设备通道数:

public class TestSDK {

static HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;

private static NativeLong lUserId;//lUserID是NET_DVR_Login_V40的返回值

public static void main(String[] args) {

//初始化

boolean initSuc = hCNetSDK.NET_DVR_Init();

if(initSuc != true) {

System.out.println("初始化失败");

return;

}

//设置连接超时和响应超时时间

hCNetSDK.NET_DVR_SetConnectTime(2000,1);//默认为3000,建议值2000-5000毫秒

hCNetSDK.NET_DVR_SetReconnect(10000,true);

//登录设备

HCNetSDK.NET_DVR_DEVICEINFO_V30 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();

lUserId = hCNetSDK.NET_DVR_Login_V40("10.0.0.2", (short)8000, "admin", "password", m_strDeviceInfo);

if (lUserId.longValue() < 0) {

System.err.println("登陆失败,错误码为"+hCNetSDK.NET_DVR_GetLastError());

hCNetSDK.NET_DVR_Cleanup();

return;

}

//获取设备通道数

HCNetSDK.NET_DVR_IPPARACFG_V40 m_strIpparaCfgV40 = new HCNetSDK.NET_DVR_IPPARACFG_V40();

IntByReference ibrBytesReturned = new IntByReference(0);

boolean getDVRConfigSuc = hCNetSDK.NET_DVR_GetDVRConfig(lUserId, HCNetSDK.NET_DVR_GET_IPPARACFG_V40, new NativeLong(-1), m_strIpparaCfgV40, m_strIpparaCfgV40.size(), ibrBytesReturned);

if (!getDVRConfigSuc) {

System.err.println("获取设备失败,错误码为:"+hCNetSDK.NET_DVR_GetLastError());

hCNetSDK.NET_DVR_Logout(lUserId);

hCNetSDK.NET_DVR_Cleanup();

return;

}

System.out.println("设备通道数为:"+m_strIpparaCfgV40.dwMaxCameraNum);

//注销登录

hCNetSDK.NET_DVR_Logout(lUserId);

hCNetSDK.NET_DVR_Cleanup();

}

}

子标题2:回调函数

在连接设备和登录设备时,可以设置回调函数来处理设备发来的通知信息。

以下代码示例展示了如何通过SDK设置报警回调函数,并打印报警信息到控制台:

public class TestCallback implements HCNetSDK.FMSGCallBack_V31 {

public void invoke(NativeLong lCommand, HCNetSDK.NET_DVR_ALARMER pAlarmer, Pointer pAlarmInfo, int dwBufLen, Pointer pUser){

System.out.println("收到报警信息,lCommand为:"+lCommand);

switch(lCommand.intValue())

{

case HCNetSDK.COMM_ALARM_V40:

HCNetSDK.NET_DVR_ALARMINFO_V40 struAlarmInfoV40 = new HCNetSDK.NET_DVR_ALARMINFO_V40();

struAlarmInfoV40.write();

Pointer pInfoV40 = struAlarmInfoV40.getPointer();

pInfoV40.write(0, pAlarmInfo.getByteArray(0, struAlarmInfoV40.size()), 0, struAlarmInfoV40.size());

struAlarmInfoV40.read();

System.out.println("报警信息类型为:"+struAlarmInfoV40.struAlarmFixedHeader.dwAlarmType);

break;

default:

System.out.println("其他报警信息,lCommand为:"+lCommand);

break;

}

}

}

//设置异常回调函数,en异常类型见HCNetSDK.java中定义

boolean setExceptionCallBack = hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, null, new ExceptionCallBack());

if (setExceptionCallBack != true)

{

System.err.println("NET_DVR_SetExceptionCallBack_V30失败!");

hCNetSDK.NET_DVR_Logout(lUserId);

hCNetSDK.NET_DVR_Cleanup();

return;

}

//设置报警回调函数

TestCallback fMSFCallBack = new TestCallback();

boolean setDVRMessageCallBack_V31 = hCNetSDK.NET_DVR_SetDVRMessageCallBack_V31(fMSFCallBack);

if (setDVRMessageCallBack_V31 != true)

{

System.err.println("设置回调函数失败!");

hCNetSDK.NET_DVR_Logout(lUserId);

hCNetSDK.NET_DVR_Cleanup();

return;

}

3. 开发工具推荐

在进行Java海康SDK二次开发时,推荐使用以下工具:

1. IDE:Eclipse或者IntelliJ IDEA。

2. 调试工具:JD-GUI,用于反编译SDK提供的动态链接库。

3. Mock工具:Mockito或PowerMock,用于快速编写单元测试。

通过使用这些工具,可以提高开发效率和代码质量。

4. 总结

本文介绍了Java海康SDK二次开发的高效工作流程,主要包括SDK的获取和安装、SDK开发流程、SDK使用注意事项以及开发工具推荐。掌握这些知识可以帮助开发者快速进行二次开发并提高开发效率。

后端开发标签