javascript - Chrome 扩展选项卡捕获 API 音频流以在 HTML 页面中播放

标签 javascript html google-chrome-extension html5-audio web-audio-api

我正在创建一个 chrome 扩展,它使用 chrome tabCapture API 从选项卡捕获音频.我想在另一个 html 页面中播放这个音频流,希望最终为它创建一个可视化工具。

我像这样在后台脚本中捕获音频

chrome.browserAction.onClicked.addListener(function(activeTab) {
  var constraints = {
    audio: true,
    video: false,
  };

  var visualizerPage = chrome.extension.getURL("/views/visualizer.html");

  chrome.tabCapture.capture(constraints, function(stream) {
    console.log("\ngot stream");
    console.log(stream);

    chrome.tabs.create({
      url: visualizerPage
    }, function(tab) {

      chrome.tabs.sendMessage(tabID, {
        "message": "stream",
        "stream": stream
      });
    });
  });

音频流是从点击扩展程序的任何页面捕获的。另一个选项卡打开,音频流作为消息发送给它。

visualizer.html 页面的 javascript 是

function loadStream(stream) {
  // what do I have to put here to play the stream?
}

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
  if (request.message === "stream") {
    var stream = request.stream;

    if (!stream) {
      console.log("stream is null");
      return;
    }

    console.log(stream);
    loadStream(stream);
  }
  else if (request.message === "statusChanged") {
    console.log("statusChanged");
  }
});

我目前所做的是使用音频上下文将音频流加载到网络音频 api

var context = new AudioContext();
var source = context.createMediaStreamSource(stream);

但脚本在尝试创建源代码时挂起。

问题是我不太确定流是什么类型(tabCapture api 说它是 LocalMediaStream)。

如何获取播放音频流的页面?

最佳答案

在 loadStream 函数中试试这个:

var audio = new Audio();
audio.src = URL.createObjectURL(stream);
audio.play();

关于javascript - Chrome 扩展选项卡捕获 API 音频流以在 HTML 页面中播放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28666532/

相关文章:

javascript - Chrome 扩展程序将文本添加到可编辑的上下文菜单中

google-chrome-extension - Chrome 扩展 : Local Storage, 如何导出

javascript - 如何在 ajax 请求中传递主题标签

javascript - CSS 径向计数器 - 添加另一个圆圈来填充缺失的部分

javascript - 正则表达式在两个字符之间进行匹配

javascript - WebRTC 一个候选事件

javascript - 如何使用 lodash 返回嵌套数组?

javascript - 通过 CSS 和 JS 的两个重叠图像

javascript - 如何将注册表单中的第一个选项卡切换到另一个选项卡?

javascript - 有没有办法查看 Chrome 扩展程序的图标/按钮是否已隐藏?