如何解决如何使用Gstreamer从UDP套接字接收在Qt应用程序中显示流视频帧
我想使用Qt Multimedia来显示视频流。
我跑了
@服务器:$ gst-launch-1.0 -v videotestsrc pattern = ball! video / x-raw,width = 1280,height = 720! jpegenc! rtpjpegpay! udpsink名称=接收器主机=本地主机端口= 34400 sync = false async = false
@client:$ gst-launch-1.0 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
它的工作正常。
现在我想在一个终端上执行服务器命令,而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
解决方法
从Qt 5.12.2开始,如果使用GStreamer后端,则可以将GStreamer管道传递给QMediaPlayer :: setMedia()。在您的情况下,setMedia()的代码应如下所示(未经测试):
...
player->setMedia(QUrl("gst-pipeline: udpsrc port=34400 caps=\"application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)JPEG,payload=(int)26\" ! rtpjpegdepay ! jpegdec ! videoconvert ! xvimagesink name=\"qtvideosink\""));
...
看看documentation 以获得更多信息。
,我已经编辑了我的应用程序,但仍然遇到同样的问题。
svcutil
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。