当QFILE用于mediaSource时,QT声子播放失败,在传递字符串时工作正常

时间:2012-02-01 11:55:18

标签: c++ qt phonon

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

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

使用iodevice时是否还需要其他初始化步骤?最终我的代码将使用自定义的iodevice,它不能正常工作。

3 个答案:

答案 0 :(得分:1)

这是一篇很老的帖子,但我想澄清任何混淆,以防将来有人帮助。

  1. QT允许您将Phonon :: MediaSource()传递给QIODevice。我们通过创建自己的QIODevice子类来成功部署我们的解决方案。
  2. 它不适合我的原因是QT遇到了我正在使用的编解码器的问题。当您使用QIO设备时,您将获得与传递字符串时相同的格式支持。

    还有一点需要注意,虽然此解决方案在Windows上运行良好。在Mac上使用QIO设备时,整个文件将在播放前加载到内存中。就我而言,这是一个交易破坏者。如果你做的第一件事是解密整个文件并将其加载到内存中,那么加密文件是无用的。

答案 1 :(得分:-1)

来自Phonon::MediaSource文档:

  

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

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

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

答案 2 :(得分:-1)

如果仔细查看[Phonon Module docu] [1],您会发现无法使用MediaSource构建QFile*

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

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

适用于QFile