日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA实现onvif的ptz控制_使用Onvif协议进行设备PTZ云台控制

發布時間:2024/9/27 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA实现onvif的ptz控制_使用Onvif协议进行设备PTZ云台控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

接上一篇

使用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))

{

if (response->Capabilities)

{

//Media URI: response->Capabilities->Media->XAddr;

//PTZ URI: response->Capabilities->PTZ->XAddr;

}

}

獲取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))

{

int size = response->__sizeProfiles;

for (int i = 0; i < size; ++i)

{

if (response->Profiles[i])

{

//Media Profile Token: response->Profiles[i]->token;

//一般設備包含多個Profile Token,包含主碼流、子碼流、第三碼流

}

}

}

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 = "http://www.onvif.org/ver10/tptz/PanTiltSpaces/VelocityGenericSpace";

tt__Vector1D* zoom = soap_new_tt__Vector1D(ptzProxy, -1);

continuousMove->Velocity->Zoom = zoom;

switch (command)

{

case LEFT:

continuousMove->Velocity->PanTilt->x = -((float)speed / 10);

continuousMove->Velocity->PanTilt->y = 0;

break;

case RIGHT:

continuousMove->Velocity->PanTilt->x = ((float)speed / 10);

continuousMove->Velocity->PanTilt->y = 0;

break;

case UP:

continuousMove->Velocity->PanTilt->x = 0;

continuousMove->Velocity->PanTilt->y = ((float)speed / 10);

break;

case DOWN:

continuousMove->Velocity->PanTilt->x = 0;

continuousMove->Velocity->PanTilt->y = -((float)speed / 10);

break;

case ZOOMIN:

continuousMove->Velocity->Zoom->x = ((float)speed / 10);

break;

case ZOOMOUT:

continuousMove->Velocity->Zoom->x = -((float)speed / 10);

break;

default:

break;

}

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))

//停止成功

獲取更多信息

Copyright ? EasyDarwin.org 2012-2017

總結

以上是生活随笔為你收集整理的JAVA实现onvif的ptz控制_使用Onvif协议进行设备PTZ云台控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。