C++ QMediaPlayer可以';不要打开媒体文件

C++ QMediaPlayer可以';不要打开媒体文件,c++,qt,video,codec,multimedia,C++,Qt,Video,Codec,Multimedia,我正在尝试在我的应用程序中设置QVideoWidget,但没有音频/视频。以下是我创建相关对象的方式: m_player = new QMediaPlayer; m_playlist = new QMediaPlaylist(m_player); m_playlist->addMedia(QUrl::fromLocalFile("/home/username/Documents/test.mp4")); m_widgetVideo = new QVideoWidget; m_playe

我正在尝试在我的应用程序中设置QVideoWidget,但没有音频/视频。以下是我创建相关对象的方式:

m_player = new QMediaPlayer;

m_playlist = new QMediaPlaylist(m_player);
m_playlist->addMedia(QUrl::fromLocalFile("/home/username/Documents/test.mp4"));

m_widgetVideo = new QVideoWidget;
m_player->setVideoOutput(m_widgetVideo);

m_layout = new QHBoxLayout(this);
m_layout->addWidget(m_widgetVideo);
this->setLayout(m_layout);

m_playlist->setCurrentIndex(0);
m_player->play();
我得到的只是一个黑屏,没有音频和视频。我不知道我是否可以在这里发布MP4文件(这是一个从YouTube下载的测试文件),所以如果有人需要关于它的信息,只要问我,我就会得到它。以下是在测试文件上运行ffprobe的结果:

此外,我还有这些gstreamer软件包:

gstreamer0.10-alsa
gstreamer0.10-ffmpeg
gstreamer0.10-nice
gstreamer0.10-plugins-bad
gstreamer0.10-plugins-bad-multiverse
gstreamer0.10-plugins-base
gstreamer0.10-plugins-base-apps
gstreamer0.10-plugins-good
gstreamer0.10-plugins-ugly
gstreamer0.10-pulseaudio
gstreamer0.10-tools
gstreamer0.10-x

gst-launch-0.10完美地播放文件,这是否意味着Qt实际上找不到已安装的GStreamer编解码器?

问题在于QMediaPlaylist。由于某种原因,它不起作用。我所要做的就是:

m_player->setMedia(QUrl::fromLocalFile("path/to/file"));

我知道这是一个老问题,但两年后,我遇到了同样的问题。因为我没有足够的代表点来发表评论,所以我将此作为一个答案

这对我很有用:

playlist = new QMediaPlaylist;
playlist->addMedia(QUrl("http://example.com/movie1.mp4"));
playlist->addMedia(QUrl("http://example.com/movie2.mp4"));
playlist->addMedia(QUrl("http://example.com/movie3.mp4"));
playlist->setCurrentIndex(1);

player = new QMediaPlayer;
player->setPlaylist(playlist);

videoWidget = new QVideoWidget;
player->setVideoOutput(videoWidget);
videoWidget->show();

player->play();
直接从

至于@winglead的答案中的“为什么”部分,我在猜测

m_playlist = new QMediaPlaylist(m_player);
在逻辑上将播放列表设置为播放器的子项,但未设置m_player的播放列表属性


HTH

可能是mp4缺少后端插件,您应该先尝试一些AVI或MP3文件,看看您的代码是否工作正常这些都不工作。希望有帮助。这是一个跨平台的应用程序,所以我相信我不能依赖Windows的编解码器包。(我的测试机器上有libav)所以我想你可以为每个目标平台包含编解码器,或者你可以使用像VLC这样的库来解码几乎任何东西,或者你可以将你的播放器限制为机器上已经包含的编解码器。FFMPEG还有为mp4制作的库。
m_playlist = new QMediaPlaylist(m_player);