QVideoWidget黑色窗口

时间:2016-01-11 10:42:24

标签: c++ qt user-interface video

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

#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 Wheezy并尝试为i386台式机构建代码。

我错过了一些重要的内容,所以这段代码不起作用?只有我得到的是QWideo里面的黑色QVideoWidget窗口。

3 个答案:

答案 0 :(得分:1)

我认为你忘了将播放列表设置为播放器:

player->setPlaylist(playlist);

答案 1 :(得分:1)

这对评论来说有点多,所以我做了一个答案。但是如果你使用你认识的视频会发生什么呢?

此外,我测试了以下最小片段(请参阅有关它的问题here)。也许在让它工作之后,可以在以后轻松地集成播放列表。

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();
}

答案 2 :(得分:1)

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

如果gst123不起作用,它可以是:

  1. 您没有安装所有必需的GStreamer插件来播放此文件。根据我的经验,您至少需要以下内容:
  2. gstreamer-plugins-good
    gstreamer-plugins-base
    gstreamer-plugins-ugly
    gstreamer-plugins-bad-orig-addon
    gstreamer-plugins-qt5
    gstreamer-plugins-bad
    gstreamer-plugins-good-extra
    gstreamer-plugins-ugly-orig-addon
    gstreamer-plugins-libav
    

    确保安装正确版本的插件(例如,如果您的机器有gstreamer_0.10和gstreamer 1.x)。 Qt使用GStreamer 1.x

    1. 如果您使用的是OpenSuSE,那么您的GStreamer安装将会瘫痪,几乎无法使用。您需要添加Packman存储库并使用“供应商更改”重新安装所有已安装 GStreamer软件包。

    2. 对于某些视频,VDPAU驱动程序在QMediaPlayer中打破它(与gst123一起播放时) - 尝试删除gstreamer VDPAU插件进行检查。