若該文爲原創文章,未經允許不得轉載
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/102635060
目錄
步驟三:將文件夾custom和import拷貝到wsdl文件夾
步驟四:將文件夾typemap.dat拷貝到wsdl問阿金家
Onvif開發專欄
《Onvif開發筆記(一):使用gSOAP編譯Onvif協議之gSOAP介紹與編譯》
《Onvif開發筆記(二): 使用gSOAP編譯Onvif協議之編譯Onvif代碼框架》
持續補充中…
Onvif開發筆記(二): 使用gSOAP編譯Onvif協議之編譯Onvif代碼框架
前言
前面已經成功編譯gSOAP,本章生成onvif協議框架。
Onvif協議框架介紹
Onvif分爲Onvif Profile A/Q/G/C/S。
Onvif Profile A
Onvif Profile A涵蓋了常見的例行門禁控制功能,適用於負責授予和撤銷員工憑證、創建和更新計劃表,以及對系統內門禁控制權限進行更改的安保人員、接待員或人力資源專員等用戶。強化用戶端的功能性和系統管理功能,從而實現門禁控制市場的互聯互通
Onvif Profile Q
Onvif Profile Q爲系統集成商和終端用戶提供創新功能,通過簡易安裝機制和基礎設備配置,實現系統與設備的精簡安裝和連接。Profile Q還支持傳輸層安全性(TLS),該安全通信協議使ONVIF合標設備能夠以不受篡改和竊聽威脅的方式在網絡上與客戶通訊。
Onvif Profile G
Onvif Profile G包括板上視頻儲存,搜索,檢索,以及媒體播放功能的技術規格。Profile G進一步完善了現場錄像和視頻儲存的互通功能,適用於各種j監控設備和系統,包括視頻攝像機,編碼器,和網絡視頻錄像器(NVR)以及視頻管理系統,建築管理系統,和物理安全信息管理(PSIM)系統等等。
Onvif Profile C
Onvif Profile C系統整合商、服務供貨商和顧問們能夠實現客戶端和門禁控制系統(PACS)設備以及網絡視頻系統之間的互操作性。新標準提高了門禁控制前端設備和終端之間的兼容性,同時也簡化了安裝程序。由於不再需要用於處理不同PACS設備的多個專監控設備,所需的訓練時間也能大幅減少。作爲網絡門禁控制系統的一部分,Profile C 兼容設備能夠提供系統中門禁和進入點的相關信息。Profile C 兼容的軟件客戶端能夠對門禁和進入點狀況(如開鎖,進門)進行監控和報警及其它類似功能。Profile C 兼容的軟件客戶端還可提供基本的門禁控制功能,如進入以及門的上鎖/開鎖。
Onvif Profile S
Onvif Profile S描述了ONVIF兼容視頻管理系統和裝置共享的共用功能,這些系統和裝置包括通過IP網絡發送、配置、請求或控制媒體數據流的IP攝影機或編碼器。Profile S包括特定功能,例如搖攝、傾斜、變焦控制、音頻流和中繼輸出。
使用onvif測試工具測試
爲防止入坑,先用調試工具確認攝像頭是可以被搜索到和設置參數的,如下圖:
然後使用vlc打開碼流地址,確認是可以獲取到碼流的,如下圖:
使用gSOAP生成Onvif協議框架
步驟一:確認Onvif版本號
開啓海康攝像頭Onvif協議,查看到版本號,如下圖:
(注意:海康攝像頭Onvif協議版本號爲18.12)。
(注意:大華攝像頭Onvif協議爲16.12)。
步驟二:下載Onvif協議
下載地址:https://www.onvif.org/profiles/specifications
下載哪些,讀者根據自己業務需求,目前筆者先做搜索,有對應文檔,查詢後該2個wsdl已經包含了發現協議,如下圖:
步驟三:將文件夾custom和import拷貝到wsdl文件夾
custom和import文件夾是在install的目標文件夾下,路徑爲share/gsoap文件夾下,如下圖:
步驟四:將文件夾typemap.dat拷貝到wsdl問阿金家
typemap.Data在install的目標文件夾下,路徑爲share/gsoap/WS/typemap.dat,如下圖:
步驟五:使用wsdl生成onvif.h頭文件
wsdl2h -o onvif.h -c -s -t ./typemap.dat devicemgmt.wsdl event.wsdl
步驟六:找不到xsd文件,官網也有下載
下載該文件還得處理路徑,直接將命令改爲網址的,如下圖:
wsdl2h -o onvif.h -c -s -t ./typemap.dat \
https://www.onvif.org/profiles/specifications/devicemgmt.wsdl \
https://www.onvif.org/profiles/specifications/event.wsdl
成功生成onvif.h,如下圖:
步驟七:使用soapcpp2生成源文件
soapcpp2 -c onvif.h -x -I import -I gsoap
步驟八:編譯全部
wsdl2h -o onvif.h -x -c -s -t ./typemap.dat \
https://www.onvif.org/profiles/specifications/device.wsdl \
https://www.onvif.org/profiles/specifications/event.wsdl \
https://www.onvif.org/profiles/specifications/accesscontrol.wsdl \
https://www.onvif.org/profiles/specifications/accessrules.wsdl \
https://www.onvif.org/profiles/specifications/actionengine.wsdl \
https://www.onvif.org/profiles/specifications/analytics.wsdl \
https://www.onvif.org/profiles/specifications/authenticationbehavior.wsdl \
https://www.onvif.org/profiles/specifications/credential.wsdl \
https://www.onvif.org/profiles/specifications/deviceio.wsdl \
https://www.onvif.org/profiles/specifications/display.wsdl \
https://www.onvif.org/profiles/specifications/doorcontrol.wsdl \
https://www.onvif.org/profiles/specifications/imaging.wsdl \
https://www.onvif.org/profiles/specifications/media.wsdl \
https://www.onvif.org/profiles/specifications/media2.wsdl \
https://www.onvif.org/profiles/specifications/provisioning.wsdl \
https://www.onvif.org/profiles/specifications/ptz.wsdl \
https://www.onvif.org/profiles/specifications/receiver.wsdl \
https://www.onvif.org/profiles/specifications/recording.wsdl \
https://www.onvif.org/profiles/specifications/search.wsdl \
https://www.onvif.org/profiles/specifications/replay.wsdl \
https://www.onvif.org/profiles/specifications/schedule.wsdl \
https://www.onvif.org/profiles/specifications/advancedsecurity.wsdl \
https://www.onvif.org/profiles/specifications/thermal.wsdl \
https://www.onvif.org/profiles/specifications/uplink.wsdl
步驟九:錯誤,“解析html失敗”
初步判斷是新的版的onvif文件的編碼問題,解析還未支持,無法解決,而又無法下載到合適的版本,錯誤如下圖:
只好在網上找一個能用的,版本貌似是10,希望能用,編譯目標從c改爲c++,c卡了大半天,實在無非解決,後轉成c++,經過測試確認在應用工程中可用,如下圖(服務器的還有編譯錯誤,其他都沒有錯誤):
編譯c++命令如下:
wsdl2h -o onvif.h -c++ -s -t ./typemap.dat \
http://www.onvif.org/onvif/ver10/device/wsdl/devicemgmt.wsdl \
http://www.onvif.org/onvif/ver10/event/wsdl/event.wsdl \
http://www.onvif.org/onvif/ver10/media/wsdl/media.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/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/ver10/actionengine.wsdl \
http://www.onvif.org/ver10/pacs/accesscontrol.wsdl \
http://www.onvif.org/ver10/pacs/doorcontrol.wsdl
漫長的等待過程。
步驟十:生成頭文件和源文件的代碼框架
soapcpp2 -c -C -L -x onvif.h -I import -I gsoap
步驟十一:錯誤“SOAP_ENV__Fault ”
soapcpp2 -c -C -L -x onvif.h -I import -I gsoap
步驟十二:編譯成功(C/C++都能成功)
(注意:C和C++都能成功,但是C的放入Qt工程中諸多問題,弄了半天沒有進展,只好轉成C++的)
編譯完成後:
步驟十三:一些頭文件
需要自己從目標文件和頭文件中拿到,如stdsoap2.h/.cpp,duration.h/.cpp放入該文件夾。
Qt開發Onvif協議工程模板
全部.h和.cpp加入,報錯一大堆,基本都是服務端,如下兩個文件:
再次運行找不到結構體
解決方法(.nsmap中是namespace)
修改typemap.dat中的Long64規則,不使用改規則
Qt工程模板運行成功(沒加入Service,目前沒這個需求)。
工程模板v1.0.0
對應工程模板v1.0.0
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/102635060