【问题标题】:QtMediaPlayer duration is always 0QtMediaPlayer 持续时间始终为 0
【发布时间】: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


【解决方案1】:

我使用了 ubuntu 20.04 docker,我得到了音频的持续时间:

#include <QtMultimedia>

static void DurationChanged(quint64 duration) {
  qDebug() << "duration " << duration;
}

static void PositionChaned(quint64 position) {
  qDebug() << "position" << position;
}

int main(int argc, char *argv[])
{
    QGuiApplication a(argc, argv);
    // in main
    QDir dir_path = QCoreApplication::applicationDirPath();
    auto path = dir_path.filePath("sample.mp3");
    auto url = QUrl::fromLocalFile(path);

    QMediaPlayer player;
    QObject::connect(&player, &QMediaPlayer::durationChanged, DurationChanged);
    QObject::connect(&player, &QMediaPlayer::positionChanged, PositionChaned);
    player.setMedia(url);
    player.play();
    return a.exec();
}

输出:

position 0
position 0
position 9
duration  26000
position 987
position 1945
position 2883
position 3821
position 4789
position 5786
position 6784
position 7792
position 8790
position 9797
position 10775
position 11783
position 12780
position 13788
position 14786
position 15794
position 16791
position 17799
position 18797
position 19804
position 20782
position 21790
position 22788
position 23795
position 24793
position 25801
position 26000

要使音频插件正常工作,请安装以下软件包:

sudo apt-get install -y --no-install-recommends \
    libgstreamer1.0-0 \
    gstreamer1.0-plugins-base \
    gstreamer1.0-plugins-good \
    gstreamer1.0-plugins-bad \
    gstreamer1.0-plugins-ugly \
    gstreamer1.0-libav \
    gstreamer1.0-doc \
    gstreamer1.0-tools \
    libpulse-mainloop-glib0 \
    alsa-base \
    alsa-utils \
    pulseaudio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-26
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 1970-01-01
    • 2017-07-28
    • 2021-02-08
    相关资源
    最近更新 更多