第一步、下載gsoap
從gsoap官網(http://www.genivia.com/products.html#notice)下載最新版gsoap(博主用的是gsoap_2.8.45)。gsoap有三個版本:Open Source gSOAP、Commercial gSOAP Edition、Commercial gSOAP Edition。我們下載開源版本即可。
第二步、解壓gsoap並建立文件夾層次
新建一個文件夾,命名為OnvifFramework,將下載下來的gsoap_x.x.xx.zip解壓到該文件夾。在該文件夾下再新建兩個文件夾,分別命名為:level1和ver10。在level1文件夾下新建一個文件夾,命名為:level2。在level2文件夾下新建三個文件夾,分別命名為:FrameworkSource、GenerateSource、ver10。在ver10文件夾下建立三個文件夾,分別命名為:device、media、schema。在device和media文件夾下新建一個文件夾,命名為wsdl。在ver10文件夾下新建一個文件夾,命名為schema。文件夾請務必按這個順序建立。最后將OnvifFramework\gsoap-2.8\gsoap路徑下的typemap.dat和OnvifFramework\gsoap-2.8\gsoap\bin\win32路徑下的wsdl2h.exe、soapcpp2.exe(wsdl2h不支持https,需要重新編譯gsoap,編譯方法參照最下面的博客鏈接)拷貝到GenerateSource文件夾下。
具體文件夾層次結構如下圖所示:
第三步、下載Onvif相關文件
從Onvif官網(http://www.onvif.org/Documents/Specifications.aspx)的ONVIF WSDL and XML Schemas Specifications頁面中下載wsdl(右鍵-將鏈接另存為即可),並將下載下來的wsdl放在GenerateSource文件夾內。拷貝devicemgmt.wsdl到D:\ONVIF\OnvifFramework\level1\level2\ver10\device\wsdl路徑下,拷貝media.wsdl到OnvifFramework\level1\level2\ver10\media\wsdl路徑下,拷貝onvif.xsd到OnvifFramework\level1\level2\ver10\schema路徑下,拷貝onvif.xsd到OnvifFramework\ver10\schema路徑下。
第四步、生成onvif.h
生成方式分為在線生成和本地生成兩種,鑒於在線生成的不穩定性,博主采用本地生成方式。打開控制台,切換到GenerateSource路徑下,在控制台中輸入wsdl2h -o onvif.h -t ./typemap.dat accesscontrol.wsdl accessrules.wsdl actionengine.wsdl advancedsecurity.wsdl analytics.wsdl analyticsdevice.wsdl
credential.wsdl deviceio.wsdl devicemgmt.wsdl display.wsdl doorcontrol.wsdl event.wsdl imaging.wsdl media.wsdl ptz.wsdl receiver.wsdl recording.wsdl remotediscovery.wsdl replay.wsdl schedule.wsdl search.wsdl
(各個wsdl間用一個空格隔開)
第五步、通過onvif.h文件生成源代碼框架
如果需要鑒權,修改onvif.h頭文件,加入#import "wsse.h"。將 OnvifFramework\gsoap-2.8\gsoap\import路徑下的wsa5.h中的SOAP_ENV__Fault結構體注釋掉或改為其他名字,如SOAP_ENV__Fault_alex。修改完后在控制台中輸入soapcpp2 -j onvif.h -I ../../../gsoap-2.8/gsoap/import:../../../gsoap-2.8/gsoap,看到Compilation successful即為成功。
第六步、整理源代碼
將生成的.h和.cpp文件以及wsdd.nsmap文件拷貝到FrameworkSource中,並拷貝OnvifFramework\gsoap-2.8\gsoap路徑下的stdsoap2.h和stdsoap2.cpp到該文件夾。
總結
通過以上六個步驟即可完成ONVIF開發框架搭建,以后開發Onvif應用時,直接拷貝FrameworkSource文件夾中的文件即可(開發Onvif客戶端程序,使用XXXXProxy.h和XXXXProxy.cpp,開發Onvif服務器端程序,使用XXXXService.h和XXXXService.cpp)。Onvif框架文件已上傳,請到此處(http://download.csdn.net/download/u011110151/9898860)下載。
這篇博客(http://blog.csdn.net/saloon_yuan/article/details/24901597)及這篇博客(http://blog.csdn.net/benkaoya/article/details/72466827)給予博主很大幫助,特此感謝。