2

我使用 onvif 相机,但发现有一些问题。

使用如下非常基本的发现代码,我得到了我们网络上大多数设备的回复,但有一些被丢弃了。我添加了跟踪日志记录,我可以看到发现客户端丢弃的消息以及描述

DiscoveryClient 删除了带有 messageId='uuid:xxx' 和 relatedTo='uuid:xx' 的 ProbeMatches 消息,因为相应的 Find 操作已完成或相关的值无效。

查看跟踪中的相关值以及 MS 网络监视器中的值,它们似乎完全相同,而被丢弃的那些在前几个回复中,所以我认为它们不是在操作完成之后。

我还运行了 sourceforge 上的 onvif 设备管理器,这有同样的问题,但使用不同的设备,以前有没有人遇到过这个问题或者有任何想法可能导致它。

public void TryToDiscoverClients()
    {

        System.Net.ServicePointManager.Expect100Continue = false;

        var endPoint = new UdpDiscoveryEndpoint(DiscoveryVersion.WSDiscoveryApril2005);

        var discoveryClient = new DiscoveryClient(endPoint);
        discoveryClient.FindProgressChanged += discoveryClient_FindProgressChanged;

        FindCriteria findCriteria = new FindCriteria();
        findCriteria.Duration = TimeSpan.MaxValue;
        findCriteria.MaxResults = int.MaxValue;

        findCriteria.ContractTypeNames.Add(new XmlQualifiedName("NetworkVideoTransmitter", @"http://www.onvif.org/ver10/network/wsdl"));
        findCriteria.ContractTypeNames.Add(new XmlQualifiedName("Device", @"http://www.onvif.org/ver10/device/wsdl"));

        discoveryClient.FindAsync(findCriteria);

    }

    private void discoveryClient_FindProgressChanged(object sender, FindProgressChangedEventArgs e)
    {
        Results.Add(e);
    }
4

1 回答 1

0

我在 ONVIF 模式下使用一些 ACTi 相机(例如,KCM-3911、I51)也遇到了同样的问题。两个 ONVIF 客户端 - ONVIF 测试工具和 Onvif 设备管理器 - 能够发现这些相机,但不是我自己的代码,这基本上等同于您的代码。在检查包含与您的错误相同的错误的 WCF 消息和跟踪日志并比较来自这些摄像头的 Probe 和 ProbeMatch 回复时,我注意到 messageId 和 relatedTo 值都缺少 WS 寻址所需的“urn:”前缀。

我已就这种不符合依赖于 WS 寻址规范的 ONVIF 规范的差异联系了 ACTi 技术支持。同时,我正在研究 ONVIF 测试工具和 Onvif 设备管理器如何处理 ProbeMatch 以发现这些摄像机,尽管它们所做的必须不符合规范,否则它们也会拒绝 ProbeMatch 回复像 WCF。

于 2014-11-05T03:31:57.300 回答