QtMediaPlayer持续时间始终为0

阿格斯·科斯(Argus Kos)

我正在使用Qt 5.14在ubuntu 20.04上。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
永乐

我使用了ubuntu 20.04码头工人,我得到了音频的持续时间:

#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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

FFmpeg编码数据包持续时间始终为零

来自分类Dev

如何解析格式为P0Y0M0D的持续时间

来自分类Dev

Pandas - 参数为“1”的持续时间

来自分类Dev

FFMPEG:元数据中的flac音频文件持续时间为0

来自分类Dev

setInterval的持续时间

来自分类Dev

如何将dHHmm解析为持续时间?

来自分类Dev

ISO 8601持续时间以毫秒为单位?

来自分类Dev

iOS使用持续时间为Bezier曲线设置动画

来自分类Dev

两列之间的持续时间,格式为hhmmss

来自分类Dev

熊猫数据帧的持续时间扩展为分钟数据

来自分类Dev

为Make任务的持续时间添加环境变量

来自分类Dev

计算Wave PCM文件的持续时间(以秒为单位)

来自分类Dev

DST 边界或跨时区的持续时间(以天为单位)

来自分类Dev

以秒为单位更改持续时间字符串

来自分类Dev

检查std :: chrono持续时间小于0的惯用方式

来自分类Dev

Sox:读取wav并将脉冲设为1,将静默设为0,其持续时间以微秒为单位

来自分类Dev

将日历持续时间转换为持续时间

来自分类Dev

Echonest ::歌曲持续时间

来自分类Dev

queryUsageStats间隔持续时间

来自分类Dev

QMediaplayer持续时间错误

来自分类Dev

尝试登录的持续时间

来自分类Dev

jQuery panzoom持续时间

来自分类Dev

matplotlib动画持续时间

来自分类Dev

获取持续时间的秒数

来自分类Dev

获取Android的持续时间

来自分类Dev

确定超出的持续时间

来自分类Dev

单规范持续时间

来自分类Dev

计算持续时间(年龄)

来自分类Dev

持续时间2次