Я хотел бы использовать Qt Multimedia для отображения видеопотока. Я запустил @server: $ gst-launch-1.0 -v videotestsrc pattern = ball! видео / x-raw, ширина = 1280, высота = 720! jpegenc! rtpjpegpay! udpsink name = host = localhost port = 34400 sync = false async = false
@client: $ gst-launch-1.0 udpsrc port = 34400 caps = application / x-rtp, media = (string) video, clock- rate = (int) 90000, имя-кодировки = (строка) JPEG, полезная нагрузка = (int) 26! rtpjpegdepay! jpegdec! filesink location = a.mp4 Он работает нормально. теперь я хочу, чтобы серверная команда выполнялась на одном терминале, и приложение Qt должно играть роль клиента, чтобы воспроизводить видео. Я пробовал одно приложение, но оно не работает.
main.cpp
#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 << "udpsrc" << "port=34400" << "caps=application/x-rtp, media=(string)video,
clock-rate=(int)90000, encoding-name=(string)JPEG, payload=(int)26" << "!" << "rtpjpegdepay"
<< "!" << "jpegdec" << "!" << "filesink location=a.mp4" ;
process->setReadChannel(QProcess::StandardError);
process->start(program, arguments);
while (!process->waitForReadyRead()) {}
player->setMedia(QMediaContent(), process);
player->play();
return a.exec();
QT += core gui multimedia multimediawidgets
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = video_play_file
TEMPLATE = app
SOURCES += main.cpp\
dialog.cpp
HEADERS += dialog.h
FORMS += dialog.ui