获取本机的各网卡的IP地址:
windows上使用GetAdaptersInfo的API。
linux上使用getifaddrs的api。
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的线程池类。
简单修改源码即可以用于生产环境中。
这里也一并给出其它网友的解决方法:
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”表示感谢!
----------------------------------------------------
参考: