我正在尝试使用http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl文件控制PTZ摄像机。
我可以无问题地使用GotoPreset函数,但是ContinuousMove函数会抛出ProtocolException异常。 this指南的第77页显示了如何使用ConinuousMove函数的示例。
按照此指南提供的代码,我得到了以下代码:
但是,与指南中的代码有一些差异,例如我的代码中实际的ContinuousMove函数需要3个参数,而不是指南中的2个。额外的参数是超时,所以我认为这不会有太大的影响,但可能还有其他不同之处导致我的代码失败。
我阅读了this问题的答案,在其中该人说PTZ摄像机不支持ver20。但是当我将服务引用添加到wsdl中,并将ver20更改为ver10时,我收到一条消息,告诉我添加wsdl失败,因为它包含无法解析的链接。此外,当我将ver10 url(http://www.onvif.org/onvif/ver10/ptz/wsdl/ptz.wsdl)粘贴到我的Web浏览器中时,它显示一个xml,而不是wsdl。
如果我还没有使用正确的wsdl文件,我应该如何使用它,或者什么可以解决我当前设置的行为?
我可以无问题地使用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失败,因为它包含无法解析的链接。此外,当我将ver10 url(http://www.onvif.org/onvif/ver10/ptz/wsdl/ptz.wsdl)粘贴到我的Web浏览器中时,它显示一个xml,而不是wsdl。
如果我还没有使用正确的wsdl文件,我应该如何使用它,或者什么可以解决我当前设置的行为?