我在MAC操作系统上使用了Qt并尝试检索媒体的元数据。因此,我以Qt的Media (QT5.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)第一个问题:,为什么在媒体开始播放之后,元数据仍然不可用?
第二个问题:i在析构函数中添加了一些代码:
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)发布于 2017-04-16 16:45:19
这不是你问题的确切答案,但这可能对你有帮助。您可以检查以下代码提供的元数据:
QMetaDataReaderControl *c = qobject_cast<QMetaDataReaderControl*>(player_->service()->requestControl(QMetaDataReaderControl_iid));
if(c) {
connect(c, &QMetaDataReaderControl::metaDataAvailableChanged, [c](bool) {
qDebug() << c->availableMetaData();
});
}发布于 2019-02-14 08:18:48
我不确定,但我认为qDebug不能处理QVariant,您应该使用以下示例:
qDebug() << (player->metaData(QMediaMetaData::Title)).toString();https://stackoverflow.com/questions/43377826
复制相似问题