下面是我用来播放视频的代码
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。
这是一篇旧帖子,但我想消除任何困惑,以防将来对某人有所帮助。
- 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