成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

QtOnvif抓拍圖片怎么實現(xiàn)

本篇內(nèi)容主要講解“Qt Onvif抓拍圖片怎么實現(xiàn)”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Qt Onvif抓拍圖片怎么實現(xiàn)”吧!

創(chuàng)新互聯(lián)公司自2013年起,先為桑日等服務建站,桑日等地企業(yè),進行企業(yè)商務咨詢服務。為桑日企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

一、前言

抓拍是個很重要的功能,比如在報警視頻聯(lián)動中需要一張實時的圖片,很多SDK不提供抓拍功能,而通過預覽抓圖,得到的圖片已不具有實時性,那如何得到實時的圖片呢?現(xiàn)在的IPC基本上都支持ONVIF協(xié)議,ONVIF協(xié)議除了提供RTSP的URL外,其實也給出了抓拍的URL,從Media的GetSnapshotUri獲取。

以前不知道onvif也可以做抓拍功能,直到近期重新用Onvif Device Test Tool工具測試的時候,發(fā)現(xiàn)還有抓圖的接口,于是抓跑分析出要收發(fā)的數(shù)據(jù),然后加入到自己封裝的onvif操作類中,這個抓圖有個應用場景就是報警以后,直接通過onvif抓圖,而不需要打開實時視頻流,基本上不占用什么資源。

還有一種應用場景是作為圖像智能檢測服務,采集監(jiān)控攝像機的在線運行狀況,抓拍監(jiān)控圖像定時上傳至云服務平臺,人工或者智能分析圖片,檢測監(jiān)控圖像的情況,比如是否位置不正確,是否黑畫面,光照度夠不夠等,發(fā)現(xiàn)問題后及時派遣維修人員上門維修,同時監(jiān)控信息丟失后,也能立即通知維修人員去查看現(xiàn)場等,這就需要用到onvif抓圖,如何檢測設(shè)備是否在運行呢,方法比較多,其實可以用onvif協(xié)議讀取日期時間,正常的話都會返回一個時間,當然也可以定時搜索一遍所有設(shè)備,然后與之前存儲的設(shè)備比較,連續(xù)多少次少了哪一個就認為掉線。

抓拍圖片流程:

  1. 發(fā)送GetSnapshotUri獲取到對應token的抓圖路徑。

  2. 通過get方式請求這個路徑,注意這里建議帶上用戶信息。

  3. 返回的數(shù)據(jù)就是圖片的數(shù)據(jù),接收完成以后用QImage的loadFromData載入即可。

onvif主要的功能:

  1. 搜索設(shè)備,獲取設(shè)備的信息比如廠家、型號等。

  2. 獲取設(shè)備的多個配置文件信息profile。

  3. 獲取對應配置文件的視頻流地址rtsp,以及分辨率等參數(shù)。

  4. 云臺控制,上下左右移動,焦距放大縮小,相對和絕對移動。

  5. 獲取預置位信息,觸發(fā)預置位。

  6. 訂閱事件,接收設(shè)備的各種消息尤其是報警事件比如IO口的報警。

  7. 抓圖,獲取設(shè)備當前的圖片。

  8. 獲取、創(chuàng)建、刪除用戶信息。

  9. 獲取和設(shè)備網(wǎng)絡(luò)配置信息比如IP地址等。

  10. 獲取和設(shè)置NTP時間同步以及設(shè)置設(shè)備時間。

  11. 獲取和設(shè)置視頻參數(shù)和圖片參數(shù)(亮度、色彩、飽和度)。

  12. 重啟設(shè)備。

onvif的處理流程:

  1. 綁定組播IP(239.255.255.250)和端口(3702),發(fā)送固定的xml格式的數(shù)據(jù)搜索設(shè)備。

  2. 接收到的xml格式的數(shù)據(jù)解析,得到設(shè)備的Onvif地址。

  3. 對Onvif地址發(fā)送對應的數(shù)據(jù),收到數(shù)據(jù)取出對應的節(jié)點數(shù)據(jù)。

  4. 請求Onvif地址獲取Media地址和Ptz地址,Media地址用來獲取詳細的配置文件,Ptz地址用來云臺控制。

  5. ptz控制是對Ptz地址發(fā)送對應的數(shù)據(jù)即可。

  6. 設(shè)置了用戶認證的需要組織用戶token信息一塊發(fā)送,每次都需要作鑒權(quán)處理。

  7. 接收到的數(shù)據(jù)不是標準的xml數(shù)據(jù),沒法按照正常的節(jié)點解析來處理,只能用QXmlQuery來做。

  8. 每個廠家設(shè)備返回的數(shù)據(jù)未必完全一致,基本上都不一致,需要進行模糊查找節(jié)點值。

  9. 特意采用底層協(xié)議解析,因為soap太臃腫函數(shù)名稱太另類,特意做的輕量級的。

  10. 兩個必備工具,Onvif Device Manager 和 Onvif Device Test Tool。

