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