| | |
| | | import com.ruoyi.device.hiksdk.util.hikSdkUtil.GisUtil; |
| | | import com.ruoyi.device.hiksdk.util.hikSdkUtil.HCNetSDK; |
| | | import com.ruoyi.device.hiksdk.service.IHikClientService; |
| | | import com.ruoyi.device.hiksdk.util.hikSdkUtil.LoginResultCallBack; |
| | | import com.ruoyi.device.hiksdk.util.minio.MinioUtils; |
| | | import com.ruoyi.system.mapper.SysUserMapper; |
| | | import com.sun.jna.Native; |
| | |
| | | } |
| | | |
| | | /** |
| | | * @描述 注册登录 |
| | | * @描述 注册登录 只支持同步登陆,且官方不建议直接在此接口下写耗时操作 |
| | | * @参数 [dvrLogin] |
| | | * @返回值 java.lang.Integer |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/1/17 16:12 |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public ArdCameras login(ArdCameras camera) { |
| | | public ArdCameras login1(ArdCameras camera) { |
| | | // 初始化 |
| | | if (!hCNetSDK.NET_DVR_Init()) { |
| | | log.error("SDK初始化失败"); |
| | |
| | | //打印海康sdk日志 |
| | | if (Platform.isWindows()) { |
| | | String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, false); |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); |
| | | } else { |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", false); |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); |
| | | } |
| | | String m_sDeviceIP = camera.getIp(); |
| | | String m_sUsername = camera.getUsername(); |
| | |
| | | } |
| | | |
| | | /** |
| | | * @描述 注册登录 集成于NET_DVR_Login_V30,支持同步和异步登录 |
| | | * @参数 [dvrLogin] |
| | | * @返回值 java.lang.Integer |
| | | * @创建人 刘苏义 |
| | | * @创建时间 2023/1/17 16:12 |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | public void login(ArdCameras camera) { |
| | | // 初始化 |
| | | if (!hCNetSDK.NET_DVR_Init()) { |
| | | log.error("SDK初始化失败"); |
| | | } |
| | | //打印海康sdk日志 |
| | | if (Platform.isWindows()) { |
| | | String WIN_PATH = System.getProperty("user.dir") + File.separator + "ardLog" + File.separator + "logs" + File.separator; |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, WIN_PATH, true); |
| | | } else { |
| | | hCNetSDK.NET_DVR_SetLogToFile(3, "/home/ardLog/hiklog", true); |
| | | } |
| | | String m_sDeviceIP = camera.getIp(); |
| | | String m_sUsername = camera.getUsername(); |
| | | String m_sPassword = camera.getPassword(); |
| | | short m_sPort = camera.getPort().shortValue(); |
| | | //设置连接时间与重连时间 |
| | | hCNetSDK.NET_DVR_SetConnectTime(2000, 1); |
| | | hCNetSDK.NET_DVR_SetReconnect(100000, true); |
| | | //设备信息, 输出参数 |
| | | HCNetSDK.NET_DVR_DEVICEINFO_V40 m_strDeviceInfo = new HCNetSDK.NET_DVR_DEVICEINFO_V40(); |
| | | HCNetSDK.NET_DVR_USER_LOGIN_INFO m_strLoginInfo = new HCNetSDK.NET_DVR_USER_LOGIN_INFO(); |
| | | |
| | | // 注册设备-登录参数,包括设备地址、登录用户、密码等 |
| | | 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()); |
| | | 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()); |
| | | 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 = m_sPort; |
| | | m_strLoginInfo.byVerifyMode = 0; |
| | | m_strLoginInfo.byLoginMode=0; |
| | | //是否异步登录:0- 否,1- 是 windowsSDK里是true和false |
| | | m_strLoginInfo.bUseAsynLogin = true; |
| | | //异步登录回调 |
| | | m_strLoginInfo.cbLoginResult = new LoginResultCallBack(camera); |
| | | m_strLoginInfo.write(); |
| | | int i = hCNetSDK.NET_DVR_Login_V40(m_strLoginInfo, m_strDeviceInfo); |
| | | if (i < 0) { |
| | | int errorCode = hCNetSDK.NET_DVR_GetLastError(); |
| | | log.info("登录异常:" + errorCode); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * @描述 登录所有相机 |
| | | * @参数 [] |
| | | * @返回值 void |
| | |
| | | * @修改人和其它信息 |
| | | */ |
| | | @Override |
| | | @Async("loginExecutor") |
| | | public void loginAll() { |
| | | try { |
| | | log.debug("加载lib完成!"); |
| | | List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasList(new ArdCameras()); |
| | | List<ArdCameras> ardCameras = ardCamerasMapper.selectArdCamerasListNoDataScope(new ArdCameras()); |
| | | for (ArdCameras camera : ardCameras) { |
| | | camera = login(camera); |
| | | if (camera.getLoginId() >= 0) { |
| | | log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录成功:" + camera.getLoginId()); |
| | | ardCamerasMapper.updateArdCameras(camera); |
| | | } else { |
| | | log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录失败:" + camera.getLoginId()); |
| | | } |
| | | // if (!globalVariable.loginMap.containsKey(camera.getId())) { |
| | | // camera = login(camera); |
| | | // if (camera.getLoginId() >= 0) { |
| | | // log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录成功:" + camera.getLoginId()); |
| | | // globalVariable.loginMap.put(camera.getId(), camera.getLoginId()); |
| | | // ardCamerasService.updateArdCameras(camera); |
| | | // } else { |
| | | // log.info("相机" + camera.getIp() + ":" + camera.getPort() + "登录失败:" + camera.getLoginId()); |
| | | // } |
| | | // } else { |
| | | // Integer userid = globalVariable.loginMap.get(camera.getId()); |
| | | // log.info("当前相机:" + camera.getId() + "已登录,ID:" + userid); |
| | | // } |
| | | login(camera); |
| | | } |
| | | } catch (Exception ex) { |
| | | log.error("初始化登录相机异常:" + ex.getMessage()); |
| | |
| | | */ |
| | | @Override |
| | | @SdkOperate |
| | | public boolean PTZControlWithSpeed(CameraCmd cmd) { |
| | | public boolean pTZControlWithSpeed(CameraCmd cmd) { |
| | | String cameraId = cmd.getCameraId(); |
| | | boolean enable = cmd.isEnable(); |
| | | Integer channelNum = cmd.getChannelNum(); |
| | |
| | | netDvrIFrame.byStreamType = 0; |
| | | netDvrIFrame.dwSize = netDvrIFrame.size(); |
| | | netDvrIFrame.write(); |
| | | if(!hCNetSDK.NET_DVR_RemoteControl(userId,3402,netDvrIFrame.getPointer(),netDvrIFrame.dwSize)){ |
| | | if (!hCNetSDK.NET_DVR_RemoteControl(userId, 3402, netDvrIFrame.getPointer(), netDvrIFrame.dwSize)) { |
| | | log.error("强制I帧 错误码为: " + hCNetSDK.NET_DVR_GetLastError()); |
| | | } |
| | | //预览参数 |
| | |
| | | } |
| | | log.info("取流成功"); |
| | | |
| | | String path= FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | String path = FileUtils.createFile("D:/recordTemp/" + cameraId + ".mp4"); |
| | | recordInfo info = new recordInfo(); |
| | | info.setLRealHandle(lRealHandle); |
| | | info.setRecordPath(path); |
| | |
| | | } |
| | | hCNetSDK.NET_DVR_StopRealPlay(info.getLRealHandle()); |
| | | log.info("录像停止"); |
| | | if(cmd.isUploadMinio()) { |
| | | if (cmd.isUploadMinio()) { |
| | | //存入minio |
| | | String BucketName = cmd.getRecordBucketName(); |
| | | String ObjectName = cmd.getRecordObjectName(); |