Qt/C++視頻監控Onvif工具/組播搜索/顯示監控畫面/圖片參數調節/OSD管理/祖傳原創

一、前言

能夠寫出簡單易用而又不失功能強大的組件,一直是我的追求,簡單主要體現在易用性,不能搞一些繁瑣的流程和一些極難使用的API接口,或者一些看不懂的很難以理解的函數名稱,一定是要越簡單越好。功能強大主要體現在功能的完整性,常規的接口肯定是必備的,然後在默認值方面,儘量將值設置成最常用的合規的值,然後提供了接口可以修改這些值,以便兼容各種各樣的需求場景。比如一些開關的值,如果90%的人希望默認是關閉的,而你搞個默認值開啓,這就很納悶了,大部分的用戶每次都需要去主動修改後才能適用自己的場景。在做軟件開發這些年,一直遵循這些原則和邏輯搞到今天,包括精心打磨很多年的各種組件,比如視頻播放組件,Onvif組件等。

代碼使用示例:

  1. 第一步:拷貝onvif組件源碼到你的項目,放到同級目錄。
  2. 第二步:在項目pro文件中引入組件 include ($$PWD/../core_onvif/core_onvif.pri)。
  3. 第三步:代碼文件引入頭文件 #include "onvifsearch.h" #include "onvifdevice.h",其中onvifsearch用於搜索設備,onvifdevice用於獲取設備的詳細信息比如rtsp視頻流地址。
  4. 第四步:組播或者單播搜索設備,獲取到對應的onvif地址。每個設備都有一個唯一的onvif地址。
//實例化搜索對象並關聯信號槽
OnvifSearch *search = new OnvifSearch(this);
connect(search, SIGNAL(receiveDevice(OnvifDeviceInfo)), this, SLOT(receiveDevice(OnvifDeviceInfo)));
//參數1是網卡地址/參數2指定地址則表示單播
search->search("192.168.0.110", "");

void frmSimple::receiveDevice(const OnvifDeviceInfo &deviceInfo)
{
    QString msg = QString("收到設備: %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);
}
  1. 第五步:對指定的onvif地址發送http請求,獲取詳細信息。
//實例化onvif對象實例
OnvifDevice *device = new OnvifDevice(this);
//設置用戶信息用於請求的時候認證用
device->setUserInfo("admin", "123456");
//設置請求地址
device->setOnvifAddr("http://192.168.0.64/onvif/device_service");

//先獲取服務文件
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);

二、效果圖





三、體驗地址

  1. 體驗地址:https://pan.baidu.com/s/1d7TH_GEYl5nOecuNlWJJ7g 提取碼:01jf 名稱:bin_video_onvif
  2. 國內站點:https://gitee.com/feiyangqingyun
  3. 國際站點:https://github.com/feiyangqingyun
  4. 個人主頁:https://blog.csdn.net/feiyangqingyun
  5. 視頻主頁:https://space.bilibili.com/687803542/

四、功能特點

  1. 廣播搜索設備,支持IPC和NVR,依次返回。
  2. 可選擇不同的網卡IP進行對應網段設備的搜索。
  3. 依次獲取Onvif地址、Media地址、Profile文件、Rtsp地址。
  4. 可對指定的Profile獲取視頻流Rtsp地址,比如主碼流地址、子碼流地址。
  5. 可對每個設備設置Onvif用戶信息,用於認證獲取詳細信息。
  6. 可實時預覽攝像機圖像。
  7. 支持雲臺控制,可上下左右調節雲臺,支持絕對移動、相對移動、連續移動三種方式,可對圖像拉近拉遠。
  8. 支持獲取預置位集合、調用預置位、添加預置位、刪除預置位等。
  9. 支持圖片參數設置,包括亮度、對比度、飽和度、銳度等。
  10. 支持Qt4和Qt6任意Qt版本以及後續Qt版本,親測Qt4.7到Qt6.5。
  11. 支持任意編譯器,親測mingw、msvc、gcc、clang。
  12. 支持任意操作系統,親測xp、win7、win10、android、linux、嵌入式linux、樹莓派全志H3等。
  13. 支持任意Onvif攝像機和NVR,親測海康、大華、宇視、天地偉業、華爲、海思芯片內核等,可定製開發。
  14. 支持對指定IP地址及onvif地址進行單播搜索,比如跨網段情況下非常有用。
  15. 支持指定過濾條件過濾搜索設備,比如只搜索某個網段的設備或者針對某個地址的設備。
  16. 支持搜索間隔和搜索策略設置,保證所有設備搜索回來,在大量設備現場很有用(親測上千個攝像機現場,搜索回來的設備數量比攝像機廠家自帶搜索工具還要準確)。
  17. 可對設備進行重啓、網絡參數獲取等。
  18. 支持各種事件訂閱(入侵報警、越界報警、遮擋報警等)、Onvif抓圖等操作。
  19. 支持NTP校時和時間同步設置。
  20. 支持OSD相關操作,可以增刪改查OSD信息。
  21. 內置了線程實時執行Onvif指令隊列,排隊最大速度的執行對應的指令,執行結果信號發出。
  22. 採用的最底層的TCP+UDP通信機制,原創最底層協議解析,純QtWidget編寫。
  23. 超級小巧輕量,總共約3000行代碼,不依賴任何第三方的庫和組件,跨平臺。
  24. 封裝好了通用的數據發送和接收解析的函數,可以非常方便的自行拓展其他Onvif處理。
  25. 工具上提供了收發數據文本框,顯示收發的數據,方便查看和分析。
  26. 支持所有Onvif設備,代碼工整,接口友好,直接引入pri即可使用。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章