onvif——1——從零到可以編程

在老東家做了五年的onvif,都是在已有架構上改,偏業務,由於各種原因一致也沒有從頭搭建過。新東家要做onvif,這回我全權負責,光桿司令一枚,配上我這個司令之前做的rtsp,現在已經能夠基本運行,odm和海康NVR都OK。這篇文章就從頭寫到這。時間也過了很久,我儘量回憶寫細。

gsoap

onvif協議一般都是用工具輔助開發,所有的都自己做當然可以,因爲onvif就是 http + xml 的結構,但除了對空間和性能有極其嚴格的要求外不推薦。官網提供了各個模塊的 wsdl 文件,配合 gsoap 能直接生成代碼框架,省去網絡收發和內容拼接解析,讓開發人員能夠把更多的精力放在業務上。很多人都說要做底層底層,總做業務不利於個人發展,不光我們linux C的這麼講,java的也這麼講。業務才能變現!業務做多了不可能不接觸所謂的底層!如果在一個成熟的市場負責大規模業務開發,堅持住!哪種環節的問題和知識你都會遇到。

gsoap的安裝包可以在我的下載裏面找到,免積分。按正常項目去安裝即可,先config再make再install,安裝完後會有 wsd2hsoapcpp2 這兩個工具,下面開始正式做onvif。

wsdl2h -o onvif.h -c -s -x https://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl https://www.onvif.org/ver10/media/wsdl/media.wsdl

上面的指令指定了3個wsdl地址,https://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl 是搜索,https://www.onvif.org/ver10/device/wsdl/devicemgmt.wsdl 是設備基本信息,https://www.onvif.org/ver10/media/wsdl/media.wsdl  是媒體信息。想正常使用onvif,這3個是最小的配置了。至於編譯選項可查看help。這3個wsdl文件也可以下載到本地後再執行,但不建議,因爲有很多依賴文件,雖然可以通過修改wsdl來實現本地操作,但那不是重點,把更多的精力防止後面編碼調試更好。其中https://www.onvif.org/onvif/ver10/network/wsdl/remotediscovery.wsdl 不知是什麼原因在onvif官網上找不到,也許是升級替換掉了,認爲大家都知道,但這個地址是有效可以打開的。

執行完之後生成onvif.h文件,再使用soapcpp2工具進行第二步操作,命令如下。其中import、custom和plugin是從gsoap直接拷貝過來。

soapcpp2 -c -x -S onvif.h -I./import:./custom:./plugin

執行完之後文件夾內部如下圖所示。DeviceBinding.nsmap、MediaBinding.nsmap和wsdd.nsmap是一樣的,留一份使用。onvif.h是中間環節使用,已經不再需要,可以刪除。忽略掉wsdl和xsd文件夾。下面就可以使用這些文件進行onvif實際編程了。

onvif編程

這裏實現搜索、校驗和連視頻功能。整個文件結構如下圖所示:如果其中的文件生成的文件夾下沒有,請從gsoap文件夾中拷貝過來。

onvif的校驗依賴openssl,其中openssl從官網下載編譯即可。這個工程我會上傳到我的下載,1積分下載。

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