我想使用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流。
我该如何解决? :)
答案 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()。 :)