QMediaPlayer :: metaData总是返回QVariant(无效)
问题描述:
我在MAC OS上使用Qt并尝试检索媒体的元数据。所以我采取了Qt的媒体播放器实例(QT 5.8.0)和改性一点点:QMediaPlayer :: metaData总是返回QVariant(无效)
相反的:
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)
第一个问题:为什么元数据不可用,即使在med ia开始玩?
第二个问题:我加在析构函数的一些代码:
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)
答
这不是您的问题的确切答案,但这可能会对您有所帮助。您可以检查与此代码的元数据提供:
QMetaDataReaderControl *c = qobject_cast<QMetaDataReaderControl*>(player_->service()->requestControl(QMetaDataReaderControl_iid));
if(c) {
connect(c, &QMetaDataReaderControl::metaDataAvailableChanged, [c](bool) {
qDebug() << c->availableMetaData();
});
}
你应该使用'metaDataAvailableChanged(布尔可用)'信号 – Evgeny
的问题是:当'isMetaDataAvailable()==真',让'metaData'仍然会返回一个' QVariant(无效)',我如何检索媒体的元数据? – scmg