mam skonfigurować serwer i strumieniowej transmisji wideo, dzięki czemu można podłączyć do strumienia z ffplay za pomocą następującego polecenia:Jak odtwarzać strumień z QMediaPlayer
ffplay rtmp://<IP>/path
Czy jest możliwe aby użyć QMediaPlayer QMediaContent lub coś, co łączy się z tym strumieniem?
A może jakikolwiek inny strumień, który mogę utworzyć za pomocą ffserver.
używanie tej samej ścieżki, co przy odtwarzaniu z gry, powoduje "Nieobsługiwany schemat adresu URL!"
Z dalszych eksperymentów Próbowałem ffserver serwer HTTP streamingu, ale zakończyła się upaść w MFStreamer Qt :: doRead()
Podobno powinien nazwali BeginRead dla MFStreamer ale tak się nie stało.
Jak odtwarzać strumienie wideo za pomocą QMediaPlayer?
Edycja: tutaj jest mój kod
videotest.cpp
#include "videotest.h"
#include <QVBoxLayout>
#include <QVideoWidget>
#include <qmediaplayer.h>
#include <QMediaContent>
#include <QNetworkAccessManager>
#include <QNetworkReply>
struct VideoTest::Private
{
QMediaPlayer * mediaPlayer;
QNetworkAccessManager * networkAccessManager;
QNetworkReply * reply;
};
VideoTest::VideoTest(QWidget *parent)
: QMainWindow(parent)
{
d = new Private;
d->mediaPlayer = new QMediaPlayer(this, QMediaPlayer::StreamPlayback);
d->networkAccessManager = new QNetworkAccessManager(this);
ui.setupUi(this);
QVideoWidget * videoWidget = new QVideoWidget(ui.centralWidget);
videoWidget->show();
QPalette palette = videoWidget->palette();
palette.setColor(QPalette::Background, QColor(0, 0, 0));
videoWidget->setPalette(palette);
ui.videoLayout->addWidget(videoWidget);
d->mediaPlayer->setVideoOutput(videoWidget);
connect(ui.playButton, SIGNAL(clicked()), d->mediaPlayer, SLOT(play()));
connect(ui.pauseButton, SIGNAL(clicked()), d->mediaPlayer, SLOT(pause()));
connect(ui.videoUrlEdit, SIGNAL(editingFinished()), this, SLOT(sourceChanged()));
connect(d->mediaPlayer, SIGNAL(error()), this, SLOT(stateChanged()));
connect(d->mediaPlayer, SIGNAL(stateChanged), this, SLOT(stateChanged()));
}
VideoTest::~VideoTest()
{
delete d;
}
void VideoTest::sourceChanged()
{
d->reply = d->networkAccessManager->get(QNetworkRequest(ui.videoUrlEdit->text()));
if(d->reply)
{
connect(d->reply, SIGNAL(readyRead()), this, SLOT(networkRequestReady()));
}
}
void VideoTest::stateChanged()
{
QString text = ui.textEdit->toPlainText();
text.append("\n").append(d->mediaPlayer->errorString()).append(" : ").append(d->mediaPlayer->mediaStatus());
ui.textEdit->setText(text);
}
void VideoTest::networkRequestReady()
{
d->mediaPlayer->setMedia(QMediaContent(), d->reply);
}
videotest.h
#ifndef VIDEOTEST_H
#define VIDEOTEST_H
#include <QtWidgets/QMainWindow>
#include "ui_videotest.h"
class VideoTest : public QMainWindow
{
Q_OBJECT
public:
VideoTest(QWidget *parent = 0);
~VideoTest();
public slots:
void sourceChanged();
void stateChanged();
void networkRequestReady();
private:
Ui::VideoTestClass ui;
struct Private;
Private * d;
};
#endif // VIDEOTEST_H
[To tylko link] (http://stackoverflow.com/questions/21448027/play-a-live-video-stream-using-qt), ale myślę, że to ci pomoże. –
Nadal nie mówi, jak podłączyć QMediaPlayer do strumienia lub jakie rodzaje strumieni współpracują z QMediaPlayer. Mój strumień działa z ffplay, mplayer, VLC, ale nie z QMediaPlayer. – 0xbaadf00d
Zaakceptowałem moją odpowiedź, ale jeśli stworzysz taką, która sprawia, że QMediaPlayer odtwarza strumień lub jest po prostu lepsza na jakimś podstawowym poziomie, zmienię znak. – 0xbaadf00d