【问题标题】:async move protocol violation and/or connection lost ONVIF异步移动协议违规和/或连接丢失 ONVIF
【发布时间】: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.xvelocity.PanTilt.y 改回零,然后再发送另一个异步移动请求。

经过几次移动/停止后,我一直失去与相机的连接...

我想知道是不是因为我同时发出了太多的异步请求还是什么...

一开始我以为是我的网络问题,因为我是通过wifi连接到相机的,但是我尝试直接用以太网电缆连接它并没有改变任何东西......

我想知道我的移动方式是否可行,是否有更好的方法可以做到这一点,而不会让我的应用程序中断并在我的标题中收到错误(违反协议等)...

我还使用OnvifDeviceManager 应用程序来指导自己完成这个项目的开发,看看我能做什么和不能做什么,但似乎即使这个应用程序在经过几次 ptz 后也会崩溃/失去与相机的连接行动...

【问题讨论】:

    标签: c# asynchronous onvif


    【解决方案1】:

    我认为问题在于同时发送/接收的移动请求太多......

    但是,我刚刚发现有一个 ptzClient.Stop(profile.token, true, false) 函数完全符合我的要求......

    如果第一个布尔值为真,它会停止给定的 ptzClient 平移/倾斜,如果第二个布尔值为真,它会停止缩放。

    当我使用此命令时,我的应用程序似乎持续更长时间。

    问题仍然存在,但频率降低了!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-07
      • 2017-01-27
      • 1970-01-01
      相关资源
      最近更新 更多