Qt Multimedia - 如何强制从媒体文件中读取标签

Posted

技术标签:

【中文标题】Qt Multimedia - 如何强制从媒体文件中读取标签【英文标题】:Qt Multimedia - how to force read tags from media file 【发布时间】:2014-03-13 23:36:28 【问题描述】:

如果没有执行当前曲目的 play() 方法,QMediaPlayer 似乎不会读取播放列表文件的标签。有没有办法强制从 QMediaPlayer 播放列表中读取标签而不播放它?

对不起,如果这是一个菜鸟问题,但我花了很多时间搜索。

谢谢

【问题讨论】:

【参考方案1】:

不要浪费时间使用 QMediaPlayer 来读取标签(这个解决方案效果很好,但对于列表中的许多文件来说很难),只需使用 TagLib 或其他开源库即可。

例如,在Qt中使用TagLib的3个简单步骤:

1.从源代码编译taglib:

$ pwd
/home/user/taglib-1.9.1
$ cmake .
$ make

部署标签库的工作实例就足够了。真的:)

2.在您的项目中包含头文件和库,只需将此或您的自定义路径添加到项目文件中:

unix:!macx: LIBS += -L$$PWD/3rdparty/taglib-1.9.1/taglib/ -ltag
INCLUDEPATH += $$PWD/3rdparty/taglib-1.9.1/taglib/Headers
DEPENDPATH += $$PWD/3rdparty/taglib-1.9.1/taglib/Headers

3.使用它,非常简单的函数来从文件中获取媒体标签,在这个例子中艺术家和曲目的标题:

    #include <fileref.h>
    #include <tag.h>
    QString gettags(QString mediafile)
        QString string;
        TagLib::FileRef file(mediafile.toUtf8());
        TagLib::String artist_string = file.tag()->artist();
        TagLib::String title_string = file.tag()->title();
        QString artist = QString::fromStdWString(artist_string.toWString());
        QString title = QString::fromStdWString(title_string.toWString());
        string = artist + " - " + title;
        return string;
    

【讨论】:

【参考方案2】:

对于当前的 QT/OSX,使用这个项目文件 sn-p(更改您系统的路径)

QMAKE_MACOSX_DEPLOYMENT_TARGET = 10.11
LIBS += -L/Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/ -ltag -lz
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/
INCLUDEPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib/toolkit/
DEPENDPATH += /Users/sir/prg.qt/TuneMerge/taglib-1.11.1/taglib

【讨论】:

以上是关于Qt Multimedia - 如何强制从媒体文件中读取标签的主要内容,如果未能解决你的问题,请参考以下文章

Qt Multimedia Backends(多媒体后端)翻译

使用 Qt MultiMedia 和 Widgets 播放网络流媒体视频

为啥我缺少 Qt Multimedia 功能?

VoIP:如何在 Qt 多媒体中从摄像头捕获实时音频/视频流字节?

请教一个Linux下Qt关于multimedia的问题

请教一个Linux下Qt关于multimedia的问题