JAVA 对 海康SDK二次开发

天涯浪子 提交于 2019-11-28 02:12:45

由于项目要求需要使用海康摄像头 就去官网下了sdk ,但是不知道咋搞啊    又下了demo 解压以后发现java demo 这个欢喜 不用看其他开发语言了,赶紧导入并按知道添加动态库 运行,靠报错 无法加载动态库Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'PlayCtrl': ÕҲ»µ½ָ¶¨当然 sdk也报错Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'HCNetSDK: ÕҲ»µ½ָ然后按官网的方法各种尝试  差点把电脑搞费喽 也没搞好,尼玛,看来还得自己想办法,还好 最后搞定了    

 最简单有效的方法就是换开发环境 32位,使用32位jdk和eclipse 以后运行 没有任何错误,然后按demo 摘代码 实现预览

// 初始化
        initfalse = hcNetSDK.NET_DVR_Init();// 初始化

        if (initfalse) {
            System.out.println("初始化成功");
        }

        // 注册设备
        HCNetSDK.NET_DVR_DEVICEINFO_V30 strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V30();
        Unitls.HCNetSDK.NET_DVR_USER_LOGIN_INFO struLoginInfo = new Unitls.HCNetSDK.NET_DVR_USER_LOGIN_INFO();
        Unitls.HCNetSDK.NET_DVR_DEVICEINFO_V40 struDeviceInfo = new Unitls.HCNetSDK.NET_DVR_DEVICEINFO_V40();
        String sDeviceIP = "192.0.0.64";
        String passwordFieldPwd = "1234asdf";
        String textFieldUserName = "admin";
        int iPort = 8000;
        for (int i = 0; i < sDeviceIP.length(); i++) {
            struLoginInfo.sDeviceAddress[i] = (byte) sDeviceIP.charAt(i);
        }
        for (int i = 0; i < passwordFieldPwd.length(); i++) {
            struLoginInfo.sPassword[i] = (byte) passwordFieldPwd.charAt(i);
        }
        for (int i = 0; i < textFieldUserName.length(); i++) {
            struLoginInfo.sUserName[i] = (byte) textFieldUserName.charAt(i);
        }
        struLoginInfo.wPort = (short) iPort;

        nlUserID = hcNetSDK.NET_DVR_Login_V40(struLoginInfo, struDeviceInfo);

        lUserID = nlUserID.longValue();
        if (lUserID >= 0) {
            System.out.println("登陆注册成功");
        }

        strPreviewInfo = new HCNetSDK.NET_DVR_PREVIEWINFO();
        strPreviewInfo.lChannel = new NativeLong(1);

        HWND hwnd = new HWND(Native.getComponentPointer(this)); // 获取窗口语柄

        strPreviewInfo.hPlayWnd = hwnd;
        StartPlay(nlUserID, strPreviewInfo);

    }

    // stop play
    public void StopPlay() {

        // 停止预览
        hcNetSDK.NET_DVR_StopRealPlay(m_lPreviewHandle);
        // 注销用户
        hcNetSDK.NET_DVR_Logout(nlUserID);
        // 释放SDK资源
        hcNetSDK.NET_DVR_Cleanup();
        this.repaint();

    }

    // 开始 预览
    private <NET_DVR_GetLastError> void StartPlay(NativeLong lUserId, HCNetSDK.NET_DVR_PREVIEWINFO struPreviewInfo) {

        // HWND hwnd = new HWND(Native.getComponentPointer(this)); // 获取窗口语柄
        // struPreviewInfo.hPlayWnd = hwnd;
        m_lPreviewHandle = hcNetSDK.NET_DVR_RealPlay_V40(lUserId, struPreviewInfo, null, null);

        // 预览出错 打印错误代码
        if (m_lPreviewHandle.longValue() == -1) {
            hcNetSDK.NET_DVR_GetLastError();
            System.out.println(hcNetSDK.NET_DVR_GetLastError() + "----错误码是啥");

        }

    }

到此预览成功  还有一点就是获取窗口语柄  一定要注意不要传不显示的控件  我之前用java拼的窗口 预留了jpanel  但是无法显示  最后没办法 只好又写个窗口 想办法与主窗口绑定就可以了  就到这里把

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!