【发布时间】:2020-07-10 15:15:56
【问题描述】:
我在 ubuntu 20.04 上使用 Qt 5.14。 QtMdeiaPlayer 持续时间总是返回 0。 文档说明对 SetMedia 的调用没有阻塞,因此调用后持续时间将为零,但我按照文档中的说明连接了一个信号。
connect(player, &QMediaPlayer::durationChanged, this, [&](qint64 dur) {
qDebug() << "duration = " << dur;
});
永远不会调用这个 lambda。此外,音频播放正常,positionChanged 的信号按预期工作。 我测试了几个不同格式的音频文件,结果是一样的。 任何想法为什么会发生?
-- 编辑-- 最少的代码重现
// somewhere
static QMediaPlayer *player = new QMediaPlayer;
static void DurationChanged(quint64 duration) {
qDebug() << "durration " << duration;
}
static void PositionChaned(quint64 position) {
qDebug() << "position" << position << "duration" << player->duration();
}
// in main
auto path = QUrl::fromLocalFile(QFileInfo("sample.mp3").absoluteFilePath());
QObject::connect(player, &QMediaPlayer::durationChanged, DurationChanged);
QObject::connect(player, &QMediaPlayer::positionChanged, PositionChaned);
player->setMedia(path);
player->play();
// my output
// position 0 duration 0
// position 1032 duration 0
// position 2083 duration 0
【问题讨论】:
-
时长只在播放开始时计算
-
@eyllanesc 我的问题与您提供的不同。首先我连接了一个信号,我正在播放音频。其次,我还在连接到 positionChanged 信号的插槽中记录了持续时间,并且位置按预期工作,而在播放音频时持续时间仍然为 0。
-
如果您提供的 MRE 显示您在评论中指出的内容,那么它将重新打开问题
-
@eyllanesc 我用最少的代码更新了问题
-
播放前必须连接
标签: qt qmediaplayer