1

最近接触了海康威视网络摄像头的二次开发,需要下载官方提供的SDK

选用的二次开发DEMO路径是解压后的: Demo示例/c#开发示例/实时预览示例代码二
图片描述
按照说明把相应的dll和文件夹放到工程对应的bin目录,并成功运行demo之后,预览图像中如果有移动物体,就会显示绿色的方块格状区域, 问询海康威视的工程师后,得知是默认开启了移动侦测框,取消这个设置有两种方式,以下是原文:

这个是移动侦测的规则框,是播放库叠加的内容

您可以直接关掉移动侦测的功能,调用接口不关闭移动侦测功能只关闭绿色格子显示有两种方式,一种是客户端取消显示,一种是设备端取消叠加:

  1. 调用NET_DVR_RealPlay_V40传窗口句柄直接预览默认显示该叠加信息,此时调用NET_DVR_GetRealPlayerIndex获取播放库句柄,然后调用播放库接口PlayM4_RenderPrivateData(该接口调用请参考播放库SDK编程指南)可以控制显示或者取消显示。
  2. 通过NET_DVR_GetDVRConfig(命令:NET_DVR_GET_PICCFG_V40)、NET_DVR_SetDVRConfig(命令:NET_DVR_SET_PICCFG_V40)获取和设置,其中的移动侦测参数NET_DVR_PICCFG_V40—》NET_DVR_MOTION_V40里面的byEnableDisplay设置为0即可,也可以WEB或者或者客户端软件登录设备进配置界面直接手动设置取值动态显示

对于使用的C#demo来说,对应的代码如下:

//声明一个NET_DVR_PICCFG_V40类型的类对象
public CHCNetSDK.NET_DVR_PICCFG_V40 m_struPicCfgV40;

//以下是函数体内使用的代码
uint dwSize = (uint)Marshal.SizeOf(m_struPicCfgV40);
//一个指针和对应的结构体,SET和GET Config的时候都是使用指针,但是操作赋值的时候使用的是结构体
IntPtr ptrPicCfgV40 = Marshal.AllocHGlobal((Int32)dwSize);
Marshal.StructureToPtr(m_struPicCfgV40, ptrPicCfgV40, false);

uint dwReturn = 0;
int iGroupNo = iChannelNum[(int)iSelIndex]; //通道号 Channel number
if (!CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_GET_PICCFG_V40, iGroupNo, ptrPicCfgV40, dwSize, ref dwReturn))
{
    iLastErr = CHCNetSDK.NET_DVR_GetLastError();
    str = "NET_DVR_GET_PICCFG_V40 failed, error code= " + iLastErr;
    //获取IP资源配置信息失败,输出错误号 Failed to get configuration of IP channels and output the error code
    //MessageBox.Show(str);
}
else
{
    m_struPicCfgV40 = (CHCNetSDK.NET_DVR_PICCFG_V40)Marshal.PtrToStructure(ptrPicCfgV40, typeof(CHCNetSDK.NET_DVR_PICCFG_V40));
    //重点是设置这里的byEnableDisplay为0,取消移动侦测框
    m_struPicCfgV40.struMotion.byEnableDisplay = 0;
    //不要忘记结构体转换成指针
    Marshal.StructureToPtr(m_struPicCfgV40, ptrPicCfgV40, true);

    if (!CHCNetSDK.NET_DVR_SetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_SET_PICCFG_V40, iGroupNo, ptrPicCfgV40, dwSize))
    {
        uint iLastErr = CHCNetSDK.NET_DVR_GetLastError();
        string str = "NET_DVR_SET_PICCFG_V40 failed, error code= " + iLastErr;
        //MessageBox.Show(str);
    }
    else
    {
        //MessageBox.Show("NET_DVR_SET_PICCFG_V40配置成功!" + iGroupNo);                        
        CHCNetSDK.NET_DVR_GetDVRConfig(m_lUserID, CHCNetSDK.NET_DVR_GET_PICCFG_V40, iGroupNo, ptrPicCfgV40, dwSize, ref dwReturn);
        m_struPicCfgV40 = (CHCNetSDK.NET_DVR_PICCFG_V40)Marshal.PtrToStructure(ptrPicCfgV40, typeof(CHCNetSDK.NET_DVR_PICCFG_V40));
        //MessageBox.Show("NET_DVR_GET_PICCFG_V40!" + m_struPicCfgV40.struMotion.byEnableDisplay);
    }
}

libbit702
16 声望3 粉丝