|
@@ -0,0 +1,230 @@
|
|
|
+package com.ruoyi.hksdk;
|
|
|
+
|
|
|
+import com.ruoyi.Common.osSelect;
|
|
|
+import com.ruoyi.alarm.Alarm;
|
|
|
+import com.sun.jna.Native;
|
|
|
+import com.sun.jna.Pointer;
|
|
|
+
|
|
|
+import java.util.Timer;
|
|
|
+
|
|
|
+import static com.ruoyi.alarm.Alarm.login_V40;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ * @create 2020-12-24-17:55
|
|
|
+ */
|
|
|
+public class ClientDemo {
|
|
|
+
|
|
|
+ int iErr = 0;
|
|
|
+ static HCNetSDK hCNetSDK = null;
|
|
|
+ static PlayCtrl playControl = null;
|
|
|
+ static int lUserID = -1;
|
|
|
+ static int lDChannel;
|
|
|
+ static boolean bSaveHandle = false;
|
|
|
+ Timer Playbacktimer;
|
|
|
+
|
|
|
+ static FExceptionCallBack_Imp fExceptionCallBack;
|
|
|
+ static int FlowHandle;
|
|
|
+
|
|
|
+ static class FExceptionCallBack_Imp implements HCNetSDK.FExceptionCallBack {
|
|
|
+ public void invoke(int dwType, int lUserID, int lHandle, Pointer pUser) {
|
|
|
+ System.out.println("异常事件类型:" + dwType);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 动态库加载
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static boolean createSDKInstance() {
|
|
|
+ if (hCNetSDK == null) {
|
|
|
+ synchronized (HCNetSDK.class) {
|
|
|
+ String strDllPath = "";
|
|
|
+ try {
|
|
|
+ if (osSelect.isWindows())
|
|
|
+
|
|
|
+ strDllPath = System.getProperty("user.dir") + "\\ruoyi-admin\\lib\\HCNetSDK.dll";
|
|
|
+
|
|
|
+ else if (osSelect.isLinux())
|
|
|
+
|
|
|
+ strDllPath = System.getProperty("user.dir") + "/lib/libhcnetsdk.so";
|
|
|
+ hCNetSDK = (HCNetSDK) Native.loadLibrary(strDllPath, HCNetSDK.class);
|
|
|
+ } catch (Exception ex) {
|
|
|
+ System.out.println("loadLibrary: " + strDllPath + " Error: " + ex.getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 播放库加载
|
|
|
+ *
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private static boolean createPlayInstance() {
|
|
|
+ if (playControl == null) {
|
|
|
+ synchronized (PlayCtrl.class) {
|
|
|
+ String strPlayPath = "";
|
|
|
+ try {
|
|
|
+ if (osSelect.isWindows())
|
|
|
+
|
|
|
+ strPlayPath = System.getProperty("user.dir") + "\\ruoyi-admin\\lib\\PlayCtrl.dll";
|
|
|
+ else if (osSelect.isLinux())
|
|
|
+
|
|
|
+ strPlayPath = System.getProperty("user.dir") + "/lib/libPlayCtrl.so";
|
|
|
+ playControl = (PlayCtrl) Native.loadLibrary(strPlayPath, PlayCtrl.class);
|
|
|
+
|
|
|
+ } catch (Exception ex) {
|
|
|
+ System.out.println("loadLibrary: " + strPlayPath + " Error: " + ex.getMessage());
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ public static void main(String[] args) throws InterruptedException {
|
|
|
+
|
|
|
+ if (hCNetSDK == null && playControl == null) {
|
|
|
+ if (!createSDKInstance()) {
|
|
|
+ System.out.println("Load SDK fail");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if (!createPlayInstance()) {
|
|
|
+ System.out.println("Load PlayCtrl fail");
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ if (osSelect.isLinux()) {
|
|
|
+ HCNetSDK.BYTE_ARRAY ptrByteArray1 = new HCNetSDK.BYTE_ARRAY(256);
|
|
|
+ HCNetSDK.BYTE_ARRAY ptrByteArray2 = new HCNetSDK.BYTE_ARRAY(256);
|
|
|
+
|
|
|
+ String strPath1 = System.getProperty("user.dir") + "/lib/libcrypto.so.1.1";
|
|
|
+ String strPath2 = System.getProperty("user.dir") + "/lib/libssl.so.1.1";
|
|
|
+
|
|
|
+ System.arraycopy(strPath1.getBytes(), 0, ptrByteArray1.byValue, 0, strPath1.length());
|
|
|
+ ptrByteArray1.write();
|
|
|
+ hCNetSDK.NET_DVR_SetSDKInitCfg(3, ptrByteArray1.getPointer());
|
|
|
+
|
|
|
+ System.arraycopy(strPath2.getBytes(), 0, ptrByteArray2.byValue, 0, strPath2.length());
|
|
|
+ ptrByteArray2.write();
|
|
|
+ hCNetSDK.NET_DVR_SetSDKInitCfg(4, ptrByteArray2.getPointer());
|
|
|
+
|
|
|
+ String strPathCom = System.getProperty("user.dir") + "/lib/";
|
|
|
+ HCNetSDK.NET_DVR_LOCAL_SDK_PATH struComPath = new HCNetSDK.NET_DVR_LOCAL_SDK_PATH();
|
|
|
+ System.arraycopy(strPathCom.getBytes(), 0, struComPath.sPath, 0, strPathCom.length());
|
|
|
+ struComPath.write();
|
|
|
+ hCNetSDK.NET_DVR_SetSDKInitCfg(2, struComPath.getPointer());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ boolean initSuc = hCNetSDK.NET_DVR_Init();
|
|
|
+
|
|
|
+
|
|
|
+ if (fExceptionCallBack == null) {
|
|
|
+ fExceptionCallBack = new FExceptionCallBack_Imp();
|
|
|
+ }
|
|
|
+ Pointer pUser = null;
|
|
|
+ if (!hCNetSDK.NET_DVR_SetExceptionCallBack_V30(0, 0, fExceptionCallBack, pUser)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ System.out.println("设置异常消息回调成功");
|
|
|
+
|
|
|
+
|
|
|
+ hCNetSDK.NET_DVR_SetLogToFile(3, "./sdkLog", false);
|
|
|
+
|
|
|
+ int userId = Alarm.login_V40( "114.99.127.243", (short) 1049, "admin", "lsly168S+");
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ VideoDemo.realPlay(lUserID, lDChannel);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ Thread.sleep(3000);
|
|
|
+
|
|
|
+
|
|
|
+ if (hCNetSDK.NET_DVR_Logout(lUserID)) {
|
|
|
+ System.out.println("注销成功");
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ hCNetSDK.NET_DVR_Cleanup();
|
|
|
+ return;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ * 设备登录V40 与V30功能一致
|
|
|
+ *
|
|
|
+ * @param ip 设备IP
|
|
|
+ * @param port SDK端口,默认设备的8000端口
|
|
|
+ * @param user 设备用户名
|
|
|
+ * @param psw 设备密码
|
|
|
+ */
|
|
|
+ public int login_V40(String ip, short port, String user, String psw) {
|
|
|
+
|
|
|
+ HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO();
|
|
|
+ HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40();
|
|
|
+
|
|
|
+ String m_sDeviceIP = ip;
|
|
|
+ m_strLoginInfo.sDeviceAddress = new byte[HCNetSDK.NET_DVR_DEV_ADDRESS_MAX_LEN];
|
|
|
+ System.arraycopy(m_sDeviceIP.getBytes(), 0, m_strLoginInfo.sDeviceAddress, 0, m_sDeviceIP.length());
|
|
|
+
|
|
|
+ String m_sUsername = user;
|
|
|
+ m_strLoginInfo.sUserName = new byte[HCNetSDK.NET_DVR_LOGIN_USERNAME_MAX_LEN];
|
|
|
+ System.arraycopy(m_sUsername.getBytes(), 0, m_strLoginInfo.sUserName, 0, m_sUsername.length());
|
|
|
+
|
|
|
+ String m_sPassword = psw;
|
|
|
+ m_strLoginInfo.sPassword = new byte[HCNetSDK.NET_DVR_LOGIN_PASSWD_MAX_LEN];
|
|
|
+ System.arraycopy(m_sPassword.getBytes(), 0, m_strLoginInfo.sPassword, 0, m_sPassword.length());
|
|
|
+
|
|
|
+ m_strLoginInfo.wPort = port;
|
|
|
+ m_strLoginInfo.bUseAsynLogin = false;
|
|
|
+ m_strLoginInfo.byLoginMode = 0;
|
|
|
+ m_strLoginInfo.write();
|
|
|
+
|
|
|
+ lUserID = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo);
|
|
|
+ if (lUserID == -1) {
|
|
|
+ System.out.println("登录失败,错误码为" + hCNetSDK.NET_DVR_GetLastError());
|
|
|
+ return lUserID;
|
|
|
+ } else {
|
|
|
+ System.out.println(ip + ":设备登录成功!");
|
|
|
+
|
|
|
+
|
|
|
+ if ((int) m_strDeviceInfo.struDeviceV30.byStartDChan == 1 && (int) m_strDeviceInfo.struDeviceV30.byStartDChan == 33) {
|
|
|
+
|
|
|
+ lDChannel = (int) m_strDeviceInfo.struDeviceV30.byStartDChan;
|
|
|
+ System.out.println("预览起始通道号:" + lDChannel);
|
|
|
+ }
|
|
|
+ return lUserID;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+
|