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

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