EasyCVR添加大华摄像头通过SDK实现增删改查预置点实现分享

EasyCVR需要添加大华摄像头的预置点,并实现预置点的增删改查。查看文档可以获得对应的接口,大华SDK设置、删除和移动预置点接口如下:

/************************************************************************
** 对应CLIENT_DHPTZControlEx接口
***********************************************************************/

image.png

image.png

以下是大华SDK获取和改变预置点接口:

/************************************************************************
** 配置命令 对应CLIENT_GetNewDevConfig和CLIENT_SetNewDevConfig接口
***********************************************************************/
#define CFG_CMD_PTZ_PRESET                      "PtzPreset"                 // 云台预置点配置(对应结构 PTZ_PRESET_INFO)
 
// 云台预置点配置对应结构
typedef struct tagPTZ_PRESET_INFO
{
         DWORD              dwMaxPtzPresetNum;                     // 最大预置点个数
         DWORD              dwRetPtzPresetNum;                     // 实际使用预置点个数
         PTZ_PRESET         *pstPtzPreset;                         // 预置点信息(根据最大个数申请内存)
}PTZ_PRESET_INFO;
 
// 云台控制预置点结构
typedef struct tagPTZ_PRESET
{
         BOOL                 bEnable;                             // 该预置点是否生效
         char                 szName[MAX_PTZ_PRESET_NAME_LEN];     // 预置点名称
         CFG_PTZ_SPACE_UNIT   stPosition;                          // 预置点的坐标和放大倍数
}PTZ_PRESET;
 
// 云台控制坐标单元
typedef struct tagCFG_PTZ_SPACE_UNIT
{
         int                    nPositionX;           //云台水平运动位置,有效范围:[0,3600]
         int                    nPositionY;           //云台垂直运动位置,有效范围:[-1800,1800]
         int                    nZoom;                //云台光圈变动位置,有效范围:[0,128]
}CFG_PTZ_SPACE_UNIT;

上面已经知道每个预置点所对应的接口,下面就是用来实现这些接口用来控制云台操作。
因为设置、删除和移动都是相同的接口调用,所以写一个函数实现这三个接口:

int Dahua_Preset_Operate(LLONG handle, int channelNum, DH_PTZ_ControlType cmd, int param2) {
	BOOL bRet = CLIENT_DHPTZControlEx(handle, channelNum, cmd, 0, (long)param2, 0, FALSE);
	if (bRet == FALSE) {
		return EasyGetLastError();
	}
	return 0;
}

添加、删除和移动预置点:

image.png

上面的预置点都比较简单,最麻烦的还是修改预置点里面的信息。
修改预置点里面的信息必须要先获取预置点信息,在进行修改,所以这二个基本是一套。

获取预置点信息:

int get_err = 0;
	const int len = 256 * 1024;
	char get_info[len] = { 0 };
	BOOL ret = CLIENT_GetNewDevConfig(handle, CFG_CMD_PTZ_PRESET, -1, get_info, len, &get_err, 10 * 1000);

获取预置点信息需要注意几点:
1、第三个参数为-1
2、第四个参数必须要分配内存和传入char类型,最后释放char资源
3、最后一个参数不能太小,否则获取失败,方法返回FALSE
4、第四个参数是json格式

设置预置点信息(本人只设置预置点名称):
BOOL bRet = CLIENT_SetNewDevConfig(handle, CFG_CMD_PTZ_PRESET, -1, get_info, strlen(get_info), NULL, NULL, 10 * 1000);
也要注意以下几点:
1、第三个参数为-1
2、第四个参数必须要分配内存和传入char类型,最后释放char资源,传入是json格式
3、获取到的预置点信息,可以保存文件查看(里面是二维数组)
Enable: true是已经有预置点
Name: 预置点名称
Position: 预置点坐标

image.png

4、修改预置点信息也需要二维数组,否则修改不成功,并将原来的预置点在浏览器显示不出来

image.png

下图是将原来的ch变量在加一个维度的数组(这个比较重要,不加上否则修改不成功)

image.png

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值