前言
需求如题,我们通过官方提供的SDK的接口,实现这些功能,只要参照提供的demo和说明文档实现的过程还是比较方便简单的。
准备
硬件搭建
摄像头的搭建这个自行完成,如果没有摄像头,可能后续的就没法功能验证了,这一步需要获取IP、端口、用户名和密码等。
SDK下载
下载地址如下:
https://open.hikvision.com/download/5cda567cf47ae80dd41a54b3?type=10
请自行前往下载
查看Demo
示例在“\Demo示例\3- C# 开发示例”目录下,虽然不是Unity3d工程(应该是Visual Studio),但是可以打开参考一下他的接入。它将所有的接口整理在了CHCNetSDK类里,只需要通过这个类调用这些接口即可。
工程准备
Unity3d的工程下添加dll
CHCNetSDK.cs添加至工程;
/库文件/HCNetSDKCom文件夹必须加载到工程,放置Plugins文件夹下;
将库文件夹下的所有dll文件添加到Plugins文件夹下(如果知道用途可以自行删减)。
开发
流程图如下:
初始化
bool m_SDKInited = CHCNetSDK.NET_DVR_Init();
if (m_SDKInited)
{
CHCNetSDK.NET_DVR_SetLogToFile(3, "C:/SdkLogUnity/", true);
CHCNetSDK.NET_DVR_SetConnectTime(2000, 1); //连接时间与重连时间
CHCNetSDK.NET_DVR_SetReconnect(10000, 1);
Debug.Log("初始化成功!");
}
直接调用了CHCNetSDK.NET_DVR_Init(),成功后进行了一些设置。
登录
CHCNetSDK.NET_DVR_DEVICEINFO_V30 DeviceInfo = new CHCNetSDK.NET_DVR_DEVICEINFO_V30();
Int m_userId = CHCNetSDK.NET_DVR_Login_V30(ip, port, account, password, ref DeviceInfo);
if (m_userId > -1)
{
Debug.Log("登录成功" + m_userId);
}
else
{
Debug.LogError("登录失败!错误代码:" + CHCNetSDK.NET_DVR_GetLastError());
}
登录的参数就是硬件搭建的相关参数。
云台控制
我们选用如下接口:
public static extern bool NET_DVR_PTZControlWithSpeed_Other(int lUserID, int lChannel, uint dwPTZCommand, uint dwStop, uint dwSpeed);
这里的参数:
lUserID 是登录返回的用户ID;
lChannel 给默认1
dwPTZCommand 是云台命令,在说明文档中有详细说明:

这里参考上图对应值和操作传参即可。
dwStop 云台停止动作或开始动作:0-开始;1-停止 ;
dwSpeed 云台控制的速度,用户按不同解码器的速度控制值设置。取值范围[1,7]。
这里特别注意的是dwStop,我们的按钮在按下后传0,抬起后传1才能是正常功能,而按钮的组件不能使用button了,使用EventTrigger组件并监听OnPointerDown 和OnPointerUp事件。
登出
if (CHCNetSDK.NET_DVR_Logout(m_userId))
{
m_userId = -1;
Debug.Log("监控退出成功");
}
else
{
//退出失败
}
释放
if (CHCNetSDK.NET_DVR_Cleanup())
Debug.Log("摄像头SDK释放成功!");
else
Debug.Log("摄像头SDK释放失败:" + CHCNetSDK.NET_DVR_GetLastError());
结语
按如上的流程进行功能接入还是比较简单的,可能部分功能在部分设备上不支持,最好多打log,异常时通过 CHCNetSDK.NET_DVR_GetLastError()方法获取错误码,参照错误码表即可查找出问题: