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