MediaStatus 保持为 NoMedia,直到您使用 play() 播放文件
Qt 5 中没有,这也不是您无法知道“持续时间”和设置“位置”的原因。
当您设置媒体时setMedia
它不会等待媒体完成加载(并且不会检查错误)。一个信号mediaStatusChanged()
加载媒体时发出,因此请收听该信号并error()
媒体加载完成时收到通知的信号。
connect(player, &QMediaPlayer::mediaStatusChanged, this, [=]() {
qDebug() << "Media Status:" << player->mediaStatus();
});
我需要持续时间来选择曲目中的位置来开始播放
从。
加载媒体文件后比赛前,您可以检查持续时间,并且可以将播放器设置到您想要的位置,但是最好在加载后持续时间从 0 更改为媒体持续时间后执行此操作,因此请连接到信号durationChanged()
:
connect(player, &QMediaPlayer::durationChanged, this, [&](qint64 duration) {
qDebug() << "Media duration = " << duration;
player->setPosition(duration/2);
qDebug() << "Set position:" << player->position();
});
我在文档中找不到任何方法来强制玩家
缓冲文件而不播放它 - 有什么办法可以做到这一点吗?
是的,从文件创建一个缓冲区,然后将媒体内容设置到缓冲区(但这不是执行上述操作所必需的,它只是提供了一种更快的方式来在媒体中查找):
QString fileName=QFileDialog::getOpenFileName(this,"Select:","","( *.mp3)");
QFile mediafile(fileName);
mediafile.open(QIODevice::ReadOnly);
QByteArray *ba = new QByteArray();
ba->append(mediafile.readAll());
QBuffer *buffer = new QBuffer(ba);
buffer->open(QIODevice::ReadOnly);
buffer->reset(); //seek 0
player->setMedia(QMediaContent(), buffer);