Qt5从局域网获取mjpeg流

时间:2015-09-23 16:05:49

标签: c++ qt qnetworkaccessmanager

我想使用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 个答案:

答案 0 :(得分: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()。 :)