如何在C#中获取运行中VLC Media Player的媒体数据及元数据
从运行中VLC获取媒体数据的稳定实现方案
首先明确:读进程内存的方案完全不具备可维护性,VLC每个版本的内存布局、变量偏移都会变化,根本不可能兼容主流版本,优先用VLC官方提供的内置接口实现。
方案1:调用VLC内置HTTP接口(适用于读取外部独立运行的VLC实例)
VLC默认自带Web远程控制接口,无需额外安装插件,开启后可以直接通过HTTP请求拿到所有你需要的媒体数据、元数据,C#侧用原生HttpClient即可调用,不需要引入第三方类库。
开启VLC HTTP接口的方法:
- 手动开启:打开VLC -> 工具 -> 偏好设置 -> 左下角「显示设置」选择「全部」 -> 左侧菜单找到
Interface > 主界面-> 勾选Web选项 -> 展开主界面 > Lua子菜单 -> 在「Lua HTTP」板块设置密码、端口(默认8080),保存后重启VLC即可生效。 - 程序自动开启:如果你是从C#程序中启动VLC实例,可以直接带启动参数自动开启接口,无需用户手动配置:
vlc.exe --extraintf=http --http-host=127.0.0.1 --http-port=8080 --http-password=你自定义的密码
C#调用示例
接口地址为http://127.0.0.1:你设置的端口/requests/status.json,请求需要Basic认证,用户名为空,密码为你设置的Lua HTTP密码。
示例代码:
using System.Net.Http; using System.Net.Http.Headers; using System.Text; using System.Text.Json; // 初始化HttpClient(建议全局单例) var client = new HttpClient(); var authToken = Convert.ToBase64String(Encoding.ASCII.GetBytes($":{你设置的VLC HTTP密码}")); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authToken); // 请求状态数据 var response = await client.GetAsync("http://127.0.0.1:8080/requests/status.json"); response.EnsureSuccessStatusCode(); var jsonContent = await response.Content.ReadAsStringAsync(); var vlcStatus = JsonSerializer.Deserialize<VlcStatus>(jsonContent); // 你需要的字段都在vlcStatus里: // 总时长:vlcStatus.length 单位秒 // 当前播放时间:vlcStatus.time 单位秒 // 帧率:vlcStatus.fps // 元数据:vlcStatus.information?.category?.meta 里面包含标题、艺术家、专辑、格式等所有元数据
你可以根据返回的JSON结构自行定义VlcStatus类的字段,只需要保留你需要的属性即可。
方案2:嵌入VLC到你的C#程序(适用于不需要读取外部VLC实例的场景)
如果你的需求是在自己的应用里集成播放能力同时获取数据,可以用官方维护的LibVLCSharp绑定,直接在C#代码中控制播放、获取所有媒体相关数据,稳定性更高。
内容的提问来源于stack exchange,提问作者SomeRandomGuyWhoCantCode
相关产品推荐
相关产品推荐

