Linux下海康威视sdk调用总结

公司需要在项目里调用到海康威视的布防撤防接口,海康开发文档在官网上可以下载到,本地Windows环境下能跑通,测试类也通过了,放到服务器上街开始报错,记录一下,也许有人和我一样的问题,希望有更好的办法的朋友能给予建议~

主要原因就是自己知识不足,第一次接触到jna调用动态库,甚至不清楚.dll/.so的区别【大神就不要骂我了╭(╯^╰)╮

Windows环境下的就不说了,官方的HCNetSDK.java就可以直接用,主要是Linux环境下,要用到官网提供的sdk for Linux,

网址:https://www.hikvision.com/cn/download_more_403.html#prettyPhoto

根据sdk文档目录下的

Linux下海康威视sdk调用总结_第1张图片

Linux下海康威视sdk调用总结_第2张图片

按照第一种方法配置(第二种没有试),

同样的用到LinuxJavaDemo\src\test下的HCNetSDK.java,但是

HCNetSDK INSTANCE = (HCNetSDK) Native.loadLibrary("hcnetsdk",
            HCNetSDK.class);

会一直找不到对应的.so文件,最后只好在服务器上专门建了文件夹存放了开发包下lib目录下的所有文件,包括LinuxJavaDemo下的jna.jar和examples.jar,同时因为需要在Windows下开发和调试,又整合了swagger,所以写了接口来调用,把官方的HCNetSDK.java中调用对应的库文件的代码删了,直接在实现类里判断当前系统,再去加载对应的库文件: 

public class HCNetServiceImpl implements HCNetService {
    private static HCNetSDK hcNetSDK = null;
    private HCNetSDK.NET_DVR_DEVICEINFO_V30 deviceInfo;//设备信息

    private NativeLong lUserID;//用户句柄
    private NativeLong lAlarmHandle;//报警布防句柄

    private HCNetSDK.FMSGCallBack_V31 fMSFCallBack_V31;//报警回调函数实现
    private HCNetSDK.FMSGCallBack fMSFCallBack;//报警回调函数实现

    private String deviceIP;//已登录设备的IP地址
    private int devicePort;//设备端口号
    private String username;//设备用户名
    private String password;//设备登陆密码

    private boolean init_flag;//初始化识别标志
    private boolean reg_flag;//设备注册识别标志

    String PATH_WIN = System.getProperty("user.dir") + File.separator + "lib" + File.separator + "HCNetSDK";

    String PATH_LINUX = File.separator + "opt" + File.separator + "hcnet" + File.separator + "libhcnetsdk.so";


    private void install() {
        if (Platform.isWindows()) {
            hcNetSDK = (HCNetSDK) Native.loadLibrary(PATH_WIN, HCNetSDK.class);
        }
        if (Platform.isLinux()) {
            hcNetSDK = (HCNetSDK) Native.loadLibrary(PATH_LINUX, HCNetSDK.class);
        }
    }


    //TODO 其他需要使用到海康sdk中的方法实现...此处省略
}

/opt/hcnet/下就是我需要的.so和jar。

 

最后,由于项目用到了teamcity做持续集成,而teamcity和项目是部署在两台服务器上的,在tc build项目时,测试类报了错,找不到/opt/hcnet/目录,所以在两台服务器上都建了一模一样文件夹,最后tc build 在测试类那里也通过了。

在这里想问下做过海康布防撤防的大神,仅仅只是程序上返回了布防、撤防成功的标志,在海康监控的显示屏上怎么验证啊,有没有类似的日志记录摄像头被操作的记录呢,而且在IP、port、username、password输入错误的时候,布防接口会报设备未注册的错误,但是撤防接口却能返回撤防成功,这太不科学了吧。。。加粗加红表示疑问

 

还有什么遗漏的想起来再补充。

你可能感兴趣的:(Linux下海康威视sdk调用总结)