libVLC是一个开源的多媒体框架,主要用于处理和播放各种类型的媒体文件,如视频、音频等。
媒体元数据(Metadata):包括媒体文件的基本信息,如标题、艺术家、专辑、持续时间、分辨率、比特率、编码格式等。
在libVLC中媒体的元数据类型由libvlc_meta_t表示。
//libvlc_media.h/** Meta data types */
typedef enum libvlc_meta_t {libvlc_meta_Title,            //标题libvlc_meta_Artist,           //艺术家libvlc_meta_Genre,            //流派libvlc_meta_Copyright,        //版权libvlc_meta_Album,            //专辑libvlc_meta_TrackNumber,      //轨道编号libvlc_meta_Description,      //描述libvlc_meta_Rating,           //评分libvlc_meta_Date,             //日期libvlc_meta_Setting,          //设置libvlc_meta_URL,              //地址libvlc_meta_Language,         //语言libvlc_meta_NowPlaying,       //正在播放libvlc_meta_Publisher,        //发行商libvlc_meta_EncodedBy,        //编码者libvlc_meta_ArtworkURL,       //专辑图片地址libvlc_meta_TrackID           //轨道IDlibvlc_meta_TrackTotal,       //轨道总数libvlc_meta_Director,         //导演libvlc_meta_Season,           //第几季libvlc_meta_Episode,          //插曲libvlc_meta_ShowName,         //显示名libvlc_meta_Actors,           //演员libvlc_meta_AlbumArtist,      //专辑艺术家libvlc_meta_DiscNumber,       //碟号libvlc_meta_DiscTotal         //总碟数/* Add new meta types HERE */
} libvlc_meta_t;第一步需要解析数据:libvlc_media_parse(vlc_media)
	/*选择文件*/QString filename = QFileDialog::getOpenFileName(this, "选择打开的文件", "D:/", tr("*.*"));std::replace(filename.begin(), filename.end(), QChar('/'), QChar('\\'));vlc_base = libvlc_new(0, NULL);vlc_media = libvlc_media_new_path(vlc_base, filename.toUtf8().data());if (!vlc_media) {return;}// 创建libvlc实例和媒体播放器vlc_mediaPlayer = libvlc_media_player_new_from_media(vlc_media);if (!vlc_mediaPlayer) {return;}// 等待元数据加载完成libvlc_media_parse(vlc_media);获取各种元数据:libvlc_media_get_meta接口。
	// 等待元数据加载完成libvlc_media_parse(vlc_media);// 获取各种元数据const char *title = libvlc_media_get_meta(vlc_media, libvlc_meta_Title);const char *artist = libvlc_media_get_meta(vlc_media, libvlc_meta_Artist);const char *album = libvlc_media_get_meta(vlc_media, libvlc_meta_Album);const char *url = libvlc_media_get_meta(vlc_media, libvlc_meta_URL);const char *date = libvlc_media_get_meta(vlc_media, libvlc_meta_Date);const char *lang = libvlc_media_get_meta(vlc_media, libvlc_meta_Language);int duration = libvlc_media_get_duration(vlc_media);  // 获取时长(单位:毫秒)qDebug("Title: %s", title ? title : "N/A");qDebug("Artist: %s", artist ? artist : "N/A");qDebug("Album: %s", album ? album : "N/A");qDebug("Duration: %d ms", duration);qDebug("url: %s", url ? url : "N/A");qDebug("date: %s", date ? date : "N/A");qDebug("lang: %s", lang ? lang : "N/A");运行截图:

完整示例:
#include <vlc/vlc.h>int main() 
{libvlc_instance_t *inst;libvlc_media_t *media;libvlc_media_meta_t meta_type;// 创建libVLC实例inst = libvlc_new(0, NULL);// 创建一个媒体描述符media = libvlc_media_new_path(inst, "D:/2.mp4");// 等待元数据加载完成libvlc_media_parse(media);// 获取各种元数据const char *title = libvlc_media_get_meta(media, libvlc_meta_Title);const char *artist = libvlc_media_get_meta(media, libvlc_meta_Artist);const char *album = libvlc_media_get_meta(media, libvlc_meta_Album);int duration = libvlc_media_get_duration(media);  // 获取时长(单位:毫秒)printf("Title: %s\n", title ? title : "N/A");printf("Artist: %s\n", artist ? artist : "N/A");printf("Album: %s\n", album ? album : "N/A");printf("Duration: %d ms\n", duration);// 释放资源libvlc_media_release(media);libvlc_release(inst);return 0;
}
更多参考:
libVLC 事件机制-CSDN博客
libVLC windows开发环境搭建-CSDN博客
https://sunnnnnn666.blog.csdn.net/article/details/136854500