0

我正在尝试使用 Qt 制作多媒体数据库系统。我正在使用 QMultimedia 在 QVideoWidget 中播放视频。

以下是我用来在 QVideo Widget 中播放视频文件的代码:

 mMediaPlayer = new QMediaPlayer();
  mMediaPlaylist = new QMediaPlaylist();
  QMediaContent content(QMediaResource())
  mMediaPlaylist->addMedia(QUrl::fromLocalFile(QDir(QString("data")).absoluteFilePath(QString("%1.dat").arg(mMedia.GetUID()))));
    mMediaPlayer->setPlaylist(mMediaPlaylist);


    mVideoWidget = new QVideoWidget();
    mMediaPlayer->setVideoOutput(mVideoWidget);
    this->setCentralWidget(mVideoWidget);
    mVideoWidget->show();
    mMediaPlayer->play();

基本上,它播放一个名为 1.dat 的文件,例如,它只是一个重命名的视频文件(例如 video.mp4)。但是,播放视频永远无法正常工作,并且会产生以下错误:

DirectShowPlayerService::doRender: Unresolved error code 80040266

通过一些谷歌搜索,我发现这个错误是因为 QMultimedia 没有播放视频格式所需的编解码器/过滤器。我尝试使用 ffmpeg 将我的视频转换为许多不同的格式,同时尝试在Supported Formats in DirectShowSupported Media Formats in Media Foundation中指定的格式。我还尝试为 Ogg Vorbis、Speex、Theora、FLAC 和 WebM 安装 Directshow 过滤器,并将我的视频转换为 ogg 容器中的 theora/vorbis。还是不行。

我应该注意到我确实设法播放了一个 mpg 文件,所以我知道 QMultimedia 正在工作。但是我尝试转换另一个视频以模仿该 mpg 文件的属性,但它似乎不起作用,所以看起来 QMultimedia 在它支持的格式方面非常具体。

QMultimedia 使用什么系统进行后端解码?如何找出它支持哪些类型的编码和容器?是否可以在 Qt 中编写我自己的解码器?

谢谢

4

1 回答 1

0

文档描述了 QMultimedia 后端支持的功能。现在不支持渲染到小部件。我建议使用另一个库来编码/解码多媒体(fe ffmpeg) - QMultimedia 现在不稳定,我认为正确的工作只是文档中的示例:(

于 2013-09-19T09:11:23.863 回答