[英]How to use the onvif ptz wsdl
我正在嘗試使用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失敗,因為它包含無法解析的鏈接。 此外,當我在我的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操作應該持續的秒數。
希望它可以幫助某人。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.