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

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

/************************************************************************

** 对应CLIENT_DHPTZControlEx接口

***********************************************************************/

以下是大华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;

}

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

上面的预置点都比较简单,最麻烦的还是修改预置点里面的信息。

修改预置点里面的信息必须要先获取预置点信息,在进行修改,所以这二个基本是一套。

获取预置点信息:

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: 预置点坐标

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

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

 

posted on 2021-12-22 17:48  EasyCVR视频融合平台  阅读(702)  评论(0)    收藏  举报