中企動力做網(wǎng)站行嗎怎樣免費建立自己的網(wǎng)站
一、功能特點
- 廣播搜索設(shè)備,支持IPC和NVR,依次返回。
- 可選擇不同的網(wǎng)卡IP進行對應(yīng)網(wǎng)段設(shè)備的搜索。
- 依次獲取Onvif地址、Media地址、Profile文件、Rtsp地址。
- 可對指定的Profile獲取視頻流Rtsp地址,比如主碼流地址、子碼流地址。
- 可對每個設(shè)備設(shè)置Onvif用戶信息,用于認證獲取詳細信息。
- 可實時預(yù)覽攝像機圖像。
- 支持云臺控制,可上下左右調(diào)節(jié)云臺,支持絕對移動、相對移動、連續(xù)移動三種方式,可對圖像拉近拉遠。
- 支持獲取預(yù)置位集合、調(diào)用預(yù)置位、添加預(yù)置位、刪除預(yù)置位等。
- 支持圖片參數(shù)設(shè)置,包括亮度、對比度、飽和度、銳度等。
- 支持Qt4和Qt6任意Qt版本以及后續(xù)Qt版本。
- 支持任意編譯器,親測mingw、msvc、gcc、clang。
- 支持任意操作系統(tǒng),親測xp、win7、win10、android、linux、嵌入式linux、樹莓派全志H3等。
- 支持任意Onvif攝像機和NVR,親測海康、大華、宇視、天地偉業(yè)、華為、海思芯片內(nèi)核等,可定制開發(fā)。
- 支持對指定IP地址及onvif地址進行單播搜索,比如跨網(wǎng)段情況下非常有用。
- 支持指定過濾條件過濾搜索設(shè)備,比如只搜索某個網(wǎng)段的設(shè)備或者針對某個地址的設(shè)備。
- 支持搜索間隔和搜索策略設(shè)置,保證所有設(shè)備搜索回來,在大量設(shè)備現(xiàn)場很有用(親測上千個攝像機現(xiàn)場,搜索回來的設(shè)備數(shù)量比攝像機廠家自帶搜索工具還要準確)。
- 可對設(shè)備進行重啟、網(wǎng)絡(luò)參數(shù)獲取等。
- 支持各種事件訂閱(入侵報警、越界報警、遮擋報警等)、Onvif抓圖等操作。
- 支持NTP校時和時間同步設(shè)置。
- 支持OSD相關(guān)操作,可以增刪改查OSD信息。
- 內(nèi)置了線程實時執(zhí)行Onvif指令隊列,排隊最大速度的執(zhí)行對應(yīng)的指令,執(zhí)行結(jié)果信號發(fā)出。
- 采用的最底層的TCP+UDP通信機制,原創(chuàng)最底層協(xié)議解析,純QtWidget編寫。
- 超級小巧輕量,總共約3000行代碼,不依賴任何第三方的庫和組件,跨平臺。
- 封裝好了通用的數(shù)據(jù)發(fā)送和接收解析的函數(shù),可以非常方便的自行拓展其他Onvif處理。
- 工具上提供了收發(fā)數(shù)據(jù)文本框,顯示收發(fā)的數(shù)據(jù),方便查看和分析。
- 支持所有Onvif設(shè)備,代碼工整,接口友好,直接引入pri即可使用。
二、主要功能
- 搜索設(shè)備,獲取設(shè)備的信息比如廠家、型號等。
- 獲取設(shè)備的多個配置文件信息profile。
- 獲取對應(yīng)配置文件的視頻流地址rtsp,以及分辨率等參數(shù)。
- 云臺控制,上下左右移動,焦距放大縮小,相對和絕對移動。
- 獲取預(yù)置位信息,觸發(fā)預(yù)置位。
- 訂閱事件,接收設(shè)備的各種消息尤其是報警事件比如IO口的報警。
- 抓圖,獲取設(shè)備當(dāng)前的圖片。
- 獲取、創(chuàng)建、刪除用戶信息。
- 獲取和設(shè)備網(wǎng)絡(luò)配置信息比如IP地址等。
- 獲取和設(shè)置NTP時間同步以及設(shè)置設(shè)備時間。
- 獲取和設(shè)置視頻參數(shù)和圖片參數(shù)(亮度、色彩、飽和度)。
- 重啟設(shè)備。
三、云臺說明
- x、y、z 范圍都在0-1之間。
- x為負數(shù),表示左轉(zhuǎn),x為正數(shù),表示右轉(zhuǎn)。
- y為負數(shù),表示下轉(zhuǎn),y為正數(shù),表示上轉(zhuǎn)。
- z為正數(shù),表示拉近,z為負數(shù),表示拉遠。
- 通過x和y的組合,來實現(xiàn)云臺的控制。
- 通過z的組合,來實現(xiàn)焦距控制。
四、處理流程
- 綁定組播IP(239.255.255.250)和端口(3702),發(fā)送固定的xml格式的數(shù)據(jù)搜索設(shè)備。
- 接收到的xml格式的數(shù)據(jù)解析,得到設(shè)備的Onvif地址。
- 對Onvif地址發(fā)送對應(yīng)的數(shù)據(jù),收到數(shù)據(jù)取出對應(yīng)的節(jié)點數(shù)據(jù)。
- 請求Onvif地址獲取Media地址和Ptz地址,Media地址用來獲取詳細的配置文件,Ptz地址用來云臺控制。
- ptz控制是對Ptz地址發(fā)送對應(yīng)的數(shù)據(jù)即可。
- 設(shè)置了用戶認證的需要組織用戶token信息一塊發(fā)送,每次都需要作鑒權(quán)處理。
- 接收到的數(shù)據(jù)不是標準的xml數(shù)據(jù),帶有前綴命名空間,解析的時候要注意。
- 每個廠家設(shè)備返回的數(shù)據(jù)未必完全一致,基本上都不一致,需要進行模糊查找節(jié)點值。
- 特意采用底層協(xié)議解析,因為soap太臃腫函數(shù)名稱太另類,特意做的輕量級的。
- 兩個必備工具,Onvif Device Manager 和 Onvif Device Test Tool。
五、使用說明
- 必須確認攝像機是支持onvif的攝像機。
- 搜索的時候選定正確的網(wǎng)卡,建議同一網(wǎng)段。
- 攝像機必須開啟了onvif服務(wù),很多攝像機為了安全性考慮默認可能不開啟。
- onvif用戶信息必須正確,一般攝像機onvif功能開啟的地方可以添加用戶。
- 在界面上輸入用戶名和密碼的時候記得在界面中輸入,不要在配置文件中輸入,配置文件中存儲的是密文。
- 圖片參數(shù)的范圍值有多種:0-100 0-128 0-255 如果發(fā)現(xiàn)設(shè)置不成功可以把值調(diào)小一點試試。
- 可以用國際官方工具(Onvif Device Manager 和 Onvif Device Test Tool)進行測試對比。
- 國際工具下載地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf
六、代碼使用
- 第一步:拷貝onvif組件源碼到你的項目,放到同級目錄。
- 第二步:在項目pro文件中引入組件 include ($$PWD/…/core_onvif/core_onvif.pri)。
- 第三步:代碼文件引入頭文件 #include “onvifsearch.h” #include “onvifdevice.h”,其中onvifsearch用于搜索設(shè)備,onvifdevice用于獲取設(shè)備的詳細信息比如rtsp視頻流地址。
- 第四步:組播或者單播搜索設(shè)備,獲取到對應(yīng)的onvif地址。每個設(shè)備都有一個唯一的onvif地址。
//實例化搜索對象并關(guān)聯(lián)信號槽
OnvifSearch *search = new OnvifSearch(this);
connect(search, SIGNAL(receiveDevice(OnvifDeviceInfo)), this, SLOT(receiveDevice(OnvifDeviceInfo)));
//參數(shù)1是網(wǎng)卡地址/參數(shù)2指定地址則表示單播
search->search("192.168.0.110", "");void frmSimple::receiveDevice(const OnvifDeviceInfo &deviceInfo)
{QString msg = QString("收到設(shè)備: %1").arg(deviceInfo.onvifAddr);ui->textEdit->append(msg);QListWidgetItem *item = new QListWidgetItem;item->setText(deviceInfo.deviceIp);item->setData(Qt::UserRole, deviceInfo.onvifAddr);ui->listWidget->addItem(item);
}
- 第五步:對指定的onvif地址發(fā)送http請求,獲取詳細信息。
//實例化onvif對象實例
OnvifDevice *device = new OnvifDevice(this);
//設(shè)置用戶信息用于請求的時候認證用
device->setUserInfo("admin", "123456");
//設(shè)置請求地址
device->setOnvifAddr("http://192.168.0.64/onvif/device_service");//先獲取服務(wù)文件
device->getServices();
//可能為空需要按照另一種方式獲取
if (device->getMediaUrl().isEmpty()) {device->getCapabilities();
}//獲取配置文件
QList<OnvifProfileInfo> profiles = device->getProfiles();
foreach (OnvifProfileInfo profile, profiles) {ui->cboxProfiles->addItem(profile.token);
}//對指定的配置文件獲取視頻地址
QString token = ui->cboxProfiles->currentText();
QString url = device->getStreamUri(token);
ui->txtStreamUri->setText(url);
六、效果圖
七、體驗地址
- 體驗地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf 名稱:bin_video_onvif
- 國內(nèi)站點:https://gitee.com/feiyangqingyun
- 國際站點:https://github.com/feiyangqingyun
- 個人主頁:https://blog.csdn.net/feiyangqingyun
- 視頻主頁:https://space.bilibili.com/687803542/
- 精品源碼:https://shop244026315.taobao.com/