0

VK.com ソーシャル ネットワークから音楽を再生するプログラムを開発しています。プロジェクトはほぼ完了していますが、細かい点があります。音楽カバーのサポートを追加したいと考えています。実際、問題は次のとおりです。QMediaPlayerQMediaMetaDataを使用して、読み込まれた MP3 ファイルに関する情報を取得します。必要なアルバム カバー タグを除いて、すべてのタグを問題なく取得できます。コンソールで使用可能なすべてのタグを表示するサンプル コードを次に示します。

void MainWindow::playerMetaDataChanged()
{
    qDebug() << " ";
    qDebug() << "AvailableMetaData:";
    qDebug() << " ";
    QStringList metaData = player->availableMetaData();
    foreach (QString metaDataType, metaData) {
        qDebug() << "Type of metadata: " + metaDataType;
        qDebug() << player->metaData(metaDataType);
        qDebug() << "---------------";
    }
    qDebug() << " ";
}

コンソール出力は次のとおりです。

AvailableMetaData:

"Type of metadata: AlbumArtist"
QVariant(QString, "Within Temptation")
---------------
"Type of metadata: Author"
QVariant(QString, "Daniel Gibson & Robert Westerholt")
---------------
"Type of metadata: MediaType"
QVariant(QString, "Symphonic Gothic Metal")
---------------
"Type of metadata: PosterUrl"
QVariant(QString, "")
---------------
"Type of metadata: Title"
QVariant(QString, "Empty Eyes (Bonus Track)")
---------------

ご覧のとおり、私の mp3 ファイルにはアルバム アートが含まれていますが、PosterUrl は空の文字列を返します。たとえば、次のような他のメタデータを取得しようとしていました。

qDebug()<< player->metaData(QMediaMetaData::PosterUrl);
qDebug()<< player->metaData(QMediaMetaData::PosterImage);
qDebug()<< player->metaData(QMediaMetaData::CoverArtImage);
qDebug()<< player->metaData(QMediaMetaData::CoverArtUrlSmall);
qDebug()<< player->metaData(QMediaMetaData::CoverArtUrlLarge);
qDebug()<< player->metaData(QMediaMetaData::CoverArtUrlLarge);

しかし、コンソールでQVariant(Invalid)またはQVariant(QString, "")メッセージを受け取るたびに。その問題を解決するためのアイデアはありますか?

4

1 に答える 1

0

でこの問題を修正することはできませんQMediaPlayer。タグのサポートは限られています。少し前に同じ問題がありました。唯一の解決策は、タグを扱う実装にtaglibを使用することです。

于 2016-05-10T08:51:21.193 に答える