从零开始的Java海康SDK二次开发入门教程

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二次开发的一些基本方法和技巧,希望能够对各位开发者有所帮助。

后端开发标签