因项目需要,对接大华的网络硬盘录像机(NVR),获取录像机下所有通道设备的信息及状态,直接使用大华官方的SDK,大华的NETSDKCS库最低只支持.NET Framework 4.0
。具体使用步骤如下:
1.SDK下载
SDK下载地址:https://support.dahuatech.com/tools/sdkExploit,注意区别32位与64位
2.dll引入
将文件夹libs内dll按需复制到自己项目中(因为这些都是C++库,所以只能复制无法在vs中引入),比如我只需要登录设备获取设备信息功能就只需要引入dhnetsdk.dll,当然你也可以全部复制。
用VS打开任意demo,找到NetSDKCS工程,编译后将NetSDKCS.dll引入到自己的项目中。
3.NetSDK初始化
注意同一个进程内,只有第一次初始化有效
,所以放在程序入口执行一次就可以,使用完毕后需要调用清理接口以释放资源
//初始化接口
NETClient.Init(null, IntPtr.Zero, null);
//清理接口
NETClient.Cleanup();
初始化时可以设置断线回调、重连回调等各种回调函数,有需要的可以自行参阅官方指导手册。
4.登录设备
传入设备IP、端口、用户名密码登录,登录会返回当前登录设备的信息,每次使用完需要登出设备。
/// <summary>
/// 登录ID
/// </summary>
private static IntPtr m_loginID = IntPtr.Zero;
/// <summary>
/// 登录设备信息
/// </summary>
private static NET_DEVICEINFO_Ex m_DeviceInfo;
/// <summary>
/// 登录/登出设备
/// </summary>
/// <param name="ip">设备IP</param>
/// <param name="portStr">设备端口,默认37777</param>
/// <param name="userName">用户名</param>
/// <param name="pswd">密码</param>
/// <returns></returns>
public static bool LoginOrLogout(string ip, string portStr, string userName, string pswd)
{
if (m_loginID == IntPtr.Zero)
{
if (string.IsNullOrEmpty(ip) || string.IsNullOrEmpty(portStr) || string.IsNullOrEmpty(userName) || string.IsNullOrEmpty(pswd)) return false;
ushort port = 0;
try
{
port = Convert.ToUInt16(portStr.Trim());
}
catch
{
return false;
}
m_DeviceInfo = new NET_DEVICEINFO_Ex();
m_loginID = NETClient.LoginWithHighLevelSecurity(ip.Trim(), port, userName.Trim(), pswd.Trim(), EM_LOGIN_SPAC_CAP_TYPE.TCP, IntPtr.Zero, ref m_DeviceInfo);
if (m_loginID == IntPtr.Zero)
{
return false;
}
else
return true;
}
else
{
bool result = NETClient.Logout(m_loginID);
if (!result)
{
return false;
}
m_loginID = IntPtr.Zero;
m_DeviceInfo = new NET_DEVICEINFO_Ex();
return true;
}
}