2015-02-06 132 views
3

我試圖用http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl文件控制PTZ攝像機。如何使用onvif ptz wsdl

我可以使用沒有問題的GotoPreset函數,但ContinuousMove函數拋出ProtocolException。 「指南」顯示瞭如何使用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的問題。但是,當我將ver20的服務引用添加到wsdl並將其更改爲ver10時,我收到一條消息,指出添加wsdl失敗,因爲它包含無法解析的鏈接。另外,當我粘貼ver10網址(http://www.onvif.org/onvif/ver10/ptz/wsdl/ptz.wsdl)在我的瀏覽器時,它顯示了一個xml而不是wsdl。

如何使用正確的wsdl文件,如果我沒有使用它或什麼可以解決我當前的設置中的行爲?

回答

2

我找到了解決方案。

原來我誤解了PtzClient.ContunuousMove中的超時參數。在之前的wsdl版本(版本10)中,每當您希望當前的PTZ操作停止時,您必須調用停止功能。在wsdl的ver20中,PTZ功能(除非調用Stop功能)將持續與timeout參數中指定的一樣長的時間。我認爲這是一個響應超時或什麼,但事實並非如此。

調用ContinuousMove現在看起來是這樣的:

PtzClient.ContinuousMove(profile.token, velocity, "PT1S"); 

凡字符串中的數字表示的秒雲臺動作應該持續量。

希望它可以幫助別人。