libVLC 元数据

news2024/9/24 23:28:55

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1534038.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

01mysql

登陆mysql 默认数据库 进入&#xff0c;展示&#xff0c;删除 &#xff0c;查看当前正使用的库 select version()查看版本 查看表结构desc 查询 not in不会忽略空 in会自动忽略 like模糊查询 %o%中间带o的 _A%第二个字母是A的 查名字是下划线的 %\_% 排序 order …

Power BI ----SVG(圆环图)

圆环图助力矩阵图 定义度量值放置视觉对象SVG是什么鬼,在现在的Web世界中越来越凸显这一标准的优势。关于SVG,我们只需要知道一点就好 ---- SVG 意为可缩放矢量图形(Scalable Vector Graphics)。它是使用 XML 格式定义的图像。 由此我们就可以知道SVG是可以通过文本来定义图…

web前端框架设计第三课-基础特性

web前端框架设计第三课-基础特性 一.预习笔记 1.Vue实例 每个Vue.js的应用都需要通过构造函数创建一个Vue的实例 语法格式&#xff1a;var 实例名new Vue({}) 特性1–挂载元素&#xff1a;Vue的实例需要具体的存放位置&#xff0c;而挂载元素el就是提供者 特性2–数据&…

数字乡村标准化白皮书 - 2024年版:数字乡村内涵、发展现状、标准化现状、标准需求

党的二十大报告指出“全面推进乡村振兴。全面建设社会主义现代化国家&#xff0c;最艰巨最繁重的任务仍然在农村。坚持农业农村优先发展&#xff0c;坚持城乡融合发展&#xff0c;畅通城乡要素流动。加快建设农业强国&#xff0c;扎实推动乡村产业、人才、文化、生态、组织振兴…

Day01-数据类型和运算符(MySQL服务器的安装,MySQL客户端,数据类型,运算符,MySQL的语法规范)

文章目录 Day01-数据类型和运算符学习目标1. 数据库介绍1.1 数据库的发展历史1.2 数据库分类1.2.1 关系型(SQL)数据库1.2.2 非关系型(NoSQL)数据库1.2.3 数据库排名 2. MySQL服务器的安装2.1 MySQL介绍2.2 下载2.3 安装2.4 启动服务器2.5 卸载 3. MySQL客户端3.1 使用命令行客户…

记录一次服务器内存使用率过高达到90%告警问题排查。

目录 一、前言二、问题排查处理三、 结尾 &#x1f469;&#x1f3fd;‍&#x1f4bb;个人主页&#xff1a;阿木木AEcru &#x1f525; 系列专栏&#xff1a;Docker容器化部署系列 &#x1f4b9;每一次技术突破&#xff0c;都是对自我能力的挑战和超越。 一、前言 一大早就有一…

Java设计模式 | 工厂方法模式

工厂方法模式 针对简单工厂模式案例中的缺点&#xff0c;使用工厂方法模式就可以完美的解决&#xff0c;完全遵循开闭原则。简单工厂模式只有一个工厂类&#xff0c;负责创建所有产品&#xff0c;如果要添加新的产品&#xff0c;就需要修改工厂类的代码。而工厂方法模式引入了…

通过人工智能驱动的交互提升客户体验

用AI创造无限可能&#xff1a;打造极致客户体验的秘诀 在当今竞争激烈的市场中&#xff0c;客户体验至关重要。 企业正在迅速采用人工智能驱动的交互来彻底改变与客户的互动。 人工智能技术不仅简化了运营&#xff0c;还带来了以前无法达到的个性化和效率水平。 对于寻求满足客…

【Java - 框架 - SpringMVC】(01) SpringMVC框架的简单创建与使用,快速上手

"SpringMVC"框架的简单创建与使用&#xff0c;快速上手&#xff1b; 环境 Java版本"1.8.0_202"&#xff1b;Spring Boot版本"2.5.9"&#xff1b;Windows 11 专业版_22621.2428&#xff1b;IntelliJ IDEA 2021.1.3(Ultimate Edition)&#xff1…

8.2K star!史上最强Web应用防火墙

&#x1f6a9; 0x01 介绍 长亭雷池SafeLine是长亭科技耗时近 10 年倾情打造的WAF(Web Application Firewall)&#xff0c;一款敢打出口号 “不让黑客越雷池一步” 的 WAF&#xff0c;我愿称之为史上最强的一款Web应用防火墙&#xff0c;足够简单、足够好用、足够强的免费且开源…

