【发布时间】:2017-04-12 19:12:39
【问题描述】:
我在 MAC OS 上使用 Qt 并尝试检索媒体的元数据。所以我拿了Qt的媒体播放器示例(Qt 5.8.0)并稍作修改:
代替:
connect(controls, SIGNAL(play()), player, SLOT(play()));
我用过:
connect(controls, &PlayerControls::play, player,
[this]{
qDebug() << player->isMetaDataAvailable();
qDebug() << player->metaData(QMediaMetaData::Size);
player->play();
qDebug() << player->isMetaDataAvailable();
qDebug() << player->metaData(QMediaMetaData::Resolution);
});
结果是:
false
QVariant(Invalid)
false
QVariant(Invalid)
第一个问题:为什么媒体开始播放后元数据仍然不可用?
第二个问题:我在析构函数中添加了一些代码:
Player::~Player()
{
qDebug() << player->isMetaDataAvailable();
qDebug() << player->metaData(QMediaMetaData::Duration);
}
现在元数据可用,但没有返回数据:
true
QVariant(Invalid)
谁能帮帮我?
更新问题1:
代替
connect(controls, SIGNAL(pause()), player, SLOT(pause()));
我用过:
connect(controls, &PlayerControls::pause, player,
[this]{
qDebug() << player->isMetaDataAvailable();
qDebug() << player->metaData(QMediaMetaData::Resolution);
});
播放大约 3-5 秒后,元数据已经可用,但它也没有返回任何内容:
true
QVariant(Invalid)
【问题讨论】:
-
你应该使用
metaDataAvailableChanged(bool available)信号 -
问题是:虽然
isMetaDataAvailable() == true,获取metaData仍然返回QVariant(Invalid),我如何检索媒体的元数据?
标签: qt metadata qmediaplayer