# HIKVISION DEVELOP
**Repository Path**: fangexuxiehuihuang/HIKVISION_DEVELOP
## Basic Information
- **Project Name**: HIKVISION DEVELOP
- **Description**: A project for camera development based on HIKVISION SDK.
- **Primary Language**: Python
- **License**: Apache-2.0
- **Default Branch**: develop
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 5
- **Created**: 2023-03-09
- **Last Updated**: 2025-09-22
## Categories & Tags
**Categories**: Uncategorized
**Tags**: HIKDevice, Python, Cpp
## README
# HIKVISION DEVELOP
开始时间:2023-03-11
更新时间:2023-09-17

## 介绍
本项目基于海康威视的智能安防摄像机及其SDK进行二次开发
- 项目成员
| 序号 | 成员 |
| :--: | :----------: |
| 1 | A-孔俊 |
| 2 | 22-博-李强 |
| 3 | 22-研-李一帆 |
| 4 | 22-研-柳境昌 |
- 设备列表
| 序号 | 设备型号 |
| :--: | :----------------------------------------------------------: |
| 1 | [DS-2CD3T86FWDA4-LS(基础款)](https://www.hikvision.com/cn/products/Front-End-Product/Fixed-Camera/Distributed-Series/ds-2cd3t86fwda4-ls/) |
- 主要文件夹/文件说明
| 文件路径 | 说明 |
| :-------------------------: | :----------------------------------------------------------: |
| ./Demo/ | 海康提供的基于C++和Python的示例程序,有关Visual Studio下运行C++的问题解决可以参考此篇[博客](https://blog.csdn.net/liuyonghong159632/article/details/107968376/) |
| ./设备网络SDK使用手册.chm | 设备核心开发文档,映射到HCNetSDK.dll |
| ./播放库编程指南.chm | 设备播放库开发文档,映射到PlayCtrl.dll |
| ./source/ | 项目文件夹 |
| ./source/lib/ | 设备依赖的SDK文件夹 |
| ./source/HCNetSDK.py | 通过ctypes进行c++和python数据结构、函数转换的定义脚本,映射到HCNetSDK.dll |
| ./source/PlayCtrl.py | 通过ctypes进行c++和python数据结构、函数转换的定义脚本,映射到PlayCtrl.dll |
| ./source/HikVisionDevice.py | HIKVISION设备的控制类,包含了对设备进行控制、全流程的功能(核心文件) |
| ./source/TkinterApp.py | 基于Tkinter的客户端App,用于对设备的控制接口进行测试(入口文件) |
## 接口
- HikVisionDevice.py
对`./source/HikVisionDevice.py`进行描述
①全局参数
| 参数名 | 描述 |
| :-----------: | :----------------------------------------: |
| DEV_IP | 设备连接PC后的ip地址(默认为192.168.0.64) |
| DEV_PORT | 设备连接PC后的端口号(8000) |
| DEV_USER_NAME | 设备用户名(admin) |
| DEV_PASSWORD | 设备密码(liqiang0307) |
注:后续会以配置文件的方式替代嵌入式的明文方式
②HikVisionDevice类的私有成员变量
| 变量名 | 描述 |
| :-----------------------: | :------------------------------------: |
| __system | 系统类型,windows/linux |
| __HCNetSDK | HCNetSDK对象 |
| __PlayCtrl | PlayCtrl SDK对象 |
| __PlayCtrl_Port | PlayCtrl播放端口 |
| __lRealPlayHandle | PlayCtrl视频预览的播放句柄 |
| __CRealDataCallBack_V30 | PlayCtrl视频预览时视频流获取函数的句柄 |
| __CDecodeCallbackFunction | PlayCtrl视频预览时视频流解码函数的句柄 |
| __canvas | PlayCtrl视频预览时视频流显示的画布句柄 |
| __lVoiceHandle | HCNetSDK语音对讲时的语音句柄 |
| __prePoints | 预置点 |
②HikVisionDevice类的公有成员变量
④HikVisionDevice类的私有成员函数
| 成员名 | 参数 | 描述 |
| :----------------------: | :----------------------------------------------------------: | :----------------------------: |
| \__init__() | | 类初始化函数 |
| __HCNetSDKInit() | | HCNetSDK.dll相关依赖初始化函数 |
| __playCtrlInit() | | PlayCtrl.dll相关依赖初始化函数 |
| __deviceLogin | | 设备登录函数 |
| __RealDataCallBack_V30 | lPlayHandle:播放句柄
dwDataType:数据类型
pBuffer:数据流
dwBufSize:数据流大小
pUser:用户数据 | 视频预览时视频流的回调函数 |
| __decodeCallbackFunction | lRealHandle:播放端口
pBuf:解码前的数据流
nSize:解码前的数据流大小
pFrameInfo:解码前的帧信息
nUser:用户数据
nReserved2 | 视频流回调后解码时的回调函数 |
| __fVoiceDataCallBack | lRealHandle:音频播放句柄
dwDataType:音频流格式
pBuffer:音频流数据
dwBufSize:音频流数据大小
pUser:用户数据
| 音频流回调函数 |
| __openVoiceStream | | 获取PC音频流 |
⑤HikVisionDevice类的公有成员函数
| 成员名 | 参数 | 描述 |
| :----------------------: | :----------------------------------------------------------: | :----------------------------------------------------------: |
| setShowCanvas | canvas:画布 | 设置视频流显示的画布 |
| deviceExit | | 设备退出登录 |
| openPreview | | 打开预览 |
| closePreview | | 关闭预览 |
| pausePreview | | 暂停预览 |
| restartPreview | | 恢复预览 |
| slowPlay | | 慢速播放:每次调用将使当前播放速度慢一倍;最多调用4次 |
| fastPlay | | 快速播放:每次调用将使当前播放速度加快一倍,最多调用6次 |
| normalPlay | | 恢复正常播放 |
| setImageConfig | nBrightness:亮度
nContrast:对比度
nSaturation:饱和度
nHue:色调
默认值均为64,范围0-128 | 设置图像参数 |
| setImageSharpen | nLevel:锐化级别 1-6 | 设置图像锐化,0不做锐化,1低级,6高级,默认不做锐化 |
| setRotateAngle | dwType,[-1,2] | 设置图像旋转模式,-1不旋转,0向左旋转90°,1向右旋转90°,2旋转180 |
| getFlowInfo | | 获取视频流信息 |
| capturePicture | | 截屏 |
| screenRecord | | 录屏 |
| stopScreenRecord | | 停止录屏 |
| startVoiceCom | | 语音对讲(未完成) |
| stopVoiceCom | | 停止语音对讲 |
| openLightBattery | speed:云台速度[1-,7] | 接通灯光电源 |
| closeLightBattery | speed:云台速度[1-,7] | 关闭灯光电源 |
| openWindshieldWiper | speed:云台速度[1-,7] | 接通雨刷开关 |
| closeWindshieldWiper | speed:云台速度[1-,7] | 关闭雨刷开关 |
| openFan | speed:云台速度[1-,7] | 接通风扇开关 |
| closeFan | speed:云台速度[1-,7] | 关闭风扇开关 |
| openHeater | speed:云台速度[1-,7] | 接通通加热器开关 |
| closeHeater | speed:云台速度[1-,7] | 关闭通加热器开关 |
| addFocalDistance | speed:云台速度[1-,7] | 焦距变大(倍率变大) |
| reduceFocalDistance | speed:云台速度[1-,7] | 焦距变小(倍率变小) |
| focusHead | speed:云台速度[1-,7] | 焦点前调 |
| focusBack | speed:云台速度[1-,7] | 焦点后调 |
| focusAuxiliary | | 辅助聚焦 |
| addDiaphragm | speed:云台速度[1-,7] | 光圈扩大 |
| reduceDiaphragm | speed:云台速度[1-,7] | 光圈缩小 |
| panUp | speed:云台速度[1-,7] | 云台上仰 |
| panDown | speed:云台速度[1-,7] | 云台下俯 |
| panLeft | speed:云台速度[1-,7] | 云台左转 |
| panRight | speed:云台速度[1-,7] | 云台右转 |
| panAutoScan | speed:云台速度[1-,7] | 云台自动左右扫描 |
| panStop | speed:云台速度[1-,7] | 云台停止 |
| panReset | | 恢复镜头电机默认位置 |
| addPrePoint | pointName:预置点名称,注意名字唯一 | 设置预置点 |
| getPrePoints | | 获取预置点 |
| moveToPrePoint | pointName:预置点名称 | 设置预置点 |
| removePrePoint | pointName:预置点名称 | 清除预置点 |
| addCruise | cruiseName:巡航点名称,注意名字唯一 | 设置巡航路线 |
| removeCruise | cruiseName:巡航点名称 | 删除巡航路线 |
| getCruises | | 获取巡航路线 |
| getCruisesByName | cruiseName:巡航点名称 | 通过巡航线名称获取巡航路线 |
| putPrePointToCruise | cruiseName:巡航点名称
pointName:预置点名称 | 将预置点添加到巡航路线中 |
| removePrePointFromCruise | cruiseName:巡航点名称
pointName:预置点名称 | 将预置点从巡航路线中删除 |
| setCruiseWaitTime | waiteTime:等待时间最大[120,255]
cruiseName:巡航点名称
pointName:预置点名称 | 设置巡航点停顿时间 |
| setCruiseSpeed | speed:巡航速度[1,40]
cruiseName:巡航点名称
pointName:预置点名称 | 设置巡航点停顿时间 |
| startCruise | cruiseName:巡航点名称
pointName:预置点名称 | 开始巡航 |
| finishCruise | cruiseName:巡航点名称
pointName:预置点名称 | 结束巡航 |