当QFILE用于mediaSource时,QT声子播放失败,当字符串通过时,QT声波播放正常



下面是我用来播放视频的代码

 QFile* file =new QFile(“C:\Video\test.avi”);
   media->setCurrentSource(Phonon::MediaSource(file));
   media->play();

使用此代码播放失败-我看到的是底部的播放栏,但视频从未开始。

如果我将代码更改为以下内容,则一切都如预期所示

  media->setCurrentSource(Phonon::MediaSource(“C:\Video\test.avi”));
  media->play();

使用iodvice时是否需要额外的初始化步骤?最终,我的代码将使用一个无法正常工作的自定义iodevice。

这是一篇旧帖子,但我想消除任何困惑,以防将来对某人有所帮助。

  1. QT允许您将Phonon::MediaSource()传递给QIODevice。我们通过创建自己的QIODevice子类成功部署了我们的解决方案

它对我不起作用的原因是QT对我使用的编解码器有问题。当你使用QIO设备时,你不会得到与传递字符串相同的格式支持。

另一件需要注意的事情是,虽然此解决方案在windows上运行良好。在mac上,当使用QIO设备时,整个文件将在播放前加载到内存中。就我而言,这是一个破坏交易的行为。如果你要做的第一件事是对整个文件进行解密并将其加载到内存中,那么拥有一个加密的文件是没有意义的。

来自Phonon::MediaSource文档:

警告:在Windows上,我们只支持包含avi的QIOD设备,mp3或mpg格式。使用采用文件名的构造函数打开文件(Qt后端内部不使用QFile)。

我认为最后一行应该回答你的问题。您可以使用QString来代替QFile,或者调用函数QFile::fileName,如下所示:

QFile* file =new QFile(“C:\Video\test.avi”);
media->setCurrentSource(Phonon::MediaSource(file->fileName()));
media->play();

如果仔细查看[Phonon Module docu][1],就会发现MediaSource不能用QFile*构造。

顺便说一句,我在你的代码中没有看到任何声子路径。至少你应该创建音频接收器并将其与媒体对象连接:

Phonon::AudioOutput *audioOut = new PhononAudioOutpu(Phonon::MusicCategory);//or the      category you need
Phonon::createPath(mediaObject, audioOutput);
mediaObject->play();

适用于QFile

最新更新