大家知道EasyCVR支持云台控制,可以远程控制云台,目前我们在对EasyCVR的设备对接进行新的开发,如果使用大华设备,我们要求能够通过大华的SDK获取所有的预置点。
在该功能的开发中,我们使用CLIENT_QueryRemotDevState函数用来获取预置点位置,调用CLIENT_QueryRemotDevState函数时,此函数返回值始终是FALSE(获取失败),函数返回值是7。
在大华文档中查找7代表:“用户参数不合法”(下图)。
所以大华文档中已经说明参数不合法了,CLIENT_QueryRemotDevState函数有7个参数:分别为登录设备的句柄、查询信息类型、通道号、输出pBuf、缓存长度、输出参数和等待时间(下图为官方文档)。
下面来一个一个参数分析:
第一个参数是登录句柄,此参数肯定没错,如果错误就不会返回7。
第二个参数是需要查询的信息类型,我们需要查询设备的预置位,所以只能填:DH_DEVSTATE_PTZ_PRESET_LIST
第三个参数是通道号,因为直接连接摄像机,所以为0;
第四个参数是输出的参数,且根据第二个参数来的,对应的NET_PTZ_PRESET_LIST结构体;
第五个参数是第四个参数大小:sizeof(NET_PTZ_PRESET_LIST)来计算大小即可;
第六个参数是等待时长,默认是3000ms;
所以在分析参数中得知,如果出错最有可能是第四个参数的问题(第四个参数的结构体如下):
查看此结构体得知有四个值,最后问题就明朗了,添加此四个值即可。那么直接上修改过的代码:
最后还需要特别注意一点,需要分配内存给pstuPtzPorsetList。