Onvif開發筆記(二): 使用gSOAP編譯Onvif協議之編譯Onvif代碼框架

若該文爲原創文章,未經允許不得轉載
原博主博客地址:https://blog.csdn.net/qq21497936
本文章博客地址:https://blog.csdn.net/qq21497936/article/details/102635060

目錄

前言

Onvif協議框架介紹

Onvif Profile A

Onvif Profile Q

Onvif Profile G

Onvif Profile C

Onvif Profile S

使用onvif測試工具測試

使用gSOAP生成Onvif協議框架

步驟一:確認Onvif版本號

步驟二:下載Onvif協議

步驟三:將文件夾custom和import拷貝到wsdl文件夾

步驟四:將文件夾typemap.dat拷貝到wsdl問阿金家

步驟五:使用wsdl生成onvif.h頭文件

步驟六:找不到xsd文件,官網也有下載

步驟七:使用soapcpp2生成源文件

步驟八:編譯全部

步驟九:錯誤,“解析html失敗”

步驟十:生成頭文件和源文件的代碼框架

步驟十一:錯誤“SOAP_ENV__Fault ”

步驟十二:編譯成功(C/C++都能成功)

步驟十三:一些頭文件

Qt開發Onvif協議工程模板

工程模板v1.0.0


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

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