0

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)

1 つ目の質問:メディアの再生が開始された後でもメタデータが利用できないのはなぜですか?

2 番目の質問:デストラクタにいくつかのコードを追加しました:

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)
4

2 に答える 2

0

これはあなたの質問に対する正確な答えではありませんが、これが役立つかもしれません。次のコードで利用可能なメタデータを確認できます。

QMetaDataReaderControl *c = qobject_cast<QMetaDataReaderControl*>(player_->service()->requestControl(QMetaDataReaderControl_iid));
if(c) {
    connect(c, &QMetaDataReaderControl::metaDataAvailableChanged, [c](bool) {
        qDebug() << c->availableMetaData();
    });
}
于 2017-04-16T16:45:19.147 に答える