1. 下載gsoap :http://www.genivia.com/products.html#notice,既Open Source gSOAP版本,並解壓進入目錄安裝,configure後面的選項可以根據自己的需求添加,--prefix後面填寫的gsoa安裝所在的路徑,我安裝的是當前的路徑,如 ...
1. 下載gsoap :http://www.genivia.com/products.html#notice,既Open Source gSOAP版本,並解壓進入目錄安裝,configure後面的選項可以根據自己的需求添加,--prefix後面填寫的gsoa安裝所在的路徑,我安裝的是當前的路徑,如果prefix出現安裝錯誤,則需要把路徑改成絕對路徑。
- ./configure --enable-ipv6 --enable-debug --prefix=./
- make
- make install
2. gsoap雖然安裝完成,但是你還要檢查你的linux下是否也安裝了以下內容,沒有的話要安裝一下,gsoap才能正常使用:
- .Bison或Yacc 安裝:"https://www.gnu.org/software/bison/"
- Flex的安裝:"https://github.com/westes/flex/releases"
- OpenSSL 的安裝:"https://www.openssl.org/source/"
- 可選的Zlib支持:"http://www.zlib.net/"
3. 把gsoap-2.8/gsoap/typemap.dat也拷貝到一個新建工作目錄下,並修改該文件的內容,在命名空間已經存在的trt下,新增支持h265的代碼行 tr2 = http://www.onvif.org/ver20/media/wsdl ,tr2 可以自己隨便命名,以後關於h265介面的都會以tr2名字出現。
4.生成onvif.h:
線上生成:
- (http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/events/wsdl/event.wsdl http://www.onvif.org/onvif/ver10/display.wsdl http://www.onvif.org/onvif/ver10/deviceio.wsdl http://www.onvif.org/onvif/ver20/imaging/wsdl/imaging.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl http://www.onvif.org/onvif/ver10/receiver.wsdl http://www.onvif.org/onvif/ver10/recording.wsdl http://www.onvif.org/onvif/ver10/search.wsdl http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/replay.wsdl http://www.onvif.org/onvif/ver20/analytics/wsdl/analytics.wsdl http://www.onvif.org/onvif/ver10/analyticsdevice.wsdl http://www.onvif.org/onvif/ver10/schema/onvif.xsd http://www.onvif.org/ver10/actionengine.wsdl http://www.onvif.org/ver10/pacs/accesscontrol.wsdl http://www.onvif.org/ver10/pacs/doorcontrol.wsdl http://www.onvif.org/ver10/advancedsecurity/wsdl/advancedsecurity.wsdl http://www.onvif.org/ver10/accessrules/wsdl/accessrules.wsdl http://www.onvif.org/ver10/credential/wsdl/credential.wsdl http://www.onvif.org/ver10/schedule/wsdl/schedule.wsdl)
- 可以根據項目功能結合所需要的wsdl網址來生成onvif.h,可以減小編譯時間和減少整體框架大小: http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl:用於發現設備http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl :用於獲取設備參數http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl :用於獲取視頻流地址 https://www.onvif.org/ver20/media/wsdl/media.wsdl:用於獲取h265視頻流地址 http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl:用於設備的PTZ控制
- wsdl2h -o onvif.h -c -s -t typemap.dat http://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl http://www.onvif.org/onvif/ver10/media/wsdl/media.wsdl https://www.onvif.org/ver20/media/wsdl/media.wsdl http://www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdl
離線生成:
- 離線生成的好處是可以生成gsoap框架後,根據所需要的功能去裁剪 *.wsdl及onvif.xsd 來減小整體框架的大小。首先結合項目功能下載相關的wsdl文件:https://www.onvif.org/profiles/specifications/,右擊 *.wsdl,鏈接另存為即可保存成本地文件,也可以去上面線上生成wsdl網址右擊查看源代碼,另存為即可保存成wsdl文件。同時也要下載相關的 *.xsd文件。
- wsdl2h -o onvif.h -c -s -t typemap.dat -I gsoap-2.8/gsoap -I gsoap-2.8/gsoap/import/ remotediscovery.wsdl devicemgmt.wsdl media.wsdl media2.wsdl ptz.wsdl
- (media2.wsdl 是支持h265獲取視頻流地址:https://www.onvif.org/ver20/media/wsdl/media.wsdl)
5. 加入鑒權功能
- 在onvif.h的第100行加上 #import "wsse.h"
6. gsoap-2.8\gsoap\import路徑下的wsa5.h中的SOAP_ENV__Fault結構體註釋掉或改為其他名字,如SOAP_ENV__Fault_alex。
7.生成 *.c文件、*.h和命名空間*.nsmap:
- 將gsoap-2.8/gsoap/import/目錄拷貝到當前工作目錄
- soapcpp2 -c -x -I gsoap-2.8/gsoap -I ./import onvif.h
-
-C :僅生成客戶端代碼
-S:僅生成伺服器端代碼
-L:不要產生soapClientLib.c和soapServerLib.c文件
- c: 產生純C代碼,否則是C++代碼
-I:指定import路徑
-x:不要產生XML示例文件
8. 將gsoap-2.8\gsoap目錄下的兩個文件:stdsoap2.c、stdsoap2.h拷貝到你工作目錄下
9. 註釋stdsoap2.c如下代碼:不註釋的話會在編譯運行的時候產生log日誌,最後會發現磁碟已滿的現象。
/*
#ifdef SOAP_DEBUG
#ifdef TANDEM_NONSTOP
soap_set_test_logfile(soap, "TESTLOG");
soap_set_sent_logfile(soap, "SENTLOG");
soap_set_recv_logfile(soap, "RECVLOG");
#else
soap_set_test_logfile(soap, "TEST.log");
soap_set_sent_logfile(soap, "SENT.log");
soap_set_recv_logfile(soap, "RECV.log");
#endif
#endif
*/
和修改
if (/*s == r || *r || */n < -128 || n > 127)
10. 接下來可以用生成好的框架來完成搜索設備、獲取h265的rtsp地址及其其他相應的功能。