一:配置java项目所需的库文件,库文件的配置分为两种方案
方案1 :将需要的库文件放到系统的 /usr/lib下,HCNetSDKCom文件夹下的文件也copy到 /usr/lib下
方案2:
2.1: 进入/etc/profile下,将自己java工程需要的so文件的路径:如下
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/aa/java/LinuxJavaDemo/libs:/home/aa/java/LinuxJavaDemo/libs/HCNetSDKCom
注意:/home/aa/java/LinuxJavaDemo/lib 改路径为存放so文件以及HCNetSDKCom文件夹的路径,export 与LD_LIBRARY…在一行上
退出后,使用source /etc/profile使环境变量生效
2.2:进入/etc/ld.so.conf下,加入java工程所需要的so文件,如下:
/home/aa/java/LinuxJavaDemo/libs
/home/aa/java/LinuxJavaDemo/libs/HCNetSDKCom
使用ldconfig命令使配置生效
二:SDK的具体调用
SDK中提供了很多模块的接口,如预览模块、回放和下载模块等的接口,根据文档接口的说明实现模块功能,本次拿云台控制模块中的云台基本控制来作为例子
①初始化sdk:获得sdk对象,进行初始化,如下
private HCNetSDK sdk = HCNetSDK.INSTANCE;
sdk.NET_DVR_Init();
②注册设备
在sdk接口文档中有好几种实现注册的接口,参数的具体含义也给出了,根据情况选择接口实现注册,我选择的是NET_DVR_Login_V30接口实现注册,接口位置在文档下的基本接口定义
-> 用户注册
NET_DVR_DEVICEINFO_V30 lpDeviceInfo = new NET_DVR_DEVICEINFO_V30();
//注册
id = sdk.NET_DVR_Login_V30(ip, port, username, password, lpDeviceInfo);
实现云台基本控制的接口总共有四个接口,大致分为两大类,开启预览和不开启预览,而每一类又有两个接口,分别是能设置速度和不能设置速度,本次以开启预览不设置速度作为示例
③开启预览
开启预览的接口会根据sdk版本的不同而有所变化,本次示例中用的是NET_DVR_RealPlay_V30这个接口,具体参数查看接口文档,位置在文档下的基本接口定义 -> 实时预览
NET_DVR_CLIENTINFO lpClientInfo = new NET_DVR_CLIENTINFO();
lpClientInfo.hPlayWnd = null;
lpClientInfo.lChannel = Channel;
lpClientInfo.lLinkMode = new NativeLong(0);
lpClientInfo.sMultiCastIP = null;
FRealDataCallBack_V30Imple fRealDataCallBack_V30 = new FRealDataCallBack_V30Imple();
handel = sdk.NET_DVR_RealPlay_V30(id, lpClientInfo, fRealDataCallBack_V30, null, false);
④云台控制
本次示例使用 NET_DVR_PTZControl接口,参数 LONG lRealHandle,DWORD dwPTZCommand, DWORD dwStop,dwPTZCommand 云台控制命令,可以实现云台的控制,具体命令请查看文档,再此不一一列举。dwStop参数实现了云台控制的开启和结束,1为结束,0为开始
sdk.NET_DVR_PTZControl(handel, comment, 0); //开启控制,comment为云台控制命令
sdk.NET_DVR_PTZControl(handel, comment, 1);//结束云台控制,comment为云台控制命令,因与开启时的命令一致
⑤结束预览
结束预览的接口为NET_DVR_StopRealPlay,参数为开启预览接口的返回值
boolean b1 = sdk.NET_DVR_StopRealPlay(handel);
⑥注销设备
//注销设备使用的是NET_DVR_Logout接口,参数为注册接口的返回值
boolean b2 = sdk.NET_DVR_Logout_V30(id);
⑦释放SDK资源
//释放SDK资源,调用NET_DVR_Cleanup接口实现,无需传递参数。
boolean b2 = sdk.NET_DVR_Cleanup();
注意:每个接口调用,可以根据其返回值判断是否成功,不同的接口返回值有所不同,具体可以查看文档,在出现错误的情况下,可以使用NET_DVR_GetLastError接口来获得操作的错误码,根据错误码去查询网络通讯库错误码表,即可查看错误原因。NET_DVR_GetLastError位置在文档下的基本接口定义-> SDK本地功能 ->获取错误信息