一:配置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本地功能 ->获取错误信息