我正在尝试使用 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 DirectShow和Supported Media Formats in Media Foundation中指定的格式。我还尝试为 Ogg Vorbis、Speex、Theora、FLAC 和 WebM 安装 Directshow 过滤器,并将我的视频转换为 ogg 容器中的 theora/vorbis。还是不行。
我应该注意到我确实设法播放了一个 mpg 文件,所以我知道 QMultimedia 正在工作。但是我尝试转换另一个视频以模仿该 mpg 文件的属性,但它似乎不起作用,所以看起来 QMultimedia 在它支持的格式方面非常具体。
QMultimedia 使用什么系统进行后端解码?如何找出它支持哪些类型的编码和容器?是否可以在 Qt 中编写我自己的解码器?
谢谢