• 4846阅读
  • 3回复

[提问]QT5获取网络视频流请教 [复制链接]

上一主题 下一主题
离线chief5566
 

只看楼主 倒序阅读 楼主  发表于: 2015-09-23
请问我想从http://192.168.1.1:8080/?action=stream上获取视频流,如何用QNetworkAccessManager实现呢?
我现在的写法:
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);

void MainWindow::replySteamFinish(QNetworkReply *reply){
if(reply->error() == QNetworkReply::NoError){
QByteArray data = reply->readAll();
qDebug() << data;
}
else{ qDebug() << reply->error();
}
}


可是qDebug没有任何输出啊!
离线chief5566

只看该作者 1楼 发表于: 2015-09-24
是不是因为 http://192.168.1.1:8080/?action=stream 这个地址在不断的发出视频流,所以 QNetworkAccessManager一直在等他产生finished()信号。但是视频传输并没有终止,所以并没有触发finished信号?
离线chief5566

只看该作者 2楼 发表于: 2015-09-24
好吧 最后自己用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");
}
离线jj200602

只看该作者 3楼 发表于: 2015-09-25
你应该用 readyRead() ,而不是 finished()
快速回复
限100 字节
 
上一个 下一个