Linux下基於Onvif獲取RTSP位址(二)

2021-10-01 05:24:50 字數 2396 閱讀 1503

1.1 生成onvif框架

準備工作,電腦聯網,新建乙個資料夾,後面將把你生成的相關檔案放在這個目錄下。進入該資料夾開啟terminal,輸入如下指令

/www.onvif.org/onvif/ver20/ptz/wsdl/ptz.wsdlwsdl2h是之前安裝gsoap後的乙個工具,後面幾個引數含義可使用

wsdl2h -h
檢視,也可以在網上查詢。

-o onvif.h
代表輸入檔名為onvif.h

等待一段時間後剛剛新建的資料夾下多出onvif.**件。這樣onvif框架就生成了。

1.2 生成onvif框架原始碼

由於很多攝像頭需要鑑權,需要使用soap_wsse_add_usernametokendigest函式授權,而生成的onvif.h中不包含授權部分,故需新增相關檔案,否則後面生成的原始檔在需要鑑權時功能不完整會報錯。

第一步在onvif.**件開頭新增

#import 「wsse.h」
接下來生成原始檔,在terminal中鍵入

soapcpp2 -2 -c -l -c onvif.h -x -i .

/

各引數具體含義可以通過

soapcpp2 -h
獲取,這裡不再贅述。等待一段時間後就能得到有用的原始檔了。

在該過程中可能會出現如下錯誤

wsa5.h(288): *

*error**: service operation name clash: struct/

class

'soap_env__fault' already declared at wsa.h:273

這是因為onvif.h標頭檔案中同時#import「wsdd10.h」和#import「wsa5.h」,此時修改wsa5.**件,將int soap_env__fault修改為int soap_env__fault_alex.再次執行生成原始檔命令即可。

最後複製gsoap中相關檔案到目錄下

最終資料夾中包括生成的和複製的檔案總共如下

dom.h dom.c

mecevp.h mecevp.c

smdevp.h smdevp.c

soaph.h

soapstub.h

stdsoap2.h stdsoap2.c

threads.h threads.c

wsaapi.h wsaapi.c

wsdd.h

wsseapi.h wsseapi.c

soapc.c

soapclient.c

合計19個檔案

到這裡就大功告成,剩下的需要我們編寫主函式,呼叫相關介面,獲取rtsp位址。將在下一章給出具體**。

linux系統下,onvif裝置鑑權實現

fedora23 qtcreator4.0.3 based on qt5.6.2 opnessl onvif裝置鑑權,其實很簡單,但是作者在開發過程中走了很大的彎路,嘗試了多種方法,最終都以失敗告終。曾經一度陷入絕望,甚至產生回家種地的念頭。最終功夫不負有心人,發現其實乙個函式就可以搞定,頗有柳暗花...

基於linux下獲取時間函式的詳解

asctime 將時間和日期以字串格式表示 include 定義函式 char asctime const struct tm timeptr 函式說明 asctime 將引數timeptr所指的tm結構中的資訊轉換成真實世界所使用的時間日期表示方法,然後將結果以字串形態返回。此函式已經由時區轉換成...

LiveNVR中使用Onvif協議獲取裝置快照

我們知道livenvr中可以獲取快照資訊,之前的文章也說明了livenvr是如何進行快照抓取的 這裡我們使用另一種方法進行快照的抓取 獲取裝置能力capabilities 獲取裝置的能力,並且可以獲取到media和ptz的uri,使用media的uri,可以進行快照的抓取 tds getcapabi...