You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

寻求可在Node应用中运行的System Media Controls访问方案

Windows平台优先的Node.js系统媒体状态获取与控制方案

可用核心方案

推荐直接使用原生Node模块winrt-media,该模块直接对接Windows Runtime的全局媒体会话API,无额外依赖,可直接在Node项目中集成,完全满足现阶段Windows平台的适配需求。

功能覆盖情况

  • 可读取所有系统活动媒体会话的元数据,包括媒体标题、艺术家、专辑等信息,覆盖所有主流播放应用(Chrome/Edge/Spotify/网易云音乐等)
  • 可直接获取媒体会话的实时播放状态,返回playing/paused/stopped三种明确状态
  • 原生支持播放、暂停、切歌、调整播放进度等控制操作,无需依赖模拟按键实现,不受当前窗口焦点影响,稳定性远高于robot.js方案

基础使用示例

const { MediaSessionManager } = require('winrt-media');

async function getMediaInfo() {
  // 获取系统当前所有活动媒体会话
  const sessions = await MediaSessionManager.getSessions();
  if (!sessions.length) return console.log('无正在播放的媒体');

  const currentSession = sessions[0];
  // 获取媒体元数据
  const metadata = currentSession.mediaProperties;
  console.log('当前播放标题:', metadata.title);
  // 获取播放状态
  const status = currentSession.playbackStatus;
  console.log('播放状态:', status === 'playing' ? '播放中' : status === 'paused' ? '已暂停' : '已停止');
  // 原生控制示例:暂停播放
  await currentSession.controls.pause();
}

getMediaInfo();

无原生模块的替代方案

如果不想引入原生Node模块,可自行开发极简C#控制台程序,调用Windows.Media.Control命名空间下的API获取媒体信息后序列化为JSON输出到stdout,Node侧通过child_process.exec调用该可执行文件解析输出结果即可,无需额外依赖,兼容性更强。

后续跨平台扩展参考

如果后续需要适配Linux和macOS,可对应选择平台原生方案:

  • macOS:调用系统NowPlaying框架的封装模块,或使用独立命令行工具输出stdout读取状态
  • Linux:基于D-Bus的MPRIS接口实现媒体状态读取与控制,有成熟的Node封装模块可用

内容的提问来源于stack exchange,提问作者Timmo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 14:57:02