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


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

  • 相关阅读:
    <JavaScript> 组合继承
    <JavaScript> 稳妥构造函数模式与工厂模式的区别
    <JavaScript> call()、apply()、bind() 的用法
    <JavaScript>可枚举属性与不可枚举属性
    <JavaScript>闭包(closure)
    在MongoDB中实现聚合函数
    (转)如何入门 Python 爬虫
    Python爬虫实战四之抓取淘宝MM照片
    转载:十年驾车经验总结:活着,才是硬道理
    设计模式之单例模式的七种写法
  • 原文地址:https://www.cnblogs.com/G1432291874/p/9346035.html
Copyright © 2020-2023  润新知