OnvifClientPTZ onvif c ++无法获取配置选项

时间:2016-05-22 19:35:58

标签: c++ soap gsoap onvif

tt__Profile *t = profiles.Profiles.at(0);

OnvifClientPTZ PTZ(onvifDevice);

_tptz__GetConfigurationOptions tptz__GetConfigurationOptions;
_tptz__GetConfigurationOptionsResponse  tptz__GetConfigurationOptionsResponse;
tt__PTZConfigurationOptions *options; 

int response = PTZ.GetConfigurationOptions(tptz__GetConfigurationOptionsResponse, t->token);

问题是PTZ#GetConfigurationOptions返回值1(#response)。 对象#onvifDevice似乎没问题(onvifDevice.hasPTZ返回true)。 我已经尝试过调试和onvifDevice.GetPTZUrl(strUrl)返回true并将strUrl设置为192.168.1.88:2000/device/services,这是PtzProxy对象的soap_endpoint(ptzProxy.soap_endpoint = strUrl.c_str();)似乎没事soap_action也是" www.onvif.org/ver20/ptz/wsdl/GetConfigurationOptions"这也似乎很好。 我使用https://github.com/xsmart/onvifcpplib

在PTZ代理中返回:

tptz__GetConfigurationOptionsResponse->soap_get(soap, "tptz:GetConfigurationOptionsResponse", "");
if (soap->error)
    return soap_recv_fault(soap, 0);

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:0)

我找到了解决方案。问题在于这一行:

int response = PTZ.GetConfigurationOptions(tptz__GetConfigurationOptionsResponse, t->token);

OnvifPTZClient#GetConfigurationOptions请求PTZConfiguration令牌,而不是配置文件令牌。所以正确的行是:

response = PTZ.GetConfigurationOptions(tptz__GetConfigurationOptionsResponse, tr->PTZConfiguration->token);