我使用的是onvif相机,但发现时有一些问题。
使用以下非常基本的发现代码,我会从网络上的大多数设备中得到答复,但其中一些已被丢弃。我已经添加了跟踪日志记录,并且可以看到带有描述的发现客户端丢弃的消息
DiscoveryClient删除了messageId ='uuid:xxx'和relatedTo ='uuid:xx'的ProbeMatches消息,因为相应的Find操作已完成或
relatedTo值无效。
在跟踪以及MS Network Monitor中查看relatedTo值时,它们似乎完全相同,而被删除的值在前几个答复中,因此我不认为它们是在操作完成之后。
我还运行了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);
}
最佳答案
我在ONVIF模式下使用某些ACTi相机(例如KCM-3911,I51)遇到了同样的问题。两个ONVIF客户端-ONVIF测试工具和Onvif设备管理器-能够发现这些摄像机,但不能发现我自己的代码,该代码本质上与您的代码等效。在检查包含与您的错误相同的WCF消息和跟踪日志,并比较这些摄像机的Probe和ProbeMatch答复时,我注意到messageId和relatedTo值都缺少WS Addressing所需的“ urn:”前缀。
我已与ACTi技术支持部门联系,以解决此差异,该差异与依赖WS Addressing规范的ONVIF规范不一致。同时,我正在研究ONVIF测试工具和Onvif设备管理器如何处理ProbeMatch以发现这些摄像机,尽管它们所做的一定与规格不符,否则它们也将拒绝ProbeMatch的答复像WCF。
关于c# - 发现-ProbeMatch响应被丢弃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21408519/