Qt 5.11 QMediaPlayer и пользовательские конвейеры GStreamer
Я пытаюсь предоставить пользовательский конвейер gstreamer для QMediaPlayer.
Следующая ссылка на тему подробно описывает, как один человек смог заставить ее работать:
Re: Отображение видеопотока с использованием Qt Multimedia и GStreamer
Я попробовал их код именно на Ubuntu 18.04 с GStreamer 1.14 и Qt 5.11. Это терпит неудачу со следующей ошибкой:
Error: "Could not determine type of stream."
appsrc: push buffer wrong state
appsrc: push buffer wrong state
appsrc: push buffer wrong state
Весь код:
#include <QApplication>
#include <QMediaPlayer>
#include <QWidget>
#include <QVideoWidget>
#include <QBoxLayout>
#include <QProcess>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget *window = new QWidget;
QVideoWidget *videoWidget = new QVideoWidget;
QBoxLayout *layout = new QVBoxLayout;
QMediaPlayer *player = new QMediaPlayer;
QProcess *process = new QProcess;
layout->addWidget(videoWidget);
window->setLayout(layout);
window->show();
player->setVideoOutput(videoWidget);
QString program = "gst-launch-1.0";
QStringList arguments;
arguments << "videotestsrc" << "!" << "video/x-raw,width=1280,height=720" << "!" << "x264enc" << "!" << "filesink" << "location=/dev/stderr";
process->start(program, arguments);
process->waitForReadyRead();
player->setMedia(QMediaContent(), process);
player->play();
return a.exec();
}
Как я могу заставить это работать? Благодарю.
1 ответ
Вы пытаетесь кодировать видео или декодировать? Вызов gst-launch-1.0 создаст его собственное окно. Если вы позвоните gst-launch playbin uri=file:///video
внутри Qt вы получите виджет QT И окно, созданное GST. Чтобы показать видео GST внутри виджета QT, вы должны использовать GST API для создания собственного виджета, который показывает видео внутри Qt.
Проверьте это https://wiki.qt.io/Qt_5.11_Multimedia_Backends, Qt Multimedia использует GStreamer в качестве бэкэнда. Возможно, вам лучше использовать Qt Multimedia вместо написания собственного виджета Видео.