91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Qt Onvif云臺控制怎么實現

發布時間:2021-12-15 10:18:50 來源:億速云 閱讀:238 作者:iii 欄目:互聯網科技

這篇文章主要講解了“Qt Onvif云臺控制怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Qt Onvif云臺控制怎么實現”吧!

一、前言

云臺控制也是onvif功能中最常用的,最常用的功能排第一的是拿到視頻流地址,排第二的就是云臺控制了,云臺控制的含義就是對帶云臺的攝像機進行上下左右的移動,一般云臺攝像機都是帶有一個小電機,一旦收到485或者網絡來的正確的指令以后就觸發單片機程序,然后單片機程序驅動電機進行轉動,所以相對來說云臺攝像機比普通的攝像機更耗電,當然價格也更貴。

云臺控制的發送命令除了用戶信息玩主要就三個核心參數xyz,通過這三個參數的組合來實現云臺和焦距的控制,云臺的轉動主要就是改變xy的值,焦距的控制通過改變z的值來實現。

云臺控制說明:

  1. x、y、z 范圍都在0-1之間。

  2. x為負數,表示左轉,x為正數,表示右轉。

  3. y為負數,表示下轉,y為正數,表示上轉。

  4. z為正數,表示拉近,z為負數,表示拉遠。

  5. 通過x和y的組合,來實現云臺的控制。

  6. 通過z的組合,來實現焦距控制。

onvif主要的功能:

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

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

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

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

  5. 獲取預置位信息,觸發預置位。

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

  7. 抓圖,獲取設備當前的圖片。

  8. 獲取、創建、刪除用戶信息。

  9. 獲取和設備網絡配置信息比如IP地址等。

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

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

  12. 重啟設備。

onvif的處理流程:

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

  2. 接收到的xml格式的數據解析,得到設備的Onvif地址。

  3. 對Onvif地址發送對應的數據,收到數據取出對應的節點數據。

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

  5. ptz控制是對Ptz地址發送對應的數據即可。

  6. 設置了用戶認證的需要組織用戶token信息一塊發送,每次都需要作鑒權處理。

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

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

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

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

二、功能特點

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

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

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

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

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

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

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

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

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

  10. 支持任意Onvif攝像機和NVR,親測海康、大華、宇視、華為、海思芯片內核等,可定制開發。

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

  12. 支持指定過濾條件過濾搜索設備。

  13. 支持搜索間隔設置,保證所有設備搜索回來,在大量設備現場很有用。

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

  15. 支持NTP校時和時間同步設置。

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

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

  18. 工具上提供了收發數據文本框,顯示收發的數據,方便查看和分析。

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

三、效果圖

Qt Onvif云臺控制怎么實現

四、核心代碼

void frmPtz::moveAbsolute()
{
    OnvifDevice *device = frm->getCurrentDevice();
    if (device) {
        QString profile = frm->getProfile();
        device->moveAbsolute(profile, x, y, z);
        frm->append(5, QString("執行絕對移動-> x: %1  y: %2  z: %3").arg(x).arg(y).arg(z));
    }
}

void frmPtz::moveRelative()
{
    OnvifDevice *device = frm->getCurrentDevice();
    if (device) {
        QString profile = frm->getProfile();
        device->moveRelative(profile, x, y, z);
        frm->append(5, QString("執行相對移動-> x: %1  y: %2  z: %3").arg(x).arg(y).arg(z));
    }
}

void frmPtz::setFrm(frmMain *frm)
{
    this->frm = frm;
}

void frmPtz::on_btnPtzUp_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = 0.0;
        y = 0.1;
        z = 0.0;
        moveRelative();
    } else {
        y = 0.1;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzDown_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = 0.0;
        y = -0.1;
        z = 0.0;
        moveRelative();
    } else {
        y = -0.0;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzLeft_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = -0.1;
        y = 0.0;
        z = 0.0;
        moveRelative();
    } else {
        x = 0.0;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzRight_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = 0.1;
        y = 0.0;
        z = 0.0;
        moveRelative();
    } else {
        x = 0.1;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzLeftUp_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = -0.1;
        y = 0.1;
        z = 0.0;
        moveRelative();
    } else {
        x = 0.0;
        y = 0.0;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzLeftDown_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = -0.1;
        y = -0.1;
        z = 0.0;
        moveRelative();
    } else {
        x = 0.1;
        y = 0.1;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzRightUp_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = 0.1;
        y = 0.1;
        z = 0.0;
        moveRelative();
    } else {
        x = 0.0;
        y = 0.0;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzRightDown_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = 0.1;
        y = -0.1;
        z = 0.0;
        moveRelative();
    } else {
        x = 0.1;
        y = 0.1;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzZoomIn_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = 0.0;
        y = 0.0;
        z = 0.01;
        moveRelative();
    } else {
        z = 0.01;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzZoomOut_clicked()
{
    if (ui->rbtnMoveRelative->isChecked()) {
        x = 0.0;
        y = 0.0;
        z = -0.01;
        moveRelative();
    } else {
        z = 0.0;
        moveAbsolute();
    }
}

void frmPtz::on_btnPtzStop_clicked()
{
    OnvifDevice *device = frm->getCurrentDevice();
    if (device) {
        frm->setText("ptzStop");
        QString profile = frm->getProfile();
        device->moveStop(profile);
    }
}

void frmPtz::on_btnPtzReset_clicked()
{
    x = 0.0;
    y = 0.0;
    z = 0.0;
    moveAbsolute();
}

感謝各位的閱讀,以上就是“Qt Onvif云臺控制怎么實現”的內容了,經過本文的學習后,相信大家對Qt Onvif云臺控制怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

彭山县| 温宿县| 连城县| 河北省| 屯昌县| 深泽县| 南部县| 五华县| 绩溪县| 翁牛特旗| 康定县| 泰顺县| 阿拉尔市| 涟源市| 安多县| 健康| 邳州市| 镇远县| 五家渠市| 临颍县| 蓬安县| 镇康县| 峨边| 阳春市| 黔江区| 昌平区| 定陶县| 汉中市| 江川县| 永胜县| 洛川县| 平舆县| 安龙县| 桐梓县| 安宁市| 甘肃省| 武宣县| 漳州市| 同仁县| 响水县| 兴仁县|