Qt——如何播放QByteArray中存储的音频文件?
我正在Qt中开发一个特殊的应用程序,它将其.mp3音频文件作为BLOB数据存储在QSQLITE数据库中 使用以下代码,我创建了一个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播放声音:
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)代码>