【发布时间】:2018-07-10 01:50:37
【问题描述】:
一些背景信息:
我目前正在使用 Visual Studio 2017 并使用 ONVIF .wsdl(OnvifMedia10 和 OnvifPTZService)制作一个 c# windows 窗体应用程序。
我拥有目标相机的管理员权限。
我从我创建的 mediaClient 获得了一个配置文件:
var mediaEndPointAddress = new EndpointAddress($"http://{cameraAddress}/onvif/media");
var mediaEncoding = new TextMessageEncodingBindingElement
{
MessageVersion = MessageVersion.CreateVersion(EnvelopeVersion.Soap12, AddressingVersion.None)
};
var mediaBinding = new HttpTransportBindingElement
{
AuthenticationScheme = AuthenticationSchemes.Digest
};
var mediaCustomBinding = new CustomBinding(mediaEncoding, mediaBinding);
var mediaPasswordDigestBehavior = new PasswordDigestBehavior(userName, password);
mediaClient = new MediaClient(mediaCustomBinding, mediaEndPointAddress);
mediaClient.Endpoint.EndpointBehaviors.Add(mediaPasswordDigestBehavior);
var profs = mediaClient.GetProfiles();
profile = mediaClient.GetProfile(profs[0].token);
PasswordDigestBehavior 是我在此link 上找到的一些代码的一部分。
我使用相同的方法来获取 ptzClient 及其配置:
...
var ptzEndpointAddress = new EndpointAddress($"http://{cameraAddress}/onvif/ptz");
ptzClient = new PTZClient(commonCustomBinding, ptzEndpointAddress);
ptzClient.Endpoint.EndpointBehaviors.Add(commonPasswordDigestBehavior);
var configs = ptzClient.GetConfigurations();
options = ptzClient.GetConfigurationOptions(configs[0].token);
然后我创建了一个PTZSpeed 变量来保持我希望我的相机移动的方式:
velocity = new OnvifPTZService.PTZSpeed();
velocity.PanTilt = new OnvifPTZService.Vector2D();
velocity.Zoom = new OnvifPTZService.Vector1D();
我的问题:
当我想旋转目标相机时,我使用某种PanLeft() 函数:
public void PanLeft()
{
if(Initialised && CanPanTilt)
{
velocity.PanTilt.x = options.Spaces.ContinuousPanTiltVelocitySpace[0].XRange.Min;
velocity.PanTilt.y = 0;
ptzClient.ContinuousMoveAsync(profile.token, velocity, "PT5S");
}
}
为了停止摄像头,我将velocity.PanTilt.x 和velocity.PanTilt.y 改回零,然后再发送另一个异步移动请求。
经过几次移动/停止后,我一直失去与相机的连接...
我想知道是不是因为我同时发出了太多的异步请求还是什么...
一开始我以为是我的网络问题,因为我是通过wifi连接到相机的,但是我尝试直接用以太网电缆连接它并没有改变任何东西......
我想知道我的移动方式是否可行,是否有更好的方法可以做到这一点,而不会让我的应用程序中断并在我的标题中收到错误(违反协议等)...
我还使用OnvifDeviceManager 应用程序来指导自己完成这个项目的开发,看看我能做什么和不能做什么,但似乎即使这个应用程序在经过几次 ptz 后也会崩溃/失去与相机的连接行动...
【问题讨论】:
标签: c# asynchronous onvif