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 //轨道ID
libvlc_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