1

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

 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。

4

3 回答 3

1

这是一篇旧帖子,但我想澄清任何混淆,以防将来对某人有所帮助。

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

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

需要注意的另一件事是,此解决方案在 Windows 上效果很好。在 Mac 上使用 QIO 设备时,整个文件将在播放之前加载到内存中。就我而言,这是一个交易破坏者。如果您要做的第一件事是解密整个文件并将其加载到内存中,那么拥有加密文件是没有用的。

于 2014-10-16T21:35:39.300 回答
-1

Phonon::MediaSource文档中:

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

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

QFile* file =new QFile(“C:\\Video\\test.avi”);
media->setCurrentSource(Phonon::MediaSource(file->fileName()));
media->play();
于 2012-02-01T13:25:09.590 回答
-1

如果您仔细查看 [Phonon Module 文档][1],您会发现MediaSource无法使用QFile*.

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

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

与 QFile 一起工作正常

于 2012-02-01T15:32:10.357 回答