国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

QT獲取ESP32-CAM視頻流分析

這篇具有很好參考價(jià)值的文章主要介紹了QT獲取ESP32-CAM視頻流分析。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

QT獲取ESP32-CAM視頻流分析

1、前言

??????使用QT獲取ESP32-CAM視頻流的原理是在QT模擬瀏覽器發(fā)送http請(qǐng)求,然后ESP32-CAM返回視頻流,當(dāng)QT界面接收到數(shù)據(jù)后,對(duì)數(shù)據(jù)進(jìn)行解析,然后合成圖片進(jìn)行顯示。
??????在QT中發(fā)送http請(qǐng)求的方法很多,這里使用Qt網(wǎng)絡(luò)模塊中的類QNetworkReply發(fā)送http請(qǐng)求。

2、核心代碼以及數(shù)據(jù)分析

??????①下面是QT的一個(gè)構(gòu)造函數(shù),當(dāng)程序跑起來后,首先跑這部分代碼,在這里模擬發(fā)送hhtp請(qǐng)求。其中ESP32-CAM分配到的IP地址是192.168.1.8.

#include <QHostAddress>
#include <QNetworkAccessManager>
#include <QNetworkRequest>
#include <QNetworkReply>
#include <QUrl>
#include <QQueue>
#include <QDebug>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QNetworkAccessManager *manager = new QNetworkAccessManager();
    QNetworkRequest request(QUrl("http://192.168.1.8"));

    QNetworkReply *reply= manager->get(request);

    connect(reply, &QNetworkReply::finished, [reply]() {
        if (reply->error())
        {
            qDebug() << "Error:" << reply->errorString();
        }
        else
        {
            qDebug() << "Success:" << reply->readAll();
        }
        reply->deleteLater();
    });
}

這部分代碼運(yùn)行成功后,應(yīng)該有如下打?。?br>QT獲取ESP32-CAM視頻流分析
上面就是返回一個(gè)網(wǎng)頁,當(dāng)你把http://192.168.1.8復(fù)制到網(wǎng)頁去搜索,會(huì)返回下面的頁面:
QT獲取ESP32-CAM視頻流分析

??????②下面是進(jìn)行視頻流http請(qǐng)求代碼,調(diào)用它,運(yùn)行后可以打印接收到的原始數(shù)據(jù)。注意視頻流使用的是81端口。

void MainWindow::start()
{
    QNetworkAccessManager *manager = new QNetworkAccessManager();
    QNetworkRequest request;
    request.setUrl(QUrl("http://192.168.1.8:81/stream"));
    request.setRawHeader("Connection", "Keep-Alive");
    request.setRawHeader("User-Agent", "1601");

    Client = manager->get(request);  //Client為QNetworkReply類型,在MainWindow類里面定義

    connect(Client, &QNetworkReply::readyRead, this, &MainWindow::dataReceived);

}
void MainWindow::dataReceived()
{
    // 打印接收內(nèi)容
    QByteArray buffer = Client->readAll();
    qDebug() << buffer;
    qDebug() << "----------------------";
}

接收到的原始數(shù)據(jù)如下:
QT獲取ESP32-CAM視頻流分析
??????上面接收到的原始數(shù)據(jù)是不能直接用的。就是每次一次接收到的數(shù)據(jù)并不是一幀完整的數(shù)據(jù)。因此需要把每次接收到的數(shù)據(jù)存儲(chǔ)起來,然后進(jìn)行切割。切割的思路是:先這樣這樣,然后再這樣這樣。

??????在完成數(shù)據(jù)的存儲(chǔ)和切割后,得到如下一幀一幀完整的數(shù)據(jù)。(在下面的數(shù)據(jù)中,每一幀數(shù)據(jù)只打印了前100個(gè)字節(jié)和后100個(gè)字節(jié))。每一幀數(shù)據(jù)以“Content-Type: image/jpeg\r\nContent-Length: 28912\r\n\r\n\”開頭,以“\r\n–123456789000000000000987654321\r\n”結(jié)束,中間部分的數(shù)據(jù)就是圖片數(shù)據(jù),圖片數(shù)據(jù)的長(zhǎng)度是Content-Length后面的數(shù)字(28912)。把中間部分?jǐn)?shù)據(jù)提取出來即可合成圖片。
QT獲取ESP32-CAM視頻流分析
??????切割數(shù)據(jù)的思路是:每次接收到原始數(shù)據(jù),都要判斷一下是否包含字符串“Content-Type”,如不包含,則當(dāng)前接收的數(shù)據(jù)歸為上一幀數(shù)據(jù),若包含,則在當(dāng)前接收到的數(shù)據(jù)里面,將Content-Type前面部分的數(shù)據(jù)歸為上一幀數(shù)據(jù),而以Content-Type開始的后半部分?jǐn)?shù)據(jù)歸為下一幀數(shù)據(jù)。(其實(shí)就是將兩幀黏起來的數(shù)據(jù)進(jìn)行切割)。

