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 вместо написания собственного виджета Видео.

Другие вопросы по тегам