gsoap -onvif编译过程

最近工作需要用到onvif协议,整理一下编译过程遇到的问题:

编译工具是: gsoap, 版本gsoap-2.8.50; 可在官网下载;
WSDL文件: 下载地址:https://www.onvif.org/profiles/specifications/

编译命令:
第一步生成 onvif.h 文件:
wsdl2h -o onvif.h -t ./typemap.dat remotediscovery.wsdl devicemgmt.wsdl analytics.wsdl analyticsdevice.wsdl media.wsdl deviceio.wsdl display.wsdl event.wsdl imaging.wsdl recording.wsdl replay.wsdl search.wsdl receiver.wsdl ptz.wsdl media2.wsdl

其中remotediscovery.wsdl是关于设备搜索的,但是官网主页上面没有找到,非常奇怪,我是通过别人博客找到的==;
remotediscovery.wsdl :用于发现设备
devicemgmt.wsdl :用于获取设备参数
media.wsdl:用于获取视频流地址
ptz.wsdl:用于设备的PTZ控制

需要修改的地方(坑很多,所以要改):

  1. 后续编译源代码需要用到 duration.c 文件,但是会遇到类型LONG64报错的问题;
    需要 生成头文件时,在 typemap.dat 文件中重新生成代码

xsd__duration = #import “custom/duration.h” | xsd__duration
查看typemap.dat文件发现该段代码是被注释掉的,取消注释就行了;

  1. onvif.h 添加:
    #import “wsse.h”
    网上的资料说onvif 如果需要鉴权就需要加上这段代码,只能吐槽一下,这个工具不能自己添加吗??

  2. 新增支持h265的代码行 在typemap.data文件中添加
    tr2 = http://www.onvif.org/ver20/media/wsdl
    tr2 可以自己随便命名,以后关于h265接口的都会以tr2名字出现。这段也是网上某博主说的,和h265相关,我自己还没验证;反正官网上面media.wsdl的确是有2个文件;所以我就添加了;

  3. 在使用 wsdl2h的时候可以加一些参数,最开始我是用-c -s生成 c的代码,但是后续编译源文件始终报错,所以我就去掉了 –c –s ,然后报错就没了==,具体原因还没查到;

第二步 生成源代码文件:
soapcpp2 -2 -X onvif.h -I .\custom -I .\import -I …\gsoap
(这个命令的参数有点忘记了,之前记录的txt文件找不到了==)
-X 表示生成时不产生 xml文件;
需要把custom目录以及 import 目录拷贝到 soapcpp2执行目录下(\gsoap\bin\win32文件夹下), 还有一个plugin文件夹,具体需不需要也不是特别清楚,没有他也能编译过

执行完后,会在执行路径下生成源代码:
取出来编译; 最后我这边一共是22个文件;

编译时 会报一个错:
需要吧 soapStub.h 文件中的一个宏注释掉:
// #define SOAP_WSA_2005

然后在项目使用时:
需要自己添加宏定义(很多这方面的说明都在生成的源文件的注释中,所以很坑,别的开源项目至少会有一个ReadMe文件指导你编译==):
add_definitions(-DWITH_OPENSSL)
add_definitions(-DWITH_DOM)

以上就是编译的全过程;编译后的源代码如果需要可以直接下载:
https://download.csdn.net/download/liuliu0322/11253243

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章