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

Qt音視頻開(kāi)發(fā)怎么設(shè)置Onvif時(shí)間

這篇文章主要講解了“Qt音視頻開(kāi)發(fā)怎么設(shè)置Onvif時(shí)間”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Qt音視頻開(kāi)發(fā)怎么設(shè)置Onvif時(shí)間”吧!

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括果洛州網(wǎng)站建設(shè)、果洛州網(wǎng)站制作、果洛州網(wǎng)頁(yè)制作以及果洛州網(wǎng)絡(luò)營(yíng)銷(xiāo)策劃等。多年來(lái),我們專(zhuān)注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,果洛州網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到果洛州省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

一、前言

對(duì)設(shè)備設(shè)置時(shí)間很有必要,這個(gè)是必備的功能,畢竟大部分的前端設(shè)備比如攝像機(jī)本身不帶BIOS電池的,所以沒(méi)法存儲(chǔ)時(shí)間,要么設(shè)置了NTP地址來(lái)同步時(shí)間,要么其他設(shè)備主動(dòng)對(duì)他進(jìn)行設(shè)置時(shí)間,如果時(shí)間不正確了,意味著本地畫(huà)面顯示的時(shí)間字符串,本地存儲(chǔ)的視頻錄像文件等,都可能是不正確的,所以一般的處理是NVR一旦連上攝像機(jī)設(shè)備以后,立馬將攝像機(jī)的時(shí)間設(shè)置成NVR的時(shí)間,這樣就保持了一致。

用onvif進(jìn)行時(shí)間設(shè)置主要由兩種,一種是通過(guò)設(shè)置NTP服務(wù)地址以后,主動(dòng)調(diào)用NTP同步來(lái)進(jìn)行,另外一種就是發(fā)送日期時(shí)間的數(shù)據(jù)包給設(shè)備,讓他自己解析處理,這里要注意的是,數(shù)據(jù)包中的日期時(shí)間是UTC格式的,即倫敦時(shí)間,所以在使用的時(shí)候需要自己本地先轉(zhuǎn)換成UTC時(shí)間在發(fā)送,Qt內(nèi)置了轉(zhuǎn)換成UTC時(shí)間的方法 QDateTime::currentDateTime().toUTC()。

onvif主要的功能:

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

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

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

  4. 云臺(tái)控制,上下左右移動(dòng),焦距放大縮小,相對(duì)和絕對(duì)移動(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. 對(duì)Onvif地址發(fā)送對(duì)應(yīng)的數(shù)據(jù),收到數(shù)據(jù)取出對(duì)應(yīng)的節(jié)點(diǎn)數(shù)據(jù)。

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

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

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

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

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

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

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

二、功能特點(diǎn)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

三、效果圖

Qt音視頻開(kāi)發(fā)怎么設(shè)置Onvif時(shí)間

四、核心代碼

QString OnvifOther::getDateTime()
{
    QString result = writeData("GetSystemDateAndTime", "tt:Year|tt:Month|tt:Day|tt:Hour|tt:Minute|tt:Second|tt:TZ", "獲取時(shí)間", true, true);
    QStringList list = result.split(ResultSplit);
    if (list.count() != 7) {
        return result;
    }

    QString year = list.at(0).split(":").last();
    QString month = list.at(1).split(":").last();
    QString day = list.at(2).split(":").last();
    QString hour = list.at(3).split(":").last();
    QString min = list.at(4).split(":").last();
    QString sec = list.at(5).split(":").last();

    //計(jì)算時(shí)區(qū)并賦值
    QString timezone = list.at(6);
    timezone = timezone.mid(6, timezone.length() - 6);
    device->timezone = timezone;

    //將日期根據(jù)時(shí)區(qū)進(jìn)行運(yùn)算
    QString str = QString("%1-%2-%3 %4:%5:%6").arg(year).arg(month).arg(day).arg(hour).arg(min).arg(sec);
    QDateTime dt = QDateTime::fromString(str, "yyyy-M-d h:m:s");
    if (!device->timezone.contains("GMT-08")) {
        dt = dt.addSecs(8 * 60 * 60);
    }

    //不足兩位補(bǔ)零
    list = dt.toString("yyyy-M-d-h-m-s").split("-");
    result = QString("%1-%2-%3 %4:%5:%6 %7").arg(list.at(0)).arg(list.at(1), 2, '0').arg(list.at(2), 2, '0')
             .arg(list.at(3), 2, '0').arg(list.at(4), 2, '0').arg(list.at(5), 2, '0').arg(timezone);
    return result;
}

bool OnvifOther::setDateTime(const QDateTime &datetime, bool ntp)
{
    QStringList temp = datetime.toString("yyyy-M-d-h-m-s").split("-");
    QString wsdl = "http://www.onvif.org/ver10/device/wsdl";
    QString schema = "http://www.onvif.org/ver10/schema";

    QStringList list;
    list << QString("    <SetSystemDateAndTime xmlns=\"%1\">").arg(wsdl);
    list << QString("      <DateTimeType>%1</DateTimeType>").arg(ntp ? "NTP" : "Manual");
    list << QString("      <DaylightSavings>%1</DaylightSavings>").arg("false");
    list << QString("      <TimeZone>");
    list << QString("        <TZ xmlns=\"%1\">%2</TZ>").arg(schema).arg(ntp ? device->timezone : "CST-8");
    list << QString("      </TimeZone>");

    if (!ntp) {
        list << QString("      <UTCDateTime>");
        list << QString("        <Date xmlns=\"%1\">").arg(schema);
        list << QString("          <Year>%1</Year>").arg(temp.at(0));
        list << QString("          <Month>%1</Month>").arg(temp.at(1));
        list << QString("          <Day>%1</Day>").arg(temp.at(2));
        list << QString("        </Date>");
        list << QString("        <Time xmlns=\"%1\">").arg(schema);
        list << QString("          <Hour>%1</Hour>").arg(temp.at(3));
        list << QString("          <Minute>%1</Minute>").arg(temp.at(4));
        list << QString("          <Second>%1</Second>").arg(temp.at(5));
        list << QString("        </Time>");
        list << QString("      </UTCDateTime>");
    }

    list << QString("    </SetSystemDateAndTime>");

    QString result = writeData(list.join("\r\n"), "SetSystemDateAndTimeResponse", "設(shè)置時(shí)間", false);
    return result.contains("SetSystemDateAndTimeResponse");
}

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í)間 一般請(qǐng)求都是很快的 除非對(duì)方不在線則卡很久 需要設(shè)置下超時(shí)時(shí)間
    QNetworkReply *reply = device->request->post(device->deviceUrl, dataSend, 3000);
    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);
}

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

本文題目:Qt音視頻開(kāi)發(fā)怎么設(shè)置Onvif時(shí)間
文章路徑:http://jinyejixie.com/article12/ggeggc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作品牌網(wǎng)站建設(shè)、商城網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站維護(hù)、企業(yè)建站

廣告

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

成都網(wǎng)頁(yè)設(shè)計(jì)公司
东乌| 邓州市| 临沧市| 武鸣县| 灵璧县| 华蓥市| 大邑县| 道孚县| 洛浦县| 大足县| 获嘉县| 铁岭县| 明溪县| 房产| 广河县| 昌吉市| 墨竹工卡县| 新巴尔虎右旗| 西华县| 天祝| 登封市| 营口市| 皋兰县| 鹰潭市| 榆林市| 萝北县| 会泽县| 德化县| 聂拉木县| 芦溪县| 威远县| 辽阳市| 汪清县| 微山县| 贵溪市| 荆州市| 许昌市| 纳雍县| 泸水县| 华亭县| 茂名市|