二、功能特點

  1. 廣播搜索設(shè)備,支持IPC和NVR,依次返回,可選擇不同的網(wǎng)卡IP。

  2. 依次獲取Onvif地址、Media地址、Profile文件、Rtsp地址。

  3. 可對指定的Profile獲取視頻流Rtsp地址,比如主碼流子碼流地址。

  4. 可對每個設(shè)備設(shè)置Onvif用戶信息,用于認證獲取詳細信息。

  5. 可實時預覽攝像機圖像。

  6. 支持云臺控制,可上下左右調(diào)節(jié)云臺,支持絕對移動和相對移動,可放到和縮小圖像遠近。

  7. 支持Qt4和Qt5任意Qt版本,親測Qt4.7.0到Qt5.14.2。

  8. 支持任意編譯器,親測mingw、msvc、gcc、clang。

  9. 支持任意操作系統(tǒng),親測xp、win7、win10、android、linux、嵌入式linux、樹莓派全志H3等。

  10. 支持任意Onvif攝像機和NVR,親測???、大華、宇視、華為、海思芯片內(nèi)核等,可定制開發(fā)。

  11. 支持對指定IP地址及onvif地址進行單播搜索,比如跨網(wǎng)段情況下非常有用。

  12. 支持指定過濾條件過濾搜索設(shè)備。

  13. 支持搜索間隔設(shè)置,保證所有設(shè)備搜索回來,在大量設(shè)備現(xiàn)場很有用。

  14. 可對圖片參數(shù)(亮度、色彩度、飽和度)進行設(shè)置。

  15. 支持NTP校時和時間同步設(shè)置。

  16. 純Qt編寫,超級小巧輕量,總共約2000行代碼,不依賴任何第三方的庫和組件,跨平臺。

  17. 封裝好了通用的數(shù)據(jù)發(fā)送和接收解析的函數(shù),可以非常方便的自行拓展其他Onvif處理。

  18. 工具上提供了收發(fā)數(shù)據(jù)文本框,顯示收發(fā)的數(shù)據(jù),方便查看和分析。

  19. 支持所有Onvif設(shè)備,代碼工整,接口友好,直接引入pri即可使用。

三、效果圖

Qt Onvif抓拍圖片怎么實現(xiàn) Qt Onvif抓拍圖片怎么實現(xiàn) Qt Onvif抓拍圖片怎么實現(xiàn)

四、核心代碼

#include "onvifsnap.h"
#include "onvifhelper.h"
#include "onvifrequest.h"
#include "onvifquery.h"

OnvifSnap::OnvifSnap(QObject *parent) : QObject(parent)
{
    device = 0;
}

void OnvifSnap::setDevice(OnvifDevice *device)
{
    this->device = device;
}

QString OnvifSnap::getSnapshotUri(const QString &profileToken)
{
    if (device->mediaUrl.isEmpty()) {
        return QString();
    }

    QString file = OnvifHelper::getFile(":/send/getSnapshotUri.xml");
    file = file.arg(device->request->getUserToken()).arg(profileToken);
    QByteArray dataSend = file.toUtf8();
    QNetworkReply *reply = device->request->post(device->mediaUrl, dataSend);
    emit sendData(dataSend, device->mediaUrl);

    QByteArray dataReceive;
    bool ok = device->checkData(reply, dataReceive, "請求截圖");
    if (ok) {
        OnvifQuery query;
        query.setData(dataReceive);
        device->snapUrl = query.getSnapUrl();
        if (!device->snapUrl.isEmpty()) {
            //重新加上用戶認證,取圖片也需要認證的
            emit receiveInfo(QString("抓圖地址-> %1").arg(device->snapUrl));
            QString userInfo = QString("http://%1:%2@").arg(device->userName).arg(device->userPwd);
            device->snapUrl = device->snapUrl.replace("http://", userInfo);
        }
    }

    return device->snapUrl;
}

QImage OnvifSnap::snapImage(const QString &profileToken)
{
    //這里還可以考慮過濾,比如已經(jīng)存在了 snapUrl 則不需要去獲取地址
    getSnapshotUri(profileToken);

    QImage image;
    if (!device->snapUrl.isEmpty()) {
        //請求圖片數(shù)據(jù)回復 1080P 大概需要 600ms
        //默認采用的是同步阻塞獲取,并不會卡主界面
        QNetworkReply *reply = device->request->get(device->snapUrl);
        QByteArray dataReceive;
        bool ok = device->checkData(reply, dataReceive, "收到截圖", false);
        if (ok) {
            //下面這行代碼非常耗時 1080P 圖片大概需要 80ms 如果需要頻繁的截圖建議放入線程處理
            image.loadFromData(dataReceive);
        }
    }

    return image;
}

到此,相信大家對“Qt Onvif抓拍圖片怎么實現(xiàn)”有了更深的了解,不妨來實際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進入相關(guān)頻道進行查詢,關(guān)注我們,繼續(xù)學習!

文章題目:QtOnvif抓拍圖片怎么實現(xiàn)
瀏覽路徑:http://jinyejixie.com/article30/gdpspo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站導航、關(guān)鍵詞優(yōu)化網(wǎng)站內(nèi)鏈、響應式網(wǎng)站服務器托管、App設(shè)計

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司
桃江县| 容城县| 高要市| 陆河县| 明光市| 新密市| 郯城县| 黑山县| 天等县| 望城县| 顺平县| 云安县| 民乐县| 信丰县| 东源县| 临潭县| 娱乐| 德庆县| 青河县| 普陀区| 枝江市| 梅州市| 施秉县| 庄浪县| 陇川县| 自贡市| 内江市| 雅江县| 渑池县| 通化市| 微博| 栾城县| 积石山| 班玛县| 西平县| 葫芦岛市| 沅陵县| 嘉定区| 兰坪| 道孚县| 恭城|