【问题标题】:Qt -- How to play audio files stored in QByteArray?Qt -- 如何播放存储在 QByteArray 中的音频文件?
【发布时间】:2014-04-21 23:59:49
【问题描述】:

我正在开发一个 Qt 中的特殊应用程序,它将其 .mp3 音频文件作为 BLOB 数据存储在 QSQLITE 数据库中。

我使用以下代码创建了一个 QByteArray:

QByteArray array = query->value(0).toByteArray();

然后我尝试用 QMediaPlayer 播放声音:

mediaPlayer.setMedia(   QMediaContent(   QUrl::fromEncoded(array)   )   );
mediaPlayer.play();

但不幸的是我得到了这个错误:

DirectShowPlayerService::doSetUrlSource: Unresolved error code 800c000d

我想要实现的主要目标是能够播放存储在 QByteArray 中的这些 .mp3 文件。

注意:在这种特殊情况下,不可能只将路径存储在数据库中。

非常感谢您的帮助。 非常感谢!

【问题讨论】:

  • 你为什么在这里使用 QUrl?

标签: qt qbytearray qmediaplayer


【解决方案1】:

您需要将QByteArray 作为QIODevice 提供给QMediaPlayer::setMedia(const QMediaContent & media, QIODevice * stream = 0)stream 参数。

尝试以下方法:

QBuffer mediaStream(&array);
mediaPlayer.setMedia(QMediaContent(), &buffer);
mediaPlayer.play();

【讨论】:

  • ...并确保 mediaStream 和 mediaPlayer 在当前函数中仍然存在,因为播放是异步执行的。
  • 它适用于 Windows 和 Linux,但不适用于 OSX、IOS 和 Android,因为这些设备的后端不支持流播放。
  • 上面的代码不能用,因为QBuffer需要用mediaStream.open(QIODevice::ReadOnly);打开
猜你喜欢
  • 2016-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-01
  • 2011-10-03
  • 1970-01-01
  • 2021-02-07
  • 2012-02-02
相关资源
最近更新 更多