我正在尝试使用http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl文件控制 PTZ 摄像机。
我可以毫无问题地使用 GotoPreset 函数,但 ContinuousMove 函数会引发 ProtocolException。
本指南的第 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 个。额外的参数是一个超时,所以我认为这不会有太大的不同,但也许其他一些不同的东西会导致我的代码失败。
我读了这个问题的答案,那个人说 PTZ 摄像机不支持 ver20。但是,当我添加对 wsdl 的服务引用并将 ver20 更改为 ver10 时,我收到一条消息,指出添加 wsdl 失败,因为它包含无法解析的链接。此外,当我在我的网络浏览器中粘贴 ver10 url ( http://www.onvif.org/onvif/ver10/ptz/wsdl/ptz.wsdl ) 时,它会显示 xml 而不是 wsdl。
如果我还没有使用正确的 wsdl 文件,或者什么可以解决我当前设置中的行为,我该如何使用它?