C++ QVideoWidget黑色窗口

C++ QVideoWidget黑色窗口,c++,qt,user-interface,video,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); Widge

我将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();
}
#包括“widget.h”
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
窗口小部件;
调整窗口大小(320240);
setWindowTitle(QApplication::translate(“childwidget”、“childwidget”);
window.show();
QMediaPlayer*player=新的QMediaPlayer;
QMediaPlaylist*播放列表=新QMediaPlaylist(播放器);
播放列表->添加媒体(QUrl::fromLocalFile(“/home/designer/Desktop/drop.avi”);
QVideoWidget*videoWidget=新的QVideoWidget(&窗口);
播放器->设置视频输出(videoWidget);
videoWidget->调整大小(320240);
videoWidget->show();
播放列表->设置当前索引(1);
player->play();
返回a.exec();
}
我在.pro文件中包括了多媒体、多媒体小部件和小部件

此外,gstreamer软件包与sudo apt get install gstreamer*libgstreamer*一起安装,版本为0.10

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


我是不是遗漏了一些重要的东西,所以这段代码无法工作?我唯一得到的是parrent QWidget内的黑色QVideoWidget窗口。

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

player->setPlaylist(playlist);

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

player->setPlaylist(playlist);

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

此外,我还测试了以下最小的代码片段(请参见关于它的问题)。也许在这项工作完成后,整合播放列表就可以很容易地完成了

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

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

此外,我还测试了以下最小的代码片段(请参见关于它的问题)。也许在这项工作完成后,整合播放列表就可以很容易地完成了

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

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

如果gst123不工作,则为以下任一情况:

  • 您没有安装播放此文件所需的所有GStreamer插件。根据我的经验,您至少需要以下几点:
  • 确保安装正确版本的插件(例如,如果您的机器有gstreamer_0.10和gstreamer 1.x)。Qt使用GStreamer 1.x

  • 如果您使用的是OpenSuSE,那么您的GStreamer安装实际上是无用的。您需要添加Packman存储库并重新安装所有已安装的带有“供应商变更”的GStreamer软件包

  • 对于某些视频,VDPAU驱动程序会在QMediaPlayer中破坏它(同时使用gst123播放),请尝试删除gstreamer VDPAU插件以检查它


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

    如果gst123不工作,则为以下任一情况:

  • 您没有安装播放此文件所需的所有GStreamer插件。根据我的经验,您至少需要以下几点:
  • 确保安装正确版本的插件(例如,如果您的机器有gstreamer_0.10和gstreamer 1.x)。Qt使用GStreamer 1.x

  • 如果您使用的是OpenSuSE,那么您的GStreamer安装实际上是无用的。您需要添加Packman存储库并重新安装所有已安装的带有“供应商变更”的GStreamer软件包

  • 对于某些视频,VDPAU驱动程序会在QMediaPlayer中破坏它(同时使用gst123播放),请尝试删除gstreamer VDPAU插件以检查它


  • 我加了那句话,它的作用是一样的。黑屏和错误:“GStreamer错误:GStreamer遇到一般流错误”
    playlist->setCurrentIndex(1)
    -为什么是1?也许应该是0?我想问题出在GStreamer中。尝试了0,但什么都没有。我还有一个问题。什么是
    小部件窗口可能
    QWidget
    ?我在我的windows机器上用我的补丁和
    QWidget
    而不是
    Widget
    尝试你的代码,效果很好。是的,我认为在QWidget上@叶夫根尼补充了这句话,它的作用也一样。黑屏和错误:“GStreamer错误:GStreamer遇到一般流错误”
    playlist->setCurrentIndex(1)
    -为什么是1?也许应该是0?我想问题出在GStreamer中。尝试了0,但什么都没有。我还有一个问题。什么是
    小部件窗口可能
    QWidget
    ?我在我的windows机器上用我的补丁和
    QWidget
    而不是
    Widget
    尝试你的代码,效果很好。是的,我认为在QWidget上@EVGENY您是否已验证该视频文件实际上在gstreamer中播放?我相信图腾播放器使用gstreamer作为本机后端,因此如果它在那里播放,这是一个好迹象。您是否验证了视频文件实际上在gstreamer中播放?我相信图腾播放器使用gstreamer作为本机后端,因此如果它在那里播放,这是一个好迹象。