2015-09-23 2 views
-1

Я хочу использовать QNetworkAccessManager, чтобы получить поток mjpeg из URL-адреса, но мне не удалось.Qt5 получить поток 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() did't работу, ничего не выводится. Когда я положил «http://192.168.1.1:8080/?action=stream» в хром, веб-дисплей потока mjpeg бегло.

Как это исправить? :)

ответ

0

Наконец, я использую 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 не может вызвать СИГНАЛ закончена, поскольку данные MJPEG transfer.So ВСЕГДА, я выбор использования SIGNAL readyRead(). :)

Смежные вопросы