# sdk_haikang **Repository Path**: Free4K/sdk_haikang ## Basic Information - **Project Name**: sdk_haikang - **Description**: 海康SDK项目开发,使用Springboot从原企业项目中重新整理出的部分硬件相关代码。 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2025-07-21 - **Last Updated**: 2025-07-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: 海康威视, 海康威视SDK, 海康SDK, SDK, SpringBoot ## README ## 说明 ​ 海康设备SDK开发示例。代码以原先的开发一个项目为基础,重新整理出了部分云台控制相关操作代码。 ​ 本示例中简单实现了云台的方向移动功能。由于是前后端分离项目,导致前端能获取视频推流,却无法控制设备相关功能,所以需要后端提供相应接口操作。示例中实现了**登陆,登出,移动控制**三个功能。前端预览一个视频流时,同时向后端发送请求,登陆该设备,点击前端相应按钮调用接口,实现方向移动。切换时,则注销登陆。对于**其它如截图,复位等操作**,根据官方文档实现接口,前端添加按钮调用即可。 依据官方文档实现对应功能。 ![](./static/hk.PNG) 核心操作流程位于**HkController**中,以下是该类的说明 ### 以下是AI分析生成的功能说明 关于AI提出的潜在问题,根据实际情况可进行忽略/改进。 ## 主要功能 1. **SDK初始化**: - 静态代码块在类加载时自动执行: - 创建SDK实例(`CreateSDKInstance()`) - 如果是Linux系统进行特殊配置(`ifLinux()`) - 初始化SDK(`hCNetSDK.NET_DVR_Init()`) 2. **核心接口**: - `/mylogin`:设备登录接口 - 验证设备编码 - 调用`Login()`方法进行设备登录 - 保存登录状态和验证码 - `/direction`:云台控制接口 - 检查登录状态和验证码 - 根据参数(left/right/up/down)控制云台方向 - 执行100ms后自动停止 - `/mylogout`:设备登出接口 - 调用`Logout()`方法注销登录 3. **辅助方法**: - `Login()`:封装海康SDK的登录逻辑 - `Logout()`:封装注销逻辑 - `CreateSDKInstance()`:根据操作系统加载不同版本的SDK库 - `ifLinux()`:Linux系统下的特殊配置 ## 技术特点 1. **使用JNA(Java Native Access)**: - 通过Native.loadLibrary加载海康的本地库 - 处理C结构体与Java对象的转换 2. **线程安全**: - 使用synchronized保证SDK实例创建的线程安全 3. **多平台支持**: - 自动识别Windows和Linux系统 - 加载对应的库文件(.dll/.so) 4. **状态管理**: - 使用静态变量维护登录状态(lUserID) - 使用验证码(check)进行请求验证 ## 潜在问题 1. **全局状态**: - 使用静态变量维护登录状态,在分布式环境下会有问题 - 多用户同时操作会有冲突 2. **异常处理**: - 部分异常仅打印日志,没有妥善处理 - 云台控制没有检查操作是否成功 3. **硬编码**: - 通道号固定为1(iChannel = 1) - 云台转动时间固定100ms 4. **资源管理**: - 没有显式释放native资源 - 没有处理SDK初始化失败的情况 ## 改进建议 1. 使用实例变量替代静态变量,支持多用户 2. 添加更完善的错误处理和状态检查 3. 将硬编码参数改为可配置项 4. 添加资源释放和清理逻辑 5. 考虑添加连接池管理多个设备连接 这个控制器基本实现了海康设备的主要控制功能,但在生产环境中使用时还需要进一步完善。 ## 注: ​ 海康SDK,宇视SDK,宇视门禁三个仓库,都是从一个原微服务项目中整理出的硬件代码。相对来说海康设备对接较为简单,较为统一的SDK对接。宇视的不同设备有不同对接方式,不够统一,相对复杂一些。另外还有青鸟消防设备,某不知名车牌识别系统,没有直接的官方对接方式,不再进行整理。 ​ 对这三个库的统一说明:ai生成的说明只是单个类的说明,所提的改进建议一般都在原项目中做了处理,要么就是不需要考虑这个问题。重新整理的代码中,只保留硬件操作逻辑,原先的Service服务均已删除,但为了方便阅读,还是保留了许多报错标红的代码,虽然删除了除硬件外的业务代码,但方法命名简单明了,很容易理解是什么作用。 如下:根据编码查找设备信息,使用对应的信息登陆设备。 ![](./static/hk2.PNG)