海康摄像头的二次开发(java)
我第一次接触海康摄像头的二次开发的项目,一开始的时候摸不清套路,走了不少弯路,现在准备把我的一些经验留下来,让大家参考一下。
1、首先到海康的官网下载设备网络SDK:http://www.hikvision.com/cn/download_61.html,下载的时候注意版本号;
2、然后将下载的文件解压后,可以看到Demo示例、库文件、头文件和开发文档以及一个说明文本(注意:txt文档一定要仔细看,拷贝文件也不要出错,要不然后期做项目容易出现错误还不好找);
3、这是我自己写的一个很简陋的项目,如有需要可以去下载:http://download.csdn.net/download/u012492535/10045386,虽然简陋了一点,但是功能还是可以实现的(^▽^);
4、我们做海康的项目之前肯定会先看到这张流程图,里面的虚线部分是可选的,就是可以不必管,只看实线框部分的即可。
我们按照他的流程往下看:
1、初始化设备SDK,对整个网络设备的初始化、内存分配等操作。
代码如下:
HCNetSDK sdk = HCNetSDK.INSTANCE;
sdk.NET_DVR_Init();//返回booleaan值
2、注册设备,实现用户的注册功能,注册成功后,返回的用户ID 作为其他功能操作的唯一标识。
代码如下:
NativeLong user = new NativeLong(-1);// 注册设备
NET_DVR_DEVICEINFO_V30 devinfo = new NET_DVR_DEVICEINFO_V30();
user = sdk.NET_DVR_Login_V30(ipAddress, (short) port, userName,password, devinfo);//返回一个用户编号
3、设备工作状态的获取(参数配置):
代码如下:
NET_DVR_DEVICEINFO_V30 devinfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();// 设备信息
IntByReference ibrBytesReturned = new IntByReference(0);// 获取IP接入配置参数
NET_DVR_CAMERAPARAMCFG_EX struCamcfg = new NET_DVR_CAMERAPARAMCFG_EX();
struCamcfg.write();
Pointer lpIpParaConfig = struCamcfg.getPointer();
boolean flg =sdk.NET_DVR_GetDVRConfig(user,HCNetSDK.NET_DVR_GET_CCDPARAMCFG,
new NativeLong(0xFFFFFFFF), lpIpParaConfig,struCamcfg.size(), ibrBytesReturned);
struCamcfg.read();
4、注销设备:
代码如下:
sdk.NET_DVR_Logout(user);//注销设备
5、释放SDK空间:
代码如下:
sdk.NET_DVR_Cleanup();//释放SDK
6、完整代码如下:
public static void getPicturedisposition(String ip, short port,
String userName, String password) {
// 初始化设备
HCNetSDK sdk = HCNetSDK.INSTANCE;
// 是否初始化成功
if (!sdk.NET_DVR_Init()) {
System.out.println("初始化失败");
return ;
}
// 注册设备
NativeLong user = new NativeLong(-1);
// 设备信息
NET_DVR_DEVICEINFO_V30 devinfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
// 返回一个用户编号
user = sdk.NET_DVR_Login_V30(ip, port, userName, password, devinfo);
int Iuid = user.intValue();
if (Iuid < 0) {
System.out.println("注册失败");
return ;
}
// 设备信息
boolean bool = false;
if (!bool) {
IntByReference ibrBytesReturned = new IntByReference(0);// 获取IP接入配置参数
NET_DVR_CAMERAPARAMCFG_EX struCamcfg = new NET_DVR_CAMERAPARAMCFG_EX();
struCamcfg.write();
Pointer lpIpParaConfig = struCamcfg.getPointer();
boolean flg = sdk.NET_DVR_GetDVRConfig(user,
HCNetSDK.NET_DVR_GET_CCDPARAMCFG,
new NativeLong(0xFFFFFFFF), lpIpParaConfig,
struCamcfg.size(), ibrBytesReturned);
struCamcfg.read();
if (!flg) {
System.out.println(sdk.NET_DVR_GetLastError());
}
// 获取图像参数
System.out.print("亮度是:"
+ struCamcfg.struVideoEffect.byBrightnessLevel);
System.out.print("|对比度是:"
+ struCamcfg.struVideoEffect.byContrastLevel);
System.out.print("|饱和度是:"
+ struCamcfg.struVideoEffect.bySaturationLevel);
System.out.print("|色调是:" + struCamcfg.struVideoEffect.byHueLevel);
System.out.print("|(锐度)清晰度是:"
+ struCamcfg.struVideoEffect.bySharpnessLevel);
System.out.print("|(防补光过曝)使能是:"
+ struCamcfg.struVideoEffect.byEnableFunc);
System.out.print("|强光抑制等级:"
+ struCamcfg.struVideoEffect.byLightInhibitLevel);
System.out
.println("|灰度值域" + struCamcfg.struVideoEffect.byGrayLevel);
}
// 注销设备
sdk.NET_DVR_Logout(user);
// 释放SDK
sdk.NET_DVR_Cleanup();
}
7、效果图