??????③合成圖片的關(guān)鍵代碼

void MainWindow::dataProcess( )
{
    QString data = QString::fromUtf8(frameBuffer.data(), 50); //截取前面50個(gè)字符

//    qDebug() <<frameBuffer.left(100)<<"......";
//    qDebug() <<frameBuffer.right(100);
//    qDebug() <<"------------------------";

    const QString lengthKeyword = "Content-Length: ";

    int lengthIndex = data.indexOf(lengthKeyword);
    if (lengthIndex >= 0) {
        int endIndex = data.indexOf("\r\n", lengthIndex);
        int length = data.midRef(lengthIndex + 16, endIndex - (lengthIndex + 16 - 1)).toInt(); //取出Content-Length后的數(shù)字
        QPixmap pixmap;
        auto loadStatus = pixmap.loadFromData(frameBuffer.mid(endIndex + 4, length)); //取出圖片數(shù)據(jù),并合成圖片

        if (!loadStatus) {
            qDebug() << "Video load failed";
            frameBuffer.clear();
            return;
        }

        frameBuffer.clear();
        QPixmap pps = pixmap.scaled(ui->label_display->width(), ui->label_display->height(), Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
        ui->label_display->setPixmap(pps);
    }
}

3、圖片合成效果

跟網(wǎng)頁效果差不多,很流暢。
QT獲取ESP32-CAM視頻流分析

4、源碼

ESP32CAM.exe
https://www.aliyundrive.com/s/CwhgTsmggwG
提取碼: 9ek4
點(diǎn)擊鏈接保存,或者復(fù)制本段內(nèi)容,打開「阿里云盤」APP ,無需下載極速在線查看,視頻原畫倍速播放。

5、結(jié)束

加油,打工人。文章來源地址http://www.zghlxwxcb.cn/news/detail-419262.html

到了這里,關(guān)于QT獲取ESP32-CAM視頻流分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 如何用java獲取視頻流處理

    ? ? ? ?可以使用JavaCV庫,它是OpenCV在Java中的接口,并且提供了訪問視頻流的功能。 以下是JavaCV獲取視頻流并處理幀的一個(gè)簡(jiǎn)單示例: ? ? ? 這個(gè)示例代碼中,我們使用FFmpegFrameGrabber類從rtsp視頻URL中抓取每一幀。在while循環(huán)中,我們可以處理每一幀的Mat對(duì)象并執(zhí)行必要的邏

    2024年02月12日
    瀏覽(29)
  • ffmpeg從攝像頭獲取視頻流

    使用FFmpeg獲取本地?cái)z像頭設(shè)備 ffmpeg -list_devices true -f dshow -i dummy ffmpeg -f dshow -i video=\\\"e2eSoft iVCam\\\" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://127.0.0.1/test ffmpeg -f dshow -i video=\\\"OBS Virtual Camera\\\" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp

    2024年02月11日
    瀏覽(101)
  • QT實(shí)現(xiàn)OpenCV播放rtsp視頻流

    QT實(shí)現(xiàn)OpenCV播放rtsp視頻流

    使用OpenCV(圖像處理)、FastDeploy(飛槳部署)庫; 監(jiān)控相機(jī)傳輸數(shù)據(jù)用的是碼流,高清網(wǎng)絡(luò)攝像機(jī)產(chǎn)品編碼器都會(huì)產(chǎn)生兩個(gè)編碼格式,稱為 主碼流 和 子碼流 。這就叫雙碼流技術(shù)。 目的是用于解決監(jiān)控錄像的本地存儲(chǔ)和網(wǎng)絡(luò)傳輸?shù)膱D像的質(zhì)量問題。雙碼流能實(shí)現(xiàn)本地和遠(yuǎn)程

    2024年02月03日
    瀏覽(100)
  • OpenCV獲取網(wǎng)絡(luò)攝像頭實(shí)時(shí)視頻流

    參考文章: [常用工具] OpenCV獲取網(wǎng)絡(luò)攝像頭實(shí)時(shí)視頻流_opencv網(wǎng)絡(luò)攝像頭 [常用工具] OpenCV獲取網(wǎng)絡(luò)攝像頭實(shí)時(shí)視頻流_opencv網(wǎng)絡(luò)攝像頭_落痕的寒假的博客-CSDN博客 在使用OpenCv處理視頻時(shí),無論是視頻文件還是攝像頭畫面,都要使用VideoCapture類來進(jìn)行每一幀圖像的處理。當(dāng)我們

    2024年02月01日
    瀏覽(101)
  • 利用ffmpeg分析視頻流

    ffprobe -show_packets -i \\\"rtsp://192.168.61.46:8554/live?channel=0type=0\\\":該命令用于顯示 RTSP 流中的數(shù)據(jù)包信息,例如時(shí)間戳、大小、持續(xù)時(shí)間等。 ffprobe -i \\\"rtsp://192.168.61.46:8554/live?channel=0type=0\\\":該命令用于顯示輸入 RTSP 流的基本信息,例如時(shí)長(zhǎng)、編解碼器、分辨率等。 ffprobe -show_format -

    2024年02月13日
    瀏覽(19)
  • Qt推流程序自動(dòng)生成網(wǎng)頁遠(yuǎn)程查看實(shí)時(shí)視頻流(視頻文件/視頻流/攝像頭/桌面轉(zhuǎn)成流媒體rtmp+hls+webrtc)

    Qt推流程序自動(dòng)生成網(wǎng)頁遠(yuǎn)程查看實(shí)時(shí)視頻流(視頻文件/視頻流/攝像頭/桌面轉(zhuǎn)成流媒體rtmp+hls+webrtc)

    推流程序?qū)⒁曨l流推送到流媒體服務(wù)器后,此時(shí)就等待驗(yàn)證拉流播放,一般可以選擇ffplay命令行播放或者vlc等播放器打開播放,也可以選擇網(wǎng)頁直接打開拉流地址播放,一般主流的瀏覽器都支持網(wǎng)頁直接播放hls/m3u8/webrtc類型的視頻流,而且推流的主要目的可能就是為了能夠在

    2024年02月05日
    瀏覽(104)
  • 安防視頻管理平臺(tái)GB設(shè)備接入EasyCVR, 如何獲取RTMP與RTSP視頻流

    安防視頻管理平臺(tái)GB設(shè)備接入EasyCVR, 如何獲取RTMP與RTSP視頻流

    安防視頻監(jiān)控平臺(tái)EasyCVR可拓展性強(qiáng)、視頻能力靈活、部署輕快,可支持的主流標(biāo)準(zhǔn)協(xié)議有國標(biāo)GB28181、RTSP/Onvif、RTMP等,以及支持廠家私有協(xié)議與SDK接入,包括??礒home、海大宇等設(shè)備的SDK等。平臺(tái)既具備傳統(tǒng)安防視頻監(jiān)控的能力,比如:視頻監(jiān)控直播、云端錄像、云存儲(chǔ)、錄

    2024年02月15日
    瀏覽(25)
  • VS+QT+Opencv使用YOLOv4對(duì)視頻流進(jìn)行目標(biāo)檢測(cè)

    對(duì)單張圖像的檢測(cè),請(qǐng)參考:https://blog.csdn.net/qq_45445740/article/details/109659938

    2024年02月12日
    瀏覽(92)
  • 樹莓派學(xué)習(xí):學(xué)習(xí)opencv+用opencv獲取樹莓派mjpg攝像頭視頻流

    目錄 前提步驟 打開樹莓派攝像頭 查看是否有圖像,登錄游覽器打開樹莓派IP地址的8080端口 獲取mjpg的視頻流url 代碼 先設(shè)定好mjpg的視頻流的url 利用opencv庫中的v2.VideoCapture類讀取mjpg視頻流? ?cv2.VideoCapture() 檢查攝像頭是否成功打開,如果沒有,則打印錯(cuò)誤消息并退出程序?

    2024年02月03日
    瀏覽(98)
  • Unity3d 獲取場(chǎng)景中攝像頭視頻流,實(shí)現(xiàn)直播效果(無需代碼)

    Unity3d 獲取場(chǎng)景中攝像頭視頻流,實(shí)現(xiàn)直播效果(無需代碼)

    下面是具體操作流程: ? 1. 搭建服務(wù)器,選用github 一個(gè)開源的 node.js服務(wù)器。 下載地址GitHub - iizukanao/node-rtsp-rtmp-server: RTSP/RTMP/HTTP hybrid server,點(diǎn)擊克隆,選擇ZIP下載。? 2. 下載node.js( 官網(wǎng)鏈接 Node.js) ? 選擇下載最新版本,并根據(jù)提示一步步安裝即可。 3.搭建服務(wù)器。 找到

    2023年04月08日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包