Tôi đã thiết lập một máy chủ và video để tôi có thể kết nối với các dòng với ffplay sử dụng dòng lệnh sau:Làm thế nào để tôi chơi một dòng với QMediaPlayer
ffplay rtmp://<IP>/path
Có thể sử dụng QMediaPlayer QMediaContent hoặc thứ gì đó để kết nối với luồng này?
Hoặc có thể là bất kỳ loại luồng nào khác mà tôi có thể tạo bằng ffserver.
sử dụng cùng một đường dẫn với kết quả ffplay trong "Lược đồ url không được hỗ trợ!"
Với thí nghiệm hơn nữa tôi đã cố gắng ffserver máy chủ http trực tuyến, nhưng điều đó đã kết thúc với Qt đâm trong MFStreamer :: doRead()
Rõ ràng nó cần phải có gọi BeginRead cho MFStreamer nhưng nó thì không.
Tôi làm cách nào để phát luồng video bằng QMediaPlayer?
Edit: đây là mã của tôi
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
[Nó chỉ là một liên kết] (http://stackoverflow.com/questions/21448027/play-a-live-video-stream-using-qt) nhưng tôi nghĩ điều này sẽ giúp bạn. –
Nó vẫn không nói cách kết nối QMediaPlayer với luồng hoặc loại luồng nào hoạt động với QMediaPlayer. Luồng của tôi hoạt động với ffplay, mplayer, VLC nhưng không hoạt động với QMediaPlayer. – 0xbaadf00d
Tôi chấp nhận câu trả lời của mình, nhưng nếu bạn sản xuất câu trả lời khiến QMediaPlayer phát trực tuyến hoặc chỉ tốt hơn ở một số mức cơ bản, tôi sẽ thay đổi điểm. – 0xbaadf00d