Qt5 从局域网获取 mjpeg 流

Posted

技术标签:

【中文标题】Qt5 从局域网获取 mjpeg 流【英文标题】:Qt5 get mjpeg stream from LAN 【发布时间】:2015-09-23 16:05:49 【问题描述】:

我想使用 QNetworkAccessManager 从指定的 URL 获取 mjpeg 流,但我失败了。

这是我的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

    ui->setupUi(this);
    webCam = new QNetworkAccessManager(this);
    connect(webCam,SIGNAL(finished(QNetworkReply*)),this,SLOT(replySteamFinish(QNetworkReply*)));
    QString cam = "http://192.168.1.1:8080/?action=stream";
    QNetworkRequest req;
    req.setUrl(cam);
    webCam->get(req);


MainWindow::~MainWindow()

    delete ui;


void MainWindow::replySteamFinish(QNetworkReply *reply)

    if(reply->error() == QNetworkReply::NoError)
        QByteArray data = reply->readAll();
        qDebug() << data;
    /*I just test whether receive the mjpeg stream data.*/
    
    else
        qDebug() << reply->error();
    

我正在尝试接收 mjpeg 流数据,但 qDebug() 不起作用,没有输出。 当我在 chrome 中输入“http://192.168.1.1:8080/?action=stream”时,网页会流畅地显示 mjpeg 流。

我应该如何解决它? :)

【问题讨论】:

【参考方案1】:

最后我用QTcpSocket解决了这个问题。

    #include "mainwindow.h"
    #include "ui_mainwindow.h"

    MainWindow::MainWindow(QWidget *parent) :
        QMainWindow(parent),
        ui(new Ui::MainWindow)
    
        ui->setupUi(this);
        tcpSocket = new QTcpSocket(this);
        tcpSocket->connectToHost("192.168.1.1",8080);
        connect(tcpSocket,SIGNAL(readyRead()),this,SLOT(tcpDataReceive()));

    

    MainWindow::~MainWindow()
    
        delete ui;
    


    void MainWindow::tcpDataReceive()
    
        QByteArray data = QByteArray::fromHex(tcpSocket->readAll());
        qDebug() << data;
    

    void MainWindow::on_pushButton_clicked()
    
        tcpSocket->write("GET /?action=stream\r\n\r\n");
    

我认为 mjpeg 流不能触发 SIGNAL 完成,因为 mjpeg 数据总是传输。所以,我选择使用 SIGNAL readyRead()。 :)

【讨论】:

以上是关于Qt5 从局域网获取 mjpeg 流的主要内容,如果未能解决你的问题,请参考以下文章

摄像头获取视频后如何将实时画面通过网线传输给局域网内的另外一台电脑。

如何将 MJPEG 流保存到磁盘(C# .NET)?

长期从第三方获取数据及回写(两个局域网之间)

在 Android 上获取 IP Cam 视频流 (MJPEG)

如何从网络摄像头获取原始 mjpg 流

仿QQ局域网聊天软件