我正在创建一个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");
}
});
目前我所拥有的是将音频流通过音频上下文加载到Web Audio API中。
var context = new AudioContext();
var source = context.createMediaStreamSource(stream);
但是脚本在尝试创建源时卡住了。
问题是我不太确定流的类型(tabCapture API表示它是LocalMediaStream)。
如何让页面播放音频流?
if (typeof AudioContext !== "undefined") { context = new AudioContext(); } else if (typeof webkitAudioContext !== "undefined") { context = new webkitAudioContext(); }
" 或者你尝试过另一个版本的Chrome浏览器吗? - Dayton Wangconsole.log('I am hit');var audio = new Audio(window.URL.createObjectURL(stream));audio.play();
,并告诉我你是否能够听到传输的音频。基于此,我将能够更好地回答你的问题... - mido