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

如何通过Chrome扩展获取当前播放音频流信息?

获取Chrome系浏览器当前播放音频信息的方法

Chrome的原生音频播放面板依赖HTML5的Media Session API和页面媒体元素数据,扩展可以通过以下方式直接获取这类信息:

1. 定位活跃音频标签页

先用chrome.tabs API筛选出正在播放音频的标签:

// 后台脚本:获取所有发声的标签页
chrome.tabs.query({audible: true}, (tabs) => {
  tabs.forEach(tab => {
    console.log('发声标签:', tab.id, tab.title);
    // 后续针对该标签获取媒体元数据
  });
});

2. 注入内容脚本读取媒体元数据

Chrome面板的核心数据来自页面的navigator.mediaSession,这是最可靠的数据源,其次是页面内的<audio>/<video>元素。给目标标签注入内容脚本提取信息:

步骤1:配置扩展权限

在manifest.json中声明必要权限:

{
  "manifest_version": 3,
  "permissions": ["tabs", "scripting"],
  // 可选:如果需要对所有站点生效,添加host permissions
  "host_permissions": ["<all_urls>"]
}

步骤2:内容脚本提取逻辑

// 内容脚本:获取当前播放媒体的完整信息
function extractMediaInfo() {
  // 优先读取Media Session(Chrome原生面板的数据源)
  if (navigator.mediaSession?.metadata) {
    const md = navigator.mediaSession.metadata;
    return {
      type: 'media-session',
      title: md.title,
      artist: md.artist,
      album: md.album,
      artwork: md.artwork?.map(art => art.src)
    };
  }
  //  fallback:直接查询活跃的媒体元素
  const activeMedia = [...document.querySelectorAll('audio, video')].find(el => !el.paused);
  if (activeMedia) {
    return {
      type: 'media-element',
      title: activeMedia.title || activeMedia.currentSrc.split('/').pop(),
      src: activeMedia.currentSrc,
      duration: activeMedia.duration
    };
  }
  return null;
}

步骤3:后台脚本调用并接收数据

// 后台脚本:给发声标签注入脚本并获取结果
chrome.tabs.query({audible: true}, (tabs) => {
  tabs.forEach(tab => {
    chrome.scripting.executeScript({
      target: { tabId: tab.id },
      function: extractMediaInfo
    }).then(results => {
      const mediaInfo = results[0].result;
      if (mediaInfo) {
        console.log('当前播放音频信息:', mediaInfo);
        // 这里可以处理信息,比如展示到扩展弹窗
      }
    });
  });
});

3. 实时监听播放状态变化

如果需要实时跟踪音频的启停或元数据更新,可以监听标签页状态变化:

// 后台脚本:监听标签音频状态变更
chrome.tabs.onUpdated.addListener((tabId, changeInfo, tab) => {
  // 仅当音频状态变化时触发
  if (changeInfo.audible !== undefined) {
    if (changeInfo.audible) {
      // 标签开始播放,提取信息
      chrome.scripting.executeScript({
        target: { tabId },
        function: extractMediaInfo
      }).then(results => {
        // 处理获取到的媒体信息
      });
    } else {
      // 标签停止播放,清理状态
    }
  }
});

兼容性说明

这套方法适用于所有Chrome系浏览器(Chromium、Brave、Edge),因为它们共享相同的扩展API和Media Session实现。对于部分自定义播放逻辑的站点,mediaSession依然是最稳定的数据源,和Chrome原生面板的逻辑一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:52:33