gpt4 book ai didi

qt - Qt中是否有一种方法可以强制QMediaPlayer缓冲文件而不播放它?

转载 作者:行者123 更新时间:2023-12-04 04:38:14 26 4
gpt4 key购买 nike

当您将文件加载到QMediaPlayer实例中时,它不会自动缓冲该文件。除非您使用MediaStatus播放文件,否则NoMedia仍为play(),只有在此之后,该文件才会作为BufferedMedia结束。我无法在文档中找到任何方法来强制播放器在不播放文件的情况下缓冲文件-有没有办法做到这一点?

现在,我正计划将其静音,播放文件,然后再次将其停止并取消静音,但这会使我感到肮脏。当然有更好的方法可以做到这一点吗?

顺便说一句,这是必须的,因为在文件被缓冲之前我无法检索duration,并且我需要duration在轨道中选择一个position才能开始播放。

谢谢

最佳答案

The MediaStatus remains NoMedia until you play the file using play()



不在Qt 5中,这也不是您不知道“持续时间”和设置“位置”的原因。
当您使用 setMedia设置媒体时,它不会等待媒体完成加载(并且不会检查错误)。加载媒体时会发出 mediaStatusChanged()信号,因此请在媒体加载完成时收听该信号和 error()信号以进行通知。
connect(player, &QMediaPlayer::mediaStatusChanged, this, [=]() {
qDebug() << "Media Status:" << player->mediaStatus();

I need the duration to select a position in the track to start playing from.



一旦加载了媒体文件,并在播放之前加载了 ,您可以检查持续时间,并将播放器设置到所需位置,但是最好将持续时间从0更改为加载后的媒体持续时间,因此最好执行此操作durationChanged():
connect(player, &QMediaPlayer::durationChanged, this, [&](qint64 duration) {
qDebug() << "Media duration = " << duration;
player->setPosition(duration/2);
qDebug() << "Set position:" << player->position();
});

I can't find any way in the documentation to force the player to buffer the file without playing it - is there any way to do this?



是的,从文件创建一个缓冲区,然后将mediacontent设置为您的缓冲区(但这不是执行上述操作所必需的,它只是提供了一种更快的媒体查找方式):
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);

关于qt - Qt中是否有一种方法可以强制QMediaPlayer缓冲文件而不播放它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517619/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com