一,采用gSOAP 生成ONVIF Server框架
1.下载gSOAP包
下载地址:https://sourceforge.net/projects/gsoap2/
注:本博主采用gSoap 2-8-113版本 平台centos7(linux 平台)
2.编译gSoap工具
命令:(进入解压后的gSoap目录)
./configure --prefix=$(pwd)/install (在本目录install后生成文件如下图)
sudo make
make install
3编译中的问题解决如下
本博主遇见的问题:
解决方法:如下将stdsoap2_cpp.cpp 22562行strerror_r返回值注销
4编译成功后开始生成onvif.h文件
命令:../install/bin/wsdl2h -c -t ../gsoap/typemap.dat -o ./onvif.h http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl
5生成c环境代码命令:(进入你创建的文件夹本博主在当前目录下创建一个目录)
命令: ../install/bin/soapcpp2 -c -s -x -2 onvif.h -I ../gsoap/import -I ../gsoap -I ../gsoap/custom
下图是我本人环境
借鉴此博主的教程:https://blog.youkuaiyun.com/qq_18854309/article/details/76737948
稍有改动
开始编写onvif_server_interface.c文件上面添加如下代码获取本机MAC地址
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <net/if.h>
int get_mac(const char* mac,const char* eth_name)
{
struct ifreq pifreq;
int sock;
int ret;
if(mac == NULL)
{
printf("mac is NULL \n");
return -EINVAL;
}
sock = socket(AF_INET,sock_stream,0);
if(sock<0)
{
printf("socket error!\n");
return -EINVAL;
}
strcpy(pifreq.ifr_name,eth_name);
ret = ioctl(sock,SIOCGIFHWADDR,&pifreq);
if(ret<0)
{
perror("ioctl");
return -EINVAL;
}
strncpy(mac,pifreq.ifr_hwaddr.sa_data,6);
return0;
}
修改soapStub.h添加如下代码
在make 生成如下deviceserver可执行文件
6.onvif device tool 测试
7.服务端测试成功
8.测试代码 https://download.youkuaiyun.com/download/qq_38542509/16798542
9.接下来开始服务端功能开发............