我在 MAC OS 上使用 Qt 并尝试检索媒体的元数据。所以我拿了 Qt's Media Player Example (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)