Я использую ubuntu 20.04, использую Qt 5.14. QtMdeiaPlayer duration всегда возвращает 0. В документации указано, что вызов SetMedia не блокируется, поэтому продолжительность будет равна нулю сразу после вызова, но я подключил сигнал, как указано в документации.
connect(player, &QMediaPlayer::durationChanged, this, [&](qint64 dur) {
qDebug() << "duration = " << dur;
});
Эта лямбда никогда не вызывается . Кроме того, звук воспроизводится нормально, а сигнал для 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