公司需要在项目里调用到海康威视的布防撤防接口,海康开发文档在官网上可以下载到,本地Windows环境下能跑通,测试类也通过了,放到服务器上街开始报错,记录一下,也许有人和我一样的问题,希望有更好的办法的朋友能给予建议~
主要原因就是自己知识不足,第一次接触到jna调用动态库,甚至不清楚.dll/.so的区别【大神就不要骂我了╭(╯^╰)╮
Windows环境下的就不说了,官方的HCNetSDK.java就可以直接用,主要是Linux环境下,要用到官网提供的sdk for Linux,
网址:https://www.hikvision.com/cn/download_more_403.html#prettyPhoto
根据sdk文档目录下的


按照第一种方法配置(第二种没有试),
同样的用到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进行布防撤防接口调用的过程,遇到的.so文件查找问题及解决方法。在TeamCity持续集成环境中,通过创建特定目录解决远程构建时的依赖问题。对于接口返回结果与实际操作不符的疑问,寻求验证摄像头操作记录的方法。
4196

被折叠的 条评论
为什么被折叠?



