Qt——如何播放QByteArray中存储的音频文件?

Qt——如何播放QByteArray中存储的音频文件?,qt,qbytearray,qmediaplayer,Qt,Qbytearray,Qmediaplayer,我正在Qt中开发一个特殊的应用程序,它将其.mp3音频文件作为BLOB数据存储在QSQLITE数据库中 使用以下代码,我创建了一个QByteArray: QByteArray array = query->value(0).toByteArray(); mediaPlayer.setMedia( QMediaContent( QUrl::fromEncoded(array) ) ); mediaPlayer.play(); 然后我尝试用QMediaPlayer播放声音:

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

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

QByteArray array = query->value(0).toByteArray();
mediaPlayer.setMedia(   QMediaContent(   QUrl::fromEncoded(array)   )   );
mediaPlayer.play();
然后我尝试用QMediaPlayer播放声音:

QByteArray array = query->value(0).toByteArray();
mediaPlayer.setMedia(   QMediaContent(   QUrl::fromEncoded(array)   )   );
mediaPlayer.play();
但不幸的是,我遇到了这个错误:

DirectShowPlayerService::doSetUrlSource: Unresolved error code 800c000d
我想实现的主要目标是能够播放存储在QByteArray中的这些.mp3文件

注意:在这种特殊情况下,仅在数据库中存储路径是不可能的

我真的非常感谢你的帮助。
多谢各位

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

请尝试以下操作:

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

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

请尝试以下操作:

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

为什么在这里使用QUrl?为什么在这里使用QUrl?…并确保mediaStream和mediaPlayer都能在当前功能下生存,因为播放是异步执行的。它在Windows和Linux上工作,但在OSX上不工作,IOS和Android,因为这些设备中的后端不支持流播放。上述代码将无法工作,因为
QBuffer
需要使用
mediaStream.open打开(QIODevice::ReadOnly)…并确保mediaStream和mediaPlayer在当前功能下仍然有效,因为播放是异步执行的。它在Windows和Linux上工作,但在OSX上不工作,IOS和Android,因为这些设备中的后端不支持流播放。上述代码将无法工作,因为
QBuffer
需要使用
mediaStream.open打开(QIODevice::ReadOnly)