久久久精品一区ed2k-女人被男人叉到高潮的视频-中文字幕乱码一区久久麻豆樱花-俄罗斯熟妇真实视频

QtOnvif網(wǎng)絡(luò)設(shè)置方法是什么

這篇文章主要講解了“Qt Onvif網(wǎng)絡(luò)設(shè)置方法是什么”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Qt Onvif網(wǎng)絡(luò)設(shè)置方法是什么”吧!

創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)與策劃設(shè)計(jì),湘橋網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:湘橋等地區(qū)。湘橋做網(wǎng)站價(jià)格咨詢:13518219792

一、前言

用onvif協(xié)議來對設(shè)備的網(wǎng)絡(luò)信息進(jìn)行獲取和設(shè)置,這個(gè)操作在眾多的NVR產(chǎn)品中,用的很少,絕大部分用戶都還是習(xí)慣直接通過攝像機(jī)的web頁面進(jìn)去配置,其實(shí)修改網(wǎng)絡(luò)配置的功能在大部分的NVR中都是具備的,網(wǎng)絡(luò)的參數(shù)主要包括IP地址、子網(wǎng)掩碼、網(wǎng)關(guān)地址、DNS解析地址、NTP地址、網(wǎng)卡信息、網(wǎng)絡(luò)協(xié)議等,這些都可以通過不同的onvif命令來獲取和設(shè)置,一直沒有搞懂為啥這些要分開不同的命令去處理,其實(shí)大可以合并成一個(gè)命令嘛,搞得設(shè)置個(gè)網(wǎng)絡(luò)信息還要post好多次的數(shù)據(jù)才行。

通過抓包發(fā)現(xiàn),這些網(wǎng)絡(luò)參數(shù)的獲取命令,基本上都類似,除了鑒權(quán)的頭部數(shù)據(jù),中間都是一個(gè)關(guān)鍵字,所以為了最大程度的復(fù)用代碼,這里將通用的post數(shù)據(jù)和解析數(shù)據(jù)整合到一個(gè)函數(shù)中,傳入不同的關(guān)鍵字進(jìn)行處理即可。

onvif主要的功能:

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

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

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

  4. 云臺(tái)控制,上下左右移動(dòng),焦距放大縮小,相對和絕對移動(dòng)。

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

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

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

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

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

  10. 獲取和設(shè)置NTP時(shí)間同步以及設(shè)置設(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ā)送對應(yīng)的數(shù)據(jù),收到數(shù)據(jù)取出對應(yīng)的節(jié)點(diǎn)數(shù)據(jù)。

  4. 請求Onvif地址獲取Media地址和Ptz地址,Media地址用來獲取詳細(xì)的配置文件,Ptz地址用來云臺(tái)控制。

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

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

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

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

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

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

二、功能特點(diǎn)

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

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

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

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

  5. 可實(shí)時(shí)預(yù)覽攝像機(jī)圖像。

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

  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攝像機(jī)和NVR,親測??怠⒋笕A、宇視、華為、海思芯片內(nèi)核等,可定制開發(fā)。

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

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

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

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

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

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

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

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

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

三、效果圖

Qt Onvif網(wǎng)絡(luò)設(shè)置方法是什么

四、核心代碼

QString OnvifOther::writeData(const QString &key, const QString &value, const QString &flag,
                              bool xmlns, bool value4, quint8 type)
{
    if (device->deviceUrl.isEmpty()) {
        return QString();
    }

    QString file = device->request->getSendData(key, true, xmlns);
    QByteArray dataSend = file.toUtf8();
    //最后參數(shù)表示超時(shí)時(shí)間 一般請求都是很快的 除非對方不在線則卡很久 需要設(shè)置下超時(shí)時(shí)間
    QNetworkReply *reply = device->request->post(device->deviceUrl, dataSend, 1000);
    emit sendData(dataSend, device->deviceUrl);

    QStringList results;
    QByteArray dataReceive;
    bool ok = device->checkData(reply, dataReceive, flag);
    if (ok) {
        OnvifQuery query;
        query.setData(dataReceive);

        if (type == 0) {
            if (!value.isEmpty()) {
                //可能有多個(gè)關(guān)鍵字需要獲取
                QStringList list = value.split("|");
                foreach (QString str, list) {
                    QString result = value4 ? query.getValue4(str) : query.getValue3(str);
                    if (result != "-1") {
                        results << QString("%1:%2").arg(str).arg(result);
                    }
                }
            }
        } else if (type == 1) {
            results = query.getVideoSource();
        }
    }

    return results.join(ResultSplit);
}

QString OnvifOther::systemReboot()
{
    return writeData("SystemReboot", "Message", "重啟設(shè)備");
}

QString OnvifOther::getNtp()
{
    return writeData("GetNTP", "DNSname|IPv4Address", "獲取NTP");
}

bool OnvifOther::setNtp(const QString &ntp, bool isIp)
{
    QString wsdl = "http://www.onvif.org/ver10/device/wsdl";
    QString schema = "http://www.onvif.org/ver10/schema";

    QStringList list;
    list << QString("    <SetNTP xmlns=\"%1\">").arg(wsdl);
    list << QString("      <FromDHCP>false</FromDHCP>");
    list << QString("      <NTPManual>");
    list << QString("        <Type xmlns=\"%1\">%2</Type>").arg(schema).arg(isIp ? "IPv4" : "DNS");
    list << QString("        <%3 xmlns=\"%1\">%2</%3>").arg(schema).arg(ntp).arg(isIp ? "IPv4Address" : "DNSname");
    list << QString("      </NTPManual>");
    list << QString("    </SetNTP>");

    QString result = writeData(list.join("\r\n"), "SetNTPResponse", "設(shè)置NTP", false);
    return result.contains("SetNTPResponse");
}

QString OnvifOther::getHostName()
{
    return writeData("GetHostname", "Name", "獲取主機(jī)");
}

QString OnvifOther::getGateway()
{
    return writeData("GetNetworkDefaultGateway", "IPv4Address", "獲取網(wǎng)關(guān)");
}

QString OnvifOther::getDns()
{
    return writeData("GetDNS", "IPv4Address|SearchDomain", "獲取NDS");
}

QString OnvifOther::getInterface()
{
    return writeData("GetNetworkInterfaces", "Name|Address", "獲取接口");
}

QString OnvifOther::getProtocol()
{
    return writeData("GetNetworkProtocols", "Name|Port", "獲取協(xié)議");
}

感謝各位的閱讀,以上就是“Qt Onvif網(wǎng)絡(luò)設(shè)置方法是什么”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Qt Onvif網(wǎng)絡(luò)設(shè)置方法是什么這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點(diǎn)的文章,歡迎關(guān)注!

分享名稱:QtOnvif網(wǎng)絡(luò)設(shè)置方法是什么
文章位置:http://sd-ha.com/article8/gcjiip.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、App開發(fā)網(wǎng)站建設(shè)、電子商務(wù)、面包屑導(dǎo)航搜索引擎優(yōu)化

廣告

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

成都做網(wǎng)站