【问题标题】:QMediaPlayer can't open media filesQMediaPlayer 无法打开媒体文件
【发布时间】:2013-11-13 04:08:53
【问题描述】:

我正在尝试在我的应用程序中设置 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 的结果:http://pastebin.com/xpMYbApY

QMediaPlayer->duration();  = -1
QMediaPlayer->supportedMimeTypes(); = ()
QMediaPlayer->errorString() = ""

另外,我有这些 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编解码器?

【问题讨论】:

  • 可能是mp4缺少后端插件,您应该先尝试一些AVI或MP3文件,看看您的代码是否正常
  • 这些都不起作用。
  • stackoverflow.com/questions/12584767/… 希望对您有所帮助。
  • 这是一个跨平台的应用程序,所以我相信我不能依赖 Windows 的编解码器包。 (我的测试机器上有 libav)
  • 所以我想你可以为每个目标平台包含编解码器,或者你可以使用 VLC 之类的库来解码几乎任何东西,或者你可以将播放器限制为机器上已经包含的编解码器. FFMPEG 也有为 mp4 制作的库。

标签: c++ qt video codec multimedia


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    这对我有用:

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

    取自here

    至于@wingleader 的回答中的原因,我猜

    m_playlist = new QMediaPlaylist(m_player);
    

    在逻辑上将播放列表作为播放器的父级,但没有设置 m_player 的播放列表属性。

    HTH

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-07
      • 1970-01-01
      • 2019-01-06
      • 1970-01-01
      • 2011-11-22
      • 1970-01-01
      相关资源
      最近更新 更多