【问题标题】:QtCreator QMediaPlayer Meta Data returns blank QStringQtCreator QMediaPlayer 元数据返回空白 QString
【发布时间】:2014-05-15 12:51:02
【问题描述】:

我有一个使用 QMediaPlayer 的媒体播放器。它可以使用 QFileDialog 打开一首歌曲,然后播放和暂停它。我希望能够读取音乐文件的元数据并将它们用作字符串。我知道这首音乐有元数据,因为它显示在 Windows 文件资源管理器中。这是我的代码。

void MainWindow::playAudioFile(QString openItem){
     player = new QMediaPlayer(this);
     player->setMedia(QUrl(openItem));
     player->setVolume(50);
     player->play();
     QString albumTitle = player->metaData(QMediaMetaData::AlbumTitle).toString();
     ui->albumLabel->setText(albumTitle);
     qDebug()<<player->metaData(QMediaMetaData::Title);

ui 文本的设置以空白结尾,应用程序输出中的 qDebug 打印语句以空白结尾。 QtCreator 中的应用程序输出也显示QVariant(Invalid)

【问题讨论】:

    标签: c++ qt audio metadata media


    【解决方案1】:

    您无需开始播放媒体即可获取元数据。但是,您确实需要等到媒体加载完毕。

    当您调用player-&gt;setMedia(QUrl(openItem)); 时,实际加载发生在后台(您可以在调试器中看到Qt 产生了一堆线程)。但是 setMedia() 不会等待媒体加载,它只是返回。如果您立即查询元数据,它可能可用也可能不可用,具体取决于线程调度(即取决于媒体是否已加载)。

    要可靠地检索它,您需要连接到mediaStatusChanged() 信号,并等待状态QMediaPlayer::LoadedMedia - 一旦收到它,您就可以在其插槽中查询元数据。

    并且,为了获得最佳性能,请记住,您一次可以创建多个 QMediaPlayer 实例。

    【讨论】:

      【解决方案2】:

      尝试通过 Qt 检查元数据是否确实可用

      if (player->isMetaDataAvailable())
      {
        /* YOUR CODE HERE */
      }
      else
      {
        qDebug() << "No metadata.";
      }
      

      Qt Media Player example 包含您需要的所有代码。

      【讨论】:

      • 使用您的代码,它仍然显示“无元数据”。即使 Windows 资源管理器有这首歌的标题、曲目编号、艺术家和专辑。
      • 所以 Qt 看不到元数据。您使用的是哪个版本的 Qt?
      • 您使用的是什么文件格式?您在资源管理器中看到的元数据实际上是文件的一部分(mp3 中的 ID3 标签)还是附加到文件系统的元数据? Qt 可能能看到一个,但不能看到另一个。
      • 我使用的是 Qt 5.2.1,据我所知 ID3 标签在 MP3 中。在 Windows 中,右键单击-> 属性将显示所有 ID3 标记。
      • 所以在玩了一圈之后,我意识到元数据只有在播放 mp3 时才“可用”。只有当我可以访问元数据并且它会实际显示它时。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-27
      • 1970-01-01
      • 1970-01-01
      • 2018-10-23
      • 2018-12-23
      相关资源
      最近更新 更多