onvif服务器篇之onvif 服务器框架的搭建

ONVIF Server框架搭建#


一、利用gSoap生成ONVIF Server框架

1. 下载GSOAP包

地址:
https://sourceforge.net/projects/gsoap2/


2. 编译GSOAP

软件安装三部曲:

./configure --prefix=~/gSoap(你自己的选择的安装路径)

sudo make

make install

如果遇到错误,请参考https://blog.csdn.net/qq_18854309/article/details/76737948
等相关博客


3. 使用GSOAP工具生成onvif.h文件

  1. 在gsoap-2.8目录下新建一个目录,目录的名字随意,比如onvif_build(注意改目录的位置为gsoap-2.8/onvif_build);
  2. 将gsoap-2.8/gsoap路径下的typemap.dat和gsoap-2.8/_install/bin下的wsdl2h放入onvifh_build目录下;
  3. 确认当前网络是否联网,确保网络在联网状态下,并且要求网络畅通;
  4. 在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.csdn.net/toasun/article/details/38532193


4. 根据onvif.h文件生成所需要的onvif源文件

  1. 将gsoap-2.8/install/bin下的soapcpp2文件和gsoap-2.8/gsoap/custom、import、plugin三个目录拷贝到onvif_build目录下;
  2. 在terminal终端输入以下命令:

soapcpp2 -cpp onvif.h -x -L -I./ -I./gsoap -I./import/ -I./custom -I./plugin

备注:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H96bb8Pd-1581208220559)(https://i.imgur.com/2ZLAJEd.png)]

这部分基本都会遇到这个错误,有两种处理方法:

1、只需要去import目录下修改wsa5.h,找到SOAP_ENV__Fault这个结构体,并且直接把这个结构体注释掉就行了

2、找到SOAP_ENV__Fault这个结构体, 把这个结构体改成SOAP_ENV__Fault_alex

这里我用的是方法2


5. 筛选onvif源文件,组成onvif服务器框架

  1. onvifh_build目录下创建服务器框架目录,名字随机,比如onvif_server
  2. 将以下文件拷贝到onvif_server目录:
    onvif服务器篇之onvif 服务器框架的搭建_第1张图片

这样onvif服务器框架就搭好了,后面的所有开发都在这个目录下进行。

我把基于onvif服务器端设备发现的代码放在github上了,附上链接https://github.com/As772309423/onvif-server-discover
下载完后直接make就可以了。

(备注:如果后面工程中编译代码时出现几十几百个未定义的错误,属于正常现象,这些错误是来自于前面我们获取的那些wsdl文件,各个wsdl文件对应各个模块的接口,但是这些接口需要我们自己去实现,这是ONVIF的实现机制,哪怕没有调用到,也要给一个空函数体)

你可能感兴趣的:(ONVIF,ONVIF,服务器)