【Spring 篇】走进Java NIO的奇妙世界:解锁高效IO操作的魔法

欢迎来到Java NIO的神奇之旅&#xff01;在这个充满活力的世界里&#xff0c;我们将一起揭示Java NIO&#xff08;New I/O&#xff09;的奥秘&#xff0c;探索其在高效IO操作中的神奇魔法。无需担心&#xff0c;即使你是Java的小白&#xff0c;也能轻松领略这个强大而灵活的IO框…

如何设置IDEA远程连接服务器开发环境并结合cpolar实现ssh远程开发

文章目录 1. 检查Linux SSH服务2. 本地连接测试3. Linux 安装Cpolar4. 创建远程连接公网地址5. 公网远程连接测试6. 固定连接公网地址7. 固定地址连接测试 本文主要介绍如何在IDEA中设置远程连接服务器开发环境&#xff0c;并结合Cpolar内网穿透工具实现无公网远程连接&#xf…

SpringBoot+Vue前后端分离项目在Linux系统中基于Docker打包发布

文章目录 SpringBootVue前后端分离项目在Linux系统中基于Docker打包发布一、Java项目基于Docker打包发布1.打包应用&#xff0c;将打好的jar包放到我们的linux系统中2.新建dockerfile3.打包镜像4.测试运行5.上传镜像到阿里云免费私仓 二、Vue项目打包到docker镜像1.编译打包前端…

记一次由于buff/cache导致服务器内存爆满的问题

目录 前言 复现 登录服务器查看占用内存进程排行 先了解一下什么是buff/cache&#xff1f; 尝试释放buffer/cache /proc/sys/vm/drop_caches dirty_ratio dirty_background_ratio dirty_writeback_centisecs dirty_expire_centisecs drop_caches page-cluster swap…

罗技G29游戏方向盘试玩拆解,带震动力反馈

1.正好有时间记录下 自己的爱好 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 一千多的罗技G29游戏方向盘试玩拆解&#xff0c;带震动力反馈&#xff0c;值这个价吗_哔哩哔哩_bilibili 2.拆解 3.2个大电机 4.主控芯…

智能模型新篇章:RAG + Fine-Tuning 混合增强策略

一、前言 在之前的探讨中&#xff0c;我们已经分别深入了解了RAG&#xff08;检索增强生成&#xff09;和 Fine-tuning&#xff08;微调&#xff09;这两种优化大型语言模型的方法&#xff0c;探讨了它们在不同业务场景下的适用性、优势及局限。然而&#xff0c;我们很少讨论将…

深度学习——微积分基础

目录 1、导数和微分 1.1 定义函数&#xff1a; 1.2 趋近过程&#xff1a; 1.3 绘图表示&#xff1a; 2、偏导数 3、梯度 4、链式法则 5、学习心得 在2500年前&#xff0c;古希腊人把一个多边形分成三角形&#xff0c;并把它们的面积相加&#xff0c;才找到计算多边形面积…

【记录39】html element-ui 加载

环境 html使用element-ui组件、用vue框架搭建 方法一&#xff1a; 方法二&#xff08;推荐&#xff09; 将相关资源下载下来&#xff0c;在对应的html文件中相对路径引入。注意&#xff1a;css加载放在js之前

Windows 11 鼠标右键可选择 cmd 命令行选项

** Windows 11 鼠标右键可选择 cmd 命令行选项 ** 在文件夹内打开命令行&#xff0c;只能使用 Windows 自带的 PowerShell &#xff0c; 作为一个 cmd 重度使用用户来说很是折磨&#xff0c;需要打开 cmd 然后切换盘符再 cd 。。。 现在咱们自己创建一个可以打开 cmd 的方法…

【C++庖丁解牛】stack的介绍和使用 | queue的介绍和使用 | priority_queue的介绍和使用

&#x1f341;你好&#xff0c;我是 RO-BERRY &#x1f4d7; 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 &#x1f384;感谢你的陪伴与支持 &#xff0c;故事既有了开头&#xff0c;就要画上一个完美的句号&#xff0c;让我们一起加油 目录 1. stack的介绍和使用1.1…