海康摄像头的二次开发(java)

时间:2024-02-16 13:29:14

海康摄像头的二次开发(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、效果图
效果图