1. 程式人生 > >onvif開發:使用wsdl2h和soap2cpp生成開發檔案

onvif開發:使用wsdl2h和soap2cpp生成開發檔案


關於使用gsoap開發onvif的介紹說明請自行搜尋!扼要開發流程看這:gSOAP的使用

這裡只是記錄我在開發過程中的一點東西。下面的使用環境:

一、使用wsdl2h生成標頭檔案:(對於wsdl檔案,僅以devicemgmt.wsdl為例;另本人是習慣C++不太會用C,後面的命令請根據自己需要修訂。下同

1)使用線上wsdl:

wsdl2h.exe -o onvif.h -s -t ./typemap.dat http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl
2)使用本地wsdl:首先http://www.onvif.org/Documents/Specifications.aspx
頁面最下方下載官方提供的wsdl,
wsdl2h.exe -t typemap.dat -o ./include/onvif.h ./wsdl/onvif.xsd ./wsdl/devicemgmt.wsdl

推薦使用第二種方式,在網速慢的時候很有優勢。
注意:不管使用一個或多個wsdl檔案,onvif.xsd均是必須的,故在使用本地wsdl方法時同樣建議先下載onvif.xsd來節約時間,並更在wsdl檔案裡的onvif.xsd指向位置:

二、新增對openssl的支援,在上一步生成的onvif.h中新增(可選)
#import "wsse.h"

三、使用soap2cpp生成開發檔案:

soapcpp2.exe onvif.h -C -x -L -i -d ./src -I ../;../import;../custom;../extras;../plugin

四、開發onvif:(可選)
因為onvif登陸使用了安全認證,開發的時候需要使用openssl(我使用的是1.0.0),需新增編譯巨集WITH_DOM;WITH_OPENSSL。

五、其他問題:
1)“error LNK2001: 無法解析的外部符號 _namespaces”解決方法:新增編譯巨集WITH_NONAMESPACES。(參考這裡
2)ONVIF_Device_Test_Tool(如果不是onvif會員是拿不到最新的測試工具的,網上其他下載可能不是最新的)安裝之後點選“discovery”一會後奔潰,請重新安裝對應.NET(建議安裝完整包)。
3)error LNK2005: _namespaces 已經在 .obj 中定義:工程包含了多個nsmap檔案或者nsmap檔案被包含在標頭檔案中,可刪除工程中多餘的nsmap檔案,並在某個cpp檔案中包含nsmap檔案:

#include "DeviceBinding.nsmap"
4)Onvif的認證機制參考ONVIF-Core-Specification.pdf的第5.12節說明。如果覺得OpenSSL太大可以替換認證方式,參加這裡:開發之客戶端鑑權獲取引數篇