onvif_discovery_client搜索多个网段内的onvif设备(IPC)

时间:2022-09-08 23:17:30
##简介
  轻量级的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_client搜索多个网段内的onvif设备(IPC)

源码参考:

onvif_discovery_device 下载源码 (附带可运行的执行程序)

源码主要用了boost、asio、udp, 有STL、boost库使用基础的同学应该很容易就看明白了,并带了一个asio实现io_service的线程池类。

简单修改源码即可以用于生产环境中。


这里也一并给出其它网友的解决方法:

Onvif 设备发现的多网卡选择问题

依赖gsoap库多网卡的onvif搜索方法

http://blog.csdn.net/chenben/article/details/12650899


ONVIF、RTSP/RTP、FFMPEG的开发实录

有关于非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