首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QVideoWidget黑窗

QVideoWidget黑窗
EN

Stack Overflow用户
提问于 2016-01-11 10:42:23
回答 3查看 1.8K关注 0票数 0

我将QVideoWidget作为一个孩子添加到QWidget中,我正在尝试播放本地的avi文件,但没有成功。以下是代码:

代码语言:javascript
复制
#include "widget.h"
#include <QApplication>
#include <QtWidgets>
#include <QtMultimediaWidgets>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget window;
    window.resize(320, 240);
    window.setWindowTitle(QApplication::translate("childwidget", "Child widget"));
    window.show();

    QMediaPlayer *player = new QMediaPlayer;

    QMediaPlaylist *playlist = new QMediaPlaylist(player);
    playlist->addMedia(QUrl::fromLocalFile("/home/designer/Desktop/drop.avi"));

    QVideoWidget *videoWidget = new QVideoWidget(&window);
    player->setVideoOutput(videoWidget);

    videoWidget->resize(320, 240);
    videoWidget->show();
    playlist->setCurrentIndex(1);
    player->play();

    return a.exec();
}

我在我的.pro文件中包含了多媒体、多媒体和小部件。

此外,gstreamer软件包安装了sudo apt-get install gstreamer* libgstreamer*,版本为0.10。

我正在VMWare上运行Debian,并试图为i386桌面计算机构建该代码。

我是不是遗漏了一些重要的东西,这样代码就不能工作了?只有我在帕伦特QWidget里面是黑色的QWidget窗口。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-01-13 04:01:41

你的问题似乎与GStreamer有关。请安装一个gst123播放器(这是纯gstreamer的播放器),并确保它没有打印错误的文件。如果没有,QMediaPlayer也不会播放它。

如果gst123不能工作,则它是以下任一项:

  1. 您没有安装所有必要的GStreamer插件来播放此文件。根据我的经验,你至少需要以下几点:

gstreamer plugins-好gstreamer plugins-基本gstreamer plugins-丑陋gstreamer插件-坏-源-插件-qt5 gstreamer插件-坏gstreamer插件-好-额外gstreamer插件-丑陋-源-插件-libav

确保您安装了适当版本的插件(例如,如果您的计算机有gstreamer_0.10和GStreewer1.x)。Qt使用GStreamer 1.x

  1. 如果您使用的是OpenSuSE,那么您的GStreamer安装就会瘫痪,几乎毫无用处。您需要添加Packman存储库,并用“供应商更改”重新安装所有已安装的 GStreamer包。
  2. 对于一些视频,VDPAU驱动程序在QMediaPlayer中破坏它(同时与gst123玩得很好)-尝试删除gstreamer插件来检查它。
票数 1
EN

Stack Overflow用户

发布于 2016-01-11 12:12:19

我想你忘了给玩家设置播放列表了:

代码语言:javascript
复制
player->setPlaylist(playlist);
票数 1
EN

Stack Overflow用户

发布于 2016-01-12 03:26:56

这是一个有点评论,所以我做了一个答复。但是如果你使用你知道的视频会发生什么呢?

此外,我还测试了以下最小的代码段(请参阅有关它的问题here)。也许在完成这个任务之后,整合播放列表就可以轻松地完成了。

代码语言:javascript
复制
int main( int argc, char **argv ){
    QApplication app(argc, argv);
    QMediaPlayer *media=new QMediaPlayer(0);
    QVideoWidget *video=new QVideoWidget(0); //new QGLWidget()
    media->setVideoOutput(video);
    media->setMedia(QUrl::fromLocalFile("/tmp/avatar.mp4"));
    media->play();
    video->show();
    return app.exec();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34719486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档