我使用onvif相机,但发现时存在一些问题。
使用如下的非常基本的发现代码,我从网络上的大多数设备获得回复,但有一些被丢弃。我添加了跟踪日志记录,我可以看到发现客户端使用描述
丢弃的消息DiscoveryClient删除了带有messageId ='uuid:xxx'和relateTo ='uuid:xx'的ProbeMatches消息,因为相应的Find操作已完成或 relateTo值无效。
查看跟踪中的relateTo值以及MS网络监视器中的relatedTo值,它们似乎完全相同,并且在前几个回复中被删除的值,所以我不认为它们是在操作完成之后。< / p>
我还运行了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);
}
答案 0 :(得分:0)
我在ONVIF模式下遇到了一些ACTi相机(例如KCM-3911,I51)的同样问题。两个ONVIF客户端 - ONVIF测试工具和Onvif设备管理器 - 能够发现这些摄像头,但不是我自己的代码,这基本上等同于您的代码。在检查包含与您的错误相同的错误的WCF消息和跟踪日志,并比较来自这些摄像头的Probe和ProbeMatch回复时,我注意到messageId和relateTo值都缺少&#34; urn:&#34; WS寻址所需的前缀。
我已与ACTi技术支持部门联系,了解这种不符合依赖于WS地址规范的ONVIF规范的差异。同时,我正在研究ONVIF测试工具和Onvif设备管理器如何处理ProbeMatch以发现这些摄像机,尽管他们正在做的事情必须不符合规范,否则他们也会拒绝ProbeMatch回复像WCF。