1. 程式人生 > 其它 >EasyCVR新增大華攝像頭通過SDK實現增刪改查預置點實現分享

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變數在加一個維度的陣列(這個比較重要,不加上否則修改不成功)