使用Onvif協議進行裝置PTZ雲台控制

2021-08-06 02:53:49 字數 2537 閱讀 2895

使用onvif協議最重要的應用就是對裝置進行ptz雲台控制,ptz控制包含轉動、變焦等,這裡我們主要討論常用的轉動和變焦(也就是放大縮小)

要進行裝置ptz控制,我們首先需要獲取到裝置的device service address和此裝置的使用者名稱密碼

前兩個流程和獲取流位址一樣

獲取裝置能力capabilities

獲取裝置的能力,並且可以獲取到media和ptz的uri,使用這兩個url可以進行流和ptz操作,這裡如果ptz uri獲取不到意味著這個裝置無法支援ptz控制

_tds__getcapabilities* capabilities = soap_new__tds__getcapabilities(proxydevice, -1);

tt__capabilitycategory* category = new tt__capabilitycategory;

capabilities->category = category;

*(capabilities->category) = tt__capabilitycategory__all;

_tds__getcapabilitiesresponse* response = soap_new__tds__getcapabilitiesresponse(proxydevice, -1);

if (soap_ok == proxydevice->getcapabilities(capabilities, response))

}

獲取media profile

使用上一步獲取到的media uri獲取裝置的media profile

_trt__getprofiles* getprofiles = soap_new__trt__getprofiles(proxymedia, -1);

_trt__getprofilesresponse* response = soap_new__trt__getprofilesresponse(proxymedia, -1);

if (soap_ok == proxymedia->getprofiles(getprofiles, response))

}}

ptz控制

使用獲取的media uri和media profile token進行ptz控制

ptz控制,這裡只考慮continuousmove,需要在停止的時候傳送停止命令

_tptz__continuousmove* continuousmove = soap_new__tptz__continuousmove(ptzproxy, -1);

_tptz__continuousmoveresponse* response = soap_new__tptz__continuousmoveresponse(ptzproxy, -1);

continuousmove->profiletoken = const_cast(profile.c_str());

tt__ptzspeed* velocity = soap_new_tt__ptzspeed(ptzproxy, -1);

continuousmove->velocity = velocity;

tt__vector2d* pantilt = soap_new_tt__vector2d(ptzproxy, -1);

continuousmove->velocity->pantilt = pantilt;

continuousmove->velocity->pantilt->space = "";

tt__vector1d* zoom = soap_new_tt__vector1d(ptzproxy, -1);

continuousmove->velocity->zoom = zoom;

switch (command)

if (ptzproxy->continuousmove(continuousmove, response) == soap_ok)

//轉動成功

停止ptz控制

_tptz__stop* stop = soap_new__tptz__stop(ptzproxy, -1);

_tptz__stopresponse* response = soap_new__tptz__stopresponse(ptzproxy, -1);

stop->profiletoken = const_cast(profile.c_str());

bool* pantilt = new bool;

stop->pantilt = pantilt;

*(stop->pantilt) = true;

bool* zoom = new bool;

stop->zoom = zoom;

*(stop->zoom) = true;

if (soap_ok == ptzproxy->stop(stop, response))

//停止成功

LiveNVR中使用Onvif協議控制預置位

livenvr支援預置位控制,包括轉到指定預置位,設定指定預置位,刪除指定預置位 預置位在安防領域有較為普遍的應用,可以進行很多既定位置的跳轉,很方便 之前我們說過如何用onvif協議進行裝置的發現,探測,以及雲台控制等,今天我們來說一下如何使用onvif進行預置位的操作 獲取裝置能力capabil...

LiveNVR中使用Onvif協議控制預置位

livenvr支援預置位控制,包括轉到指定預置位,設定指定預置位,刪除指定預置位 預置位在安防領域有較為普遍的應用,可以進行很多既定位置的跳轉,很方便 之前我們說過如何用onvif協議進行裝置的發現,探測,以及雲台控制等,今天我們來說一下如何使用onvif進行預置位的操作 獲取裝置能力capabil...

LiveNVR中使用Onvif協議獲取裝置快照

我們知道livenvr中可以獲取快照資訊,之前的文章也說明了livenvr是如何進行快照抓取的 這裡我們使用另一種方法進行快照的抓取 獲取裝置能力capabilities 獲取裝置的能力,並且可以獲取到media和ptz的uri,使用media的uri,可以進行快照的抓取 tds getcapabi...