您好,登錄后才能下訂單哦!
這篇文章主要講解了“Qt Onvif信息獲取方法是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Qt Onvif信息獲取方法是什么”吧!
onvif設備信息的獲取需要注意的是,現在市場上絕大部分的攝像機都有密碼驗證的限定,先不管他默認是admin還是12345,起碼有用戶驗證的機制擺在那,這樣相對來說安全很多,不然誰也可以通過onvif協議拿到對應的信息,就沒有安全性可言,記得幾年前海康爆出了漏洞,導致很多監控攝像頭被泄露,為此海康現在的攝像頭默認onvif是關閉的,開啟以后密碼要求各種組合,哎,想要更安全就必須犧牲便捷性,這個也不知道誰能想出一個完美兼顧的方法。
onvif主要的功能:
搜索設備,獲取設備的信息比如廠家、型號等。
獲取設備的多個配置文件信息profile。
獲取對應配置文件的視頻流地址rtsp,以及分辨率等參數。
云臺控制,上下左右移動,焦距放大縮小,相對和絕對移動。
獲取預置位信息,觸發預置位。
訂閱事件,接收設備的各種消息尤其是報警事件比如IO口的報警。
抓圖,獲取設備當前的圖片。
獲取、創建、刪除用戶信息。
獲取和設備網絡配置信息比如IP地址等。
獲取和設置NTP時間同步以及設置設備時間。
獲取和設置視頻參數和圖片參數(亮度、色彩、飽和度)。
重啟設備。
onvif的處理流程:
綁定組播IP(239.255.255.250)和端口(3702),發送固定的xml格式的數據搜索設備。
接收到的xml格式的數據解析,得到設備的Onvif地址。
對Onvif地址發送對應的數據,收到數據取出對應的節點數據。
請求Onvif地址獲取Media地址和Ptz地址,Media地址用來獲取詳細的配置文件,Ptz地址用來云臺控制。
ptz控制是對Ptz地址發送對應的數據即可。
設置了用戶認證的需要組織用戶token信息一塊發送,每次都需要作鑒權處理。
接收到的數據不是標準的xml數據,沒法按照正常的節點解析來處理,只能用QXmlQuery來做。
每個廠家設備返回的數據未必完全一致,基本上都不一致,需要進行模糊查找節點值。
特意采用底層協議解析,因為soap太臃腫函數名稱太另類,特意做的輕量級的。
兩個必備工具,Onvif Device Manager 和 Onvif Device Test Tool。
廣播搜索設備,支持IPC和NVR,依次返回,可選擇不同的網卡IP。
依次獲取Onvif地址、Media地址、Profile文件、Rtsp地址。
可對指定的Profile獲取視頻流Rtsp地址,比如主碼流子碼流地址。
可對每個設備設置Onvif用戶信息,用于認證獲取詳細信息。
可實時預覽攝像機圖像。
支持云臺控制,可上下左右調節云臺,支持絕對移動和相對移動,可放到和縮小圖像遠近。
支持Qt4和Qt5任意Qt版本,親測Qt4.7.0到Qt5.14.2。
支持任意編譯器,親測mingw、msvc、gcc、clang。
支持任意操作系統,親測xp、win7、win10、android、linux、嵌入式linux、樹莓派全志H3等。
支持任意Onvif攝像機和NVR,親測海康、大華、宇視、華為、海思芯片內核等,可定制開發。
支持對指定IP地址及onvif地址進行單播搜索,比如跨網段情況下非常有用。
支持指定過濾條件過濾搜索設備。
支持搜索間隔設置,保證所有設備搜索回來,在大量設備現場很有用。
可對圖片參數(亮度、色彩度、飽和度)進行設置。
支持NTP校時和時間同步設置。
純Qt編寫,超級小巧輕量,總共約2000行代碼,不依賴任何第三方的庫和組件,跨平臺。
封裝好了通用的數據發送和接收解析的函數,可以非常方便的自行拓展其他Onvif處理。
工具上提供了收發數據文本框,顯示收發的數據,方便查看和分析。
支持所有Onvif設備,代碼工整,接口友好,直接引入pri即可使用。
OnvifDevice::DeviceInfo *OnvifBase::getDeviceInfo() { if (device->deviceUrl.isEmpty()) { return 0; } QString file = device->request->getSendData("GetDeviceInformation"); QByteArray dataSend = file.toUtf8(); QNetworkReply *reply = device->request->auth(device->deviceUrl, dataSend); emit sendData(dataSend, device->deviceUrl); OnvifDevice::DeviceInfo *deviceInfo = 0; QByteArray dataReceive; bool ok = device->checkData(reply, dataReceive, "獲取設備信息"); if (ok) { OnvifQuery query; query.setData(dataReceive); QString wsdl = query.getDeviceWsdl(); QString name_path = QString("//%1:GetDeviceInformationResponse/%1:Manufacturer").arg(wsdl); QString mod_path = QString("//%1:GetDeviceInformationResponse/%1:Model").arg(wsdl); QString ver_path = QString("//%1:GetDeviceInformationResponse/%1:FirmwareVersion").arg(wsdl); QString ser_path = QString("//%1:GetDeviceInformationResponse/%1:SerialNumber").arg(wsdl); QString hard_path = QString("//%1:GetDeviceInformationResponse/%1:HardwareId").arg(wsdl); //先將廣播搜索到的設備信息一起打包 deviceInfo = new OnvifDevice::DeviceInfo; deviceInfo->addr = device->deviceInfo.value("addr"); deviceInfo->ip = device->deviceInfo.value("ip"); deviceInfo->name = device->deviceInfo.value("name"); deviceInfo->location = device->deviceInfo.value("location"); deviceInfo->hardware = device->deviceInfo.value("hardware"); deviceInfo->manufacturer = query.getValue(name_path); deviceInfo->model = query.getValue(mod_path); deviceInfo->firmwareVersion = query.getValue(ver_path); deviceInfo->serialNumber = query.getValue(ser_path); deviceInfo->hardwareId = query.getValue(hard_path); } return deviceInfo; }
<?xml version="1.0" encoding="utf-8"?> <s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope"> <s:Header> <wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> <wsse:UsernameToken>%1</wsse:UsernameToken> </wsse:Security> </s:Header> <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <GetDeviceInformation xmlns="http://www.onvif.org/ver10/device/wsdl"/> </s:Body> </s:Envelope>
感謝各位的閱讀,以上就是“Qt Onvif信息獲取方法是什么”的內容了,經過本文的學習后,相信大家對Qt Onvif信息獲取方法是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。