如何使用onvif ptz wsdl
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用onvif ptz wsdl相关的知识,希望对你有一定的参考价值。
我正在尝试使用http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl文件控制PTZ摄像机。
我可以毫无问题地使用GotoPreset函数,但ContinuousMove函数会抛出ProtocolException。
this指南的第77页显示了如何使用ConinuousMove函数的示例。
按照本指南为我提供了以下代码:
OnvifMediaClient.Profile[] profs = this.mediaClient.GetProfiles();
OnvifMediaClient.Profile profile = mediaClient.GetProfile(profs[0].token);
OnvifPTZ.PTZConfigurationOptions options = PtzClient.GetConfigurationOptions(profile.token);
OnvifPTZ.PTZSpeed velocity = new OnvifPTZ.PTZSpeed();
velocity.PanTilt = new OnvifPTZ.Vector2D();
velocity.Zoom = new OnvifPTZ.Vector1D();
velocity.PanTilt.x = options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Max;
velocity.PanTilt.y = options.Spaces.ContinuousPanTiltVelocitySpace[0].YRange.Max;
velocity.PanTilt.space = options.Spaces.ContinuousPanTiltVelocitySpace[0].URI;
velocity.Zoom.x = options.Spaces.ContinuousZoomVelocitySpace[0].XRange.Max;
velocity.Zoom.space = options.Spaces.ContinuousZoomVelocitySpace[0].URI;
PtzClient.ContinuousMove(profile.token, velocity, "1000");
Thread.Sleep(2000);
PtzClient.Stop(profile.token, true, true);
但是指南中的代码存在一些差异,例如实际的ContinuousMove函数在我的代码中需要3个参数而不是指南中的2个参数。额外的参数是超时,所以我认为这不会产生那么大的差异,但也许其他一些不同的东西导致我的代码失败。
我读了this的问题,因为有人说PTZ相机不支持ver20。但是当我向wsdl添加服务引用并将ver20更改为ver10时,我收到一条消息,指出添加wsdl失败,因为它包含无法解析的链接。此外,当我在我的webbrowser中粘贴ver10 url(http://www.onvif.org/onvif/ver10/ptz/wsdl/ptz.wsdl)时,它显示的是xml而不是wsdl。
如果我没有使用正确的wsdl文件或者什么可以解决我当前设置中的行为,我怎么能使用正确的wsdl文件?
我找到了解决方案。
事实证明我误解了PtzClient.ContunuousMove中的超时参数。在之前的wsdl版本(ver10)中,每当您希望当前的PTZ操作停止时,您必须调用Stop函数。在wsdl的ver20中,PTZ函数(除非调用Stop函数)将持续在timeout参数中指定的时间。我认为这是一个响应超时或其他什么,但事实并非如此。
现在调用ContinuousMove看起来像这样:
PtzClient.ContinuousMove(profile.token, velocity, "PT1S");
字符串中的数字代表PTZ操作应该持续的秒数。
希望它可以帮助某人。
以上是关于如何使用onvif ptz wsdl的主要内容,如果未能解决你的问题,请参考以下文章