請問我想從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沒有任何輸出啊!
uj5u.com熱心網友回復:
是不是因為 http://192.168.1.1:8080/?action=stream 這個地址在不斷的發出視頻流,所以 QNetworkAccessManager一直在等他產生finished()信號。但是視頻傳輸并沒有終止,所以并沒有觸發finished信號?uj5u.com熱心網友回復:
好吧 最后自己用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");}uj5u.com熱心網友回復:
你應該用 readyRead() ,而不是 finished()uj5u.com熱心網友回復:
qt新手求代碼轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/212647.html
標籤:其他技術討論專區
上一篇:手機推薦
下一篇:請教QML和EChart的問題
