轻量级的onvif设备搜索C++客户端。
完美解决多个网卡,多个不同网段内的IPC搜索问题,适用于NVR,监控主机等搜索onvif设备。
##特点
1、简单,不依赖gsoap.
2、支持多网卡,多网段,多IP搜索.彻底解决只能单IP网段搜索设备的限制。
2、使用boost,asio跨平台,支持windows,linux.
3、高效线程池处理udp收包,不丢包,不遗漏设备.
获取本机的各网卡的IP地址:
windows上使用GetAdaptersInfo的API。
linux上使用getifaddrs的api。
直接上例子:
##example:
void CALLBACK OnvifCallback_SearchDevice(int nType, int nValue, const char* pDeviceURL, int nDataSize, void* pUser)
{
std::cerr << " onvif device number=" << nValue << ", " << pDeviceURL << std::endl << std::endl;
}
int main(void )
{
CDiscovery proxy;
proxy.SetUserCallBack(OnvifCallback_SearchDevice, NULL);
proxy.start();
getchar();
proxy.stop();
return 0;
}
搜索结果:
源码参考:
onvif_discovery_device 下载源码 (附带可运行的执行程序)源码主要用了boost、asio、udp, 有STL、boost库使用基础的同学应该很容易就看明白了,并带了一个asio实现io_service的线程池类。
简单修改源码即可以用于生产环境中。
这里也一并给出其它网友的解决方法:
依赖gsoap库多网卡的onvif搜索方法
http://blog.csdn.net/chenben/article/details/12650899
有关于非soap框架的onvif设备发现源码(windows)
http://blog.csdn.net/Newyan3651/article/details/53130265
本人也主要是参考作者的代码修改而来,在此对该作者“Newyan3651”表示感谢!
----------------------------------------------------
参考:##ONVIF official website
http://www.onvif.org/
if you want to learn more onvif API
http://www.onvif.org/onvif/ver20/util/operationIndex.html