QMediaPlayer - 玩加载到内存中的声音
案例1.我设法播放声音与QMediaPlayer这样的:QMediaPlayer - 玩加载到内存中的声音
QMediaPlayer* media = new QMediaPlayer();
media->setMedia("sound.mp3");
media->play();
案例2.如果我加载声音到内存一切都OK还并发挥它是这样的:
QFile file("sound.mp3");
file.open(QIODevice::ReadOnly);
QByteArray* arr = new QByteArray(file.readAll());
file.close();
QBuffer* buffer = new QBuffer(arr);
buffer->open(QIODevice::ReadOnly);
buffer->seek(0);
QMediaPlayer* media = new QMediaPlayer();
media->setMedia(QMediaContent(), buffer);
media->play();
问题是,当我尝试播放文件,它是不是一个真正的声音就像file.txt
。 在第一种情况下,玩家立即停止。 在第二种情况下播放器保持在状态PlayingState
(QMediaPlayer::BufferedMedia
,QMediaPlayer::NoError
)
文档:
空隙QMediaPlayer :: setMedia(常量QMediaContent &媒体,QIODevice中 *流= Q_NULLPTR)
设置当前媒体源。
如果一个流被提供;将从中读取媒体数据,而不是解析媒体源的 。在这种情况下,媒体源可能仍然是 ,用于解析有关媒体的其他信息,如MIME 类型。该流必须是开放且可读的。
将媒体设置为空QMediaContent将导致播放器丢弃与当前媒体源有关的所有信息,并且使得 停止与该媒体相关的所有I/O操作。
所以,如果我用media->setMedia(QMediaContent(), buffer);
然后媒体播放器会从内存中读取数据,而不作为,因为空QMediaContent的MIME类型的附加信息。也许mediaplayer由于缺少mime类型而保留在PlayingState中,试图播放加载到内存中的文本文件。
所以我尝试结合使用有效QMediaContent与加载数据...同样的结果:媒体播放器留在PlayingState没有任何错误。 media->setMedia(QMediaContent(QUrl::fromLocalFile(QFileInfo(s).absoluteFilePath())), buffer);
如何使用QMediaPlayer播放加载到内存中的声音以避免此问题?
static QMediaPlayer player;
player.setMedia(QUrl::fromLocalFile("sound.mp3"));
player.play();
你能解释一下为什么该代码是解决问题的办法? – eyllanesc
尽管此代码片段可能是解决方案,但其中的解释确实有助于提高帖子的质量。请记住,你所回答的问题,在未来的读者,而那些人可能不知道的原因,你的代码的建议 –
在我有限的经验,它可以播放的文件,如果你玩的d盘下的文件,可以更换它与“D:\\ sound。Mp3” – tom