2017-04-12 37 views
0

我在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) 
+0

你應該使用'metaDataAvailableChanged(布爾可用)'信號 – Evgeny

+0

的問題是:當'isMetaDataAvailable()==真',讓'metaData'仍然會返回一個' QVariant(無效)',我如何檢索媒體的元數據? – scmg

回答

0

這不是您的問題的確切答案,但這可能會對您有所幫助。您可以檢查與此代碼的元數據提供:

QMetaDataReaderControl *c = qobject_cast<QMetaDataReaderControl*>(player_->service()->requestControl(QMetaDataReaderControl_iid)); 
if(c) { 
    connect(c, &QMetaDataReaderControl::metaDataAvailableChanged, [c](bool) { 
     qDebug() << c->availableMetaData(); 
    }); 
}