1. 简介
Java海康SDK是为了帮助使用Java语言的用户更方便的调用海康威视设备而开发的一套API工具包。对于二次开发人员来说,Java海康SDK是一个不错的选择,该工具包可以实现海康威视设备的实时预览、云台控制、设备分组、设备播放、设备检索等多种功能。
2. Java海康SDK二次开发环境的搭建
2.1 环境要求
Java海康SDK与Java板块的版本有关,开发者们在使用SDK时需注意SDK的版本与JDK版本。目前,海康威视提供的Java SDK兼容JDK 6及以上,喜欢个人PC上可以安装JDK 1.6.0_45及以上版本,同时保证开发机器与设备在同一个局域网内。
2.2 SDK下载
打开海康威视官网,进入开发者中心,选择SDK下载页面,下载Java SDK,并解压到您的工作目录。
2.3 引入SDK的jar包
在您的项目中,添加Java SDK中的jar包,这些jar包都是SDK提供的插件软件,开发者可以直接使用其中的类、函数等进行二次开发。在使用SDK时,您可以通过Eclipse、IDEA等集成开发环境,通过右键单击项目名称?“Build Path”?“Configure Build Path”?“Libraries”?“Add External JARs”,选中SDK中的jar包,导入到自己的项目中。
下面是Java海康SDK获取设备的一段示例代码:
//初始化
HCNetSDK hCNetSDK = HCNetSDK.INSTANCE;
hCNetSDK.NET_DVR_Init();
//登录设备
HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
int lUserID = hCNetSDK.NET_DVR_Login_V30("192.168.1.11", 8000, "admin", "123456", deviceInfo);
//获取设备信息
HCNetSDK.NET_DVR_DEVICECFG_V40 devicecfg = new HCNetSDK.NET_DVR_DEVICECFG_V40();
IntByReference ibrBytesReturned = new IntByReference(0);//获取设备参数
boolean bRet = hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_DEVICECFG_V40, 0, devicecfg.getPointer(), devicecfg.size(), ibrBytesReturned);
3. SDK ??过程中常见问题及解决方法
3.1 Login时返回错误
login操作时,经常会出现返回错误的问题。主要有以下几个原因:
① 密码输入有误。
② 设备和PC不在同一网段。
③用户权限不足。
④设备已被占用等。
需要注意的是,Login时的错误通常是由程序上述错误导致的,需要逐个排查,找出所在问题,将问题解决。
3.2 预览码流过大导致内存溢出
预览码流过大,令内存卡游过载,导致内存溢出。可以通过降低侦码率的方式来避免内存溢出问题,代码如下所示:
//降低侦码率
HCNetSDK.NET_DVR_CLIENTINFO clientinfo = new HCNetSDK.NET_DVR_CLIENTINFO();
HCNetSDK.LPNET_DVR_PREVIEWINFO lpPreviewInfo = new HCNetSDK.LPNET_DVR_PREVIEWINFO();
lpPreviewInfo.lChannel = 1;
lpPreviewInfo.dwStreamType = 0;
lpPreviewInfo.dwLinkMode = 0;
lpPreviewInfo.hPlayWnd = hwndNative;
lpPreviewInfo.bBlocked = true;
lpPreviewInfo.byProtoType = 0;
lpPreviewInfo.dwDisplayBufNum = 1;
HCNetSDK.NET_DVR_COMPRESSIONCFG_V30 lpCompressionCfg = new HCNetSDK.NET_DVR_COMPRESSIONCFG_V30();
IntByReference ibrBytesReturned = new IntByReference(0);
if (!hCNetSDK.NET_DVR_GetDVRConfig(lUserID, HCNetSDK.NET_DVR_GET_COMPRESSCFG_V30, 1, lpCompressionCfg.getPointer(), lpCompressionCfg.size(), ibrBytesReturned)) {
System.out.println("获取动态压缩配置失败!");
} else {
lpCompressionCfg.struNormHighRecordPara.dwVideoFrameRate = 8;
lpCompressionCfg.struNormHighRecordPara.byPicQuality = 0;
lpCompressionCfg.struNormHighRecordPara.byStreamType = 0;
lpCompressionCfg.struNormHighRecordPara.byVideoEncType = 1;
lpCompressionCfg.write();
hCNetSDK.NET_DVR_SetDVRConfig(lUserID, HCNetSDK.NET_DVR_SET_COMPRESSCFG_V30, 1, lpCompressionCfg.getPointer(), lpCompressionCfg.size());
}
//开始预览
nativeId = hCNetSDK.NET_DVR_RealPlay_V40(lUserID, lpPreviewInfo.getPointer(), null);
3.3 获取设备属性时返回错误
获取设备属性时,经常会出现错误的问题,主要以下几个原因:
①没有权限读取属性,因为SDK定义的用户权限不足。
②网络连接异常。
③设备已经异常,需要重启设备。
一般情况下,出现此问题很少,如果发生此类问题,需要通过日志文件从根本上查找设备错误。
4. 总结
Java海康SDK是一个非常适合Java开发者的实用工具包,通过使用该工具包,开发者可以编写各种应用程序,如视频监控、警报库、设备管理等。当然,在使用SDK时,您需要掌握Java语言的基础,并且了解海康威视设备的工作原理和应用场景。本文也仅仅是简单介绍Java海康SDK二次开发的一些基本方法和技巧,希望能够对各位开发者有所帮助。