Qt Stream IP Camera Video

时间:2015-05-27 22:39:17

标签: qt video network-programming

我正在尝试使用Qt multimedia(Qt 5)从IP摄像机流式传输视频。 类似的问题可以在这里找到:Play a Live video Stream using Qt但我尽量避免使用其他库,如LibVLC。 我设法从本地存储的文件中显示视频,但不显示来自IP摄像机的流。

这是我的代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMediaPlayer>
#include <qvideowidget.h>
#include <QVideoWidget>

#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this-> resize(1000,1000);
    QMediaPlayer *mp = new QMediaPlayer(0,0);
    QMediaContent *mc = new QMediaContent(QUrl("http://96.10.1.168/mjpg/video.mjpg"));
    //QMediaContent *mc = new QMediaContent(QUrl::fromLocalFile("/Users/userName/Desktop/marsUni.mp4"));
    mp->setMedia(*mc);
   QVideoWidget *vw = new QVideoWidget(this);
   vw->setMaximumSize(704, 576);
   vw->setMinimumSize(704, 576);

   mp->setVideoOutput(vw);
   this->setCentralWidget(vw);
   vw->show();
   mp->play();
}

MainWindow::~MainWindow()
{
    delete ui;
}

如果我取消注释包含QUrl :: fromLocalFile的行,我可以显示本地文件。如果我在VLC中打开指向http://96.10.1.168/mjpg/video.mjpg的网络连接,我可以显示相机流。 我在Mac OS 10.9上。

为什么我无法从IP摄像头流式传输视频? 任何意见或调试建议将不胜感激。

1 个答案:

答案 0 :(得分:1)

您需要使用QNetworkRequest构造函数来访问HTTP资源。

此规范在QMediaContent构造函数的文档中:

  

QMediaContent :: QMediaContent(const QNetworkRequest&amp; request)

     

构造一个媒体内容,其中包含提供引用的请求   内容。

     

此构造函数可用于通过网络引用媒体内容   HTTP等协议。这可能包括其他信息   需要获取资源,例如Cookie或HTTP标头。

http://doc.qt.io/qt-5/qmediacontent.html#QMediaContent-3