onvif服务器篇之onvif 服务器框架的搭建
ONVIF Server框架搭建#
一、利用gSoap生成ONVIF Server框架
1. 下载GSOAP包
2. 编译GSOAP
软件安装三部曲:
./configure --prefix=~/gSoap(你自己的选择的安装路径)
sudo make
make install
如果遇到错误,请参考https://blog.****.net/qq_18854309/article/details/76737948
等相关博客
3. 使用GSOAP工具生成onvif.h文件
- 在gsoap-2.8目录下新建一个目录,目录的名字随意,比如
onvif_build
(注意改目录的位置为gsoap-2.8/onvif_build); - 将gsoap-2.8/gsoap路径下的typemap.dat和gsoap-2.8/_install/bin下的wsdl2h放入
onvifh_build
目录下; - 确认当前网络是否联网,确保网络在联网状态下,并且要求网络畅通;
- 在terminal终端输入cd跳转到
onvif_build
目录,并输入以下命令:
wsdl2h -o onvif.h -c -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl
备注:
1、这部分的意思是生成c语言版本的onvif.h头文件,如果想生成c++版本,则只需把-c改成-c++,其他选项的意思可以通过wsdl2h -help查看,这里就不多讲解;
2、后面的这些http链接里对应着相应的资源,由于完成本项目只需要用到device maneger、media、以及discovery等模块的部分功能,故只获取了这几个链接的资源。
3、想要获取更多的功能模块链接,参考博客:https://blog.****.net/toasun/article/details/38532193
4. 根据onvif.h文件生成所需要的onvif源文件
- 将gsoap-2.8/install/bin下的soapcpp2文件和gsoap-2.8/gsoap/custom、import、plugin三个目录拷贝到
onvifh_build
目录下; - 在terminal终端输入以下命令:
soapcpp2 -cpp onvif.h -x -L -I./ -I./gsoap -I./import/ -I./custom -I./plugin
备注:
这部分基本都会遇到这个错误,有两种处理方法:
1、只需要去import目录下修改wsa5.h,找到
SOAP_ENV__Fault
这个结构体,并且直接把这个结构体注释掉就行了2、找到
SOAP_ENV__Fault
这个结构体, 把这个结构体改成SOAP_ENV__Fault_alex
这里我用的是方法2
5. 筛选onvif源文件,组成onvif服务器框架
- 在
onvifh_build
目录下创建服务器框架目录,名字随机,比如onvif_server
; - 将以下文件拷贝到
onvif_server
目录:
这样onvif服务器框架就搭好了,后面的所有开发都在这个目录下进行。
(备注:如果后面工程中编译代码时出现几十几百个未定义的错误,属于正常现象,这些错误是来自于前面我们获取的那些wsdl文件,各个wsdl文件对应各个模块的接口,但是这些接口需要我们自己去实现,这是ONVIF的实现机制,哪怕没有调用到,也要给一个空函